Files
DupeAlias/Documentation.md

547 lines
17 KiB
Markdown

# DupeAlias Documentation
## Table of Contents
1. [Installation & Setup](#installation--setup)
2. [Core Concepts](#core-concepts)
3. [Item Tags System](#item-tags-system)
4. [Global Rules Engine](#global-rules-engine)
5. [Duplication GUIs](#duplication-guis)
6. [Permissions System](#permissions-system)
7. [Configuration](#configuration)
8. [Commands](#commands)
9. [Troubleshooting](#troubleshooting)
---
## Installation & Setup
### Prerequisites
- Minecraft 1.21.5
- Paper server software
- Java 21 or higher
### Installation Steps
1. Download the DupeAlias JAR file
2. Place it in your server's `plugins/` directory
3. Restart your server
4. The plugin will generate default configuration files in `plugins/DupeAlias/`
### First-Time Configuration
1. Join your server as an operator
2. Run `/da` to open the admin panel
3. Navigate to Configuration → Common Config to customize colors and branding
4. Set up your first global rules or start tagging items manually
---
## Core Concepts
### Item Tags
DupeAlias uses four primary tags that can be applied to items:
- **UNIQUE**: Prevents the item from being duplicated
- **FINAL**: Prevents the item from being modified in any way
- **INFINITE**: Keeps the item at maximum stack size (99)
- **PROTECTED**: Prevents the item from being used, consumed, or crafted with
### Tag Priority System
Individual item tags **always override** global rules. This allows for fine-grained control where you can set global rules for item types while making exceptions for specific items.
### Global Rules vs Individual Tags
- **Individual Tags**: Stored directly on the item's metadata, apply only to that specific item instance
- **Global Rules**: Server-wide rules that apply tags based on item properties like material, name, enchantments, etc.
---
## Item Tags System
### UNIQUE Tag
**Purpose**: Prevents item duplication through intended methods
**Use Cases**:
- Crate keys and special tokens
- Rare items and rewards
- Admin-only equipment
- Currency items
**Conflicts**: Cannot be combined with INFINITE.
**Example**: A crate key that should never be duplicated
### FINAL Tag
**Purpose**: Prevents any modification to the item
**Blocks**:
- Renaming items
- Enchanting items
- Repairing items
- Anvil operations
- Any metadata changes
**Use Cases**:
- Quest items with specific names
- Rank kits that shouldn't be modified
- Event rewards with special formatting
### INFINITE Tag
**Purpose**: Maintains maximum stack size and refills items
**Behavior**:
- Sets item stack to 99 (max stackable amount)
- Refills automatically after use
- Works with blocks, consumables, and projectiles
**Use Cases**:
- Creative-style building materials
- "Infinity" enchantment for tipped arrows
- Unlimited consumables for events
**Conflicts**: Cannot be combined with UNIQUE or PROTECTED
### PROTECTED Tag
**Purpose**: Makes items completely inert and unusable
**Blocks**:
- Using items (right-click)
- Consuming food/potions
- Placing blocks
- Attacking with weapons
- Crafting with the item
- Trading with villagers
**Use Cases**:
- Display items
- Coupons and vouchers
- Decorative rewards
- Placeholder items
**Conflicts**: Cannot be combined with INFINITE
---
## Global Rules Engine
### Creating Global Rules
1. Open admin panel with `/da`
2. Navigate to **Global Rules**
3. Click **+ Create New Rule**
4. Configure criteria and applied tags
5. Save the rule
### Rule Components
#### Applied Tags
Select which tags this rule will apply to matching items. Multiple tags can be selected for a single rule.
#### Match Mode
- **AND**: All criteria must match
- **OR**: Any criteria must match
- **NAND**: Not all criteria match
- **XOR**: Exactly one criteria matches
Note that if no criteria are selected, any material or ItemsAdder item will match.
#### Material Matching
- **IGNORE**: Apply to all materials and ItemsAdder items
- **WHITELIST**: Only apply to selected materials and ItemsAdder items
- **BLACKLIST**: Apply to all except selected materials and ItemsAdder items
### Criteria Types
#### Name Regex
Match items based on display name patterns using regular expressions.
``` Example: ".*[Kk]ey.*" matches any item with "key" or "Key" in the name ```
#### Lore Regex
Match items based on lore content using regular expressions.
``` Example: ".*Special.*" matches items with "Special" anywhere in lore ```
#### Compound Tag Regex
Match an item based on its compound tag generated from `ItemStack#getAsComponentString()`
```Example: ".*(nutrition).*|.*(saturation).*" Matches any custom food item```
#### NBT Tag Regex
Match an item based on its NBT tag generated from `ItemStack#getAsString()`
```Example: .*{dupenotallowed: 1b}.* matches items from DupePlus's blacklist```
#### Enchantments
Match items that have specific enchantments at minimum levels.
``` Example: Sharpness V → matches items with Sharpness 5 or higher ```
#### Attributes
Match items with specific attribute modifiers.
``` Example: Attack Damage ≥ 10.0 → matches weapons with high damage ```
#### Potion Effects
Match potions/foods with specific effects and amplifiers.
``` Example: Strength II → matches items giving Strength 2 or higher ```
#### Model Data
Match items with specific custom model data values.
``` Example: 12345 → matches items with CustomModelData: 12345 ```
#### Item Flags
Match items with specific visibility flags.
``` Example: HIDE_ENCHANTS → matches items that hide enchantments ```
#### Armor Trim
Match armor pieces with specific trim patterns or materials.
``` Example: Silence Pattern + Gold Material → matches gold silence trim armor ```
### Example Rules
#### Protect All Crate Keys
``` Applied Tags: UNIQUE, PROTECTED, FINAL Match Mode: OR NBT Tag Regex: ".*excellentcrates.*" Lore Regex: ".*[Cc]rate.*" ```
#### Make Netherite Gear Unmodifiable
``` Applied Tags: FINAL Match Mode: AND Material Mode: WHITELIST Materials: NETHERITE_SWORD, NETHERITE_AXE, NETHERITE_PICKAXE, etc. ```
#### Infinite Creative Blocks
``` Applied Tags: INFINITE Match Mode: AND Material Mode: WHITELIST Materials: STONE, DIRT, WOOD, CONCRETE variants ```
---
## Duplication GUIs
### Replicator GUI
**Access**: `/dupe replicator` or through main menu
**Permissions**:
- `dupealias.gui.replicator`: Main Access
- `dupealias.gui.replicator.cooldown.<integer>`: Sets the input swap cooldown time (milliseconds).
- `dupealias.gui.replicator.refresh.<integer>`: Sets the amount of ticks it takes for the output item to restock.
- `dupealias.gui.replicator.keep`: Determines if the player should keep the items in the chest when they close it.
**Features**:
- Single-item focused duplication
- Animated visual feedback
- Input cooldown system
- Progress bars for item refresh
**How to Use**:
1. Open the GUI
2. Drag an item into the left input slot
3. Take copies from the output slot
4. Input refreshes after cooldown period
**Best For**: Quick duplication of single item types
### Chest GUI
**Access**: `/dupe chest` or through main menu
**Permissions**:
- `dupealias.gui.chest`: Main Access
- `dupealias.gui.chest.cooldown.<integer>`: Sets the input swap cooldown time (milliseconds).
- `dupealias.gui.chest.keep`: Determines if the player should keep the items in the chest when they close it.
- `dupealias.gui.chest.keepondeath`: If set to false, all items in the chest will be dropped on the ground on death.
**Features**:
- Multi-item container interface
- 4 input columns, 4 output columns
- Individual item refresh timers
- Session persistence (doesn't persist over reboots)
**How to Use**:
1. Open the GUI
2. Place items in the left 4 columns
3. Take duplicated copies from the right 4 columns
4. Items refresh based on configured delays
**Best For**: Duplication of items you'll commonly need through session persistence.
### Inventory GUI
**Access**: `/dupe inventory` or through main menu
**Permissions**:
- `dupealias.gui.chest`: Main Access
- `dupealias.gui.chest.refresh.<integer>`: Sets the amount of ticks for the output items to restock
**Features**:
- Mirror of your actual inventory
- Includes armor slots and offhand
- Real-time synchronization
- Individual slot refresh timers
**How to Use**:
1. Open the GUI
2. Your inventory is mirrored in the interface
3. Take copies of any items you're carrying
4. GUI updates as you change your inventory
**Best For**: Easy access to copies of everything you're carrying
### Menu GUI
**Access**: `/dupe gui` or `/dupe` (if set as default)
**Permission**: `dupealias.gui` If granted, all other GUIs will be granted too unless specifically set to false.
**Features**:
- Central hub for all GUI types
- Permission-based access control
- Clean navigation interface
**How to Use**:
1. Open the main menu
2. Click on the GUI type you want to use
3. Access is controlled by permissions
---
## Permissions System
### Core Permissions
#### Admin Access
```yaml
dupealias.admin: true # Access to admin panel and configuration
```
#### Basic Duplication
```yaml
dupealias.dupe: true # Access to /dupe command
dupealias.dupe.cooldown.<integer>: false # Cooldown for command duping (milliseconds)
```
#### GUI Access
```yaml
dupealias.gui: true # Access to all GUIs
dupealias.gui.replicator: true # Access to replicator GUI
dupealias.gui.inventory: true # Access to inventory GUI
dupealias.gui.chest: true # Access to chest GUI
```
### Advanced Permissions
#### Session Persistence
```yaml
dupealias.gui.replicator.keep: false # Keep replicator items on close
dupealias.gui.chest.keep: false # Keep chest items on close
dupealias.gui.chest.keepondeath: false # Keep chest items on death
```
#### Permission Based Refresh Rates
```yaml
dupealias.gui.replicator.refresh.<integer>: false # Ticks of refresh cooldown
dupealias.gui.replicator.cooldown.<integer>: false # Ticks of re-input cooldown
dupealias.gui.inventory.refresh.<integer>: false # Ticks of refresh cooldown
dupealias.gui.chest.refresh.<integer>: false # Ticks of refresh cooldown
```
#### Tag Bypasses (Use Carefully!)
```yaml
dupealias.unique.bypass: false # Can dupe UNIQUE items
dupealias.final.bypass: false # Can modify FINAL items
dupealias.protected.bypass: false # Can use PROTECTED items
```
#### Special Permissions
```yaml
dupealias.infinite: true # Can use INFINITE items
```
### Permission Hierarchy
The plugin generally uses a "lowest value wins" system for numeric permissions. If a player has both `refresh.20` and `refresh.5`, they will get the 5-tick refresh cooldown. There is an exception to this rule however. For the permission `dupealias.dupe.limit.<integer>`, it will take the highest value given. This is because I am lazy and did not add a default limit for non ranked players.
### Example Permission Sets
#### VIP Player
```yaml
groups:
vip:
permissions:
- dupealias.dupe
- dupealias.gui
- dupealias.gui.replicator.refresh.5 # Faster refresh
- dupealias.gui.replicator.cooldown.10 # Shorter cooldown
- dupealias.dupe.cooldown.0 # No command cooldown
```
#### Staff Member
```yaml
groups:
staff:
permissions:
- dupealias.admin # Full admin access
- dupealias.gui.replicator.refresh.1 # Instant refresh
- dupealias.gui.*.keep # Session persistence
- dupealias.final.bypass # Can modify final items
```
---
## Configuration
### Main Configuration (`config.json`)
#### Duplication Settings
```json
{
"dupeCooldownMillis": 1000, // Command cooldown in milliseconds
"defaultDupeGui": "REPLICATOR" // Default GUI (REPLICATOR/INVENTORY/CHEST/MENU)
}
```
#### GUI Refresh Rates
```json
{
"replicator": {
"baseRefreshDelayTicks": 1, // Base item refresh delay
"baseInputCooldownTicks": 20 // Base input change cooldown
},
"chest": {
"baseRefreshDelayTicks": 1 // Base item refresh delay
},
"inventory": {
"baseRefreshDelayTicks": 1 // Base item refresh delay
}
}
```
#### Command Blocking
```json
{
"finalCommandRegex": [
"\"(?:itemname|iname)\"gmi", // Block item naming commands
"\"(?:itemlore|lore)\"gmi" // Block lore modification commands
]
}
```
#### Tag Lore Customization (MiniMessage)
```json
{
"trueTagLore": {
"UNIQUE": "<dark_blue><bold>|</bold><blue> Unique",
"FINAL": "<dark_red><bold>|</bold><red> Final",
"INFINITE": "<dark_green><bold>|</bold><green> Infinite",
"PROTECTED": "<dark_purple><bold>|</bold><light_purple> Protected"
},
"falseTagLore": {
"UNIQUE": "<dark_blue><bold>|</bold><blue> Dupeable",
"FINAL": "<dark_red><bold>|</bold><red> Mutable",
"INFINITE": "<dark_green><bold>|</bold><green> Finite",
"PROTECTED": "<dark_purple><bold>|</bold><light_purple> Unprotected"
}
}
```
### Common Configuration (`common.json`)
#### Visual Customization
```json
{
"mainColor": 11184895, // Primary color (hex: AAAAFF)
"secondaryColor": 909055, // Secondary color (hex: 00DDFF)
"pluginName": "DupeAlias", // Display name
"flatPrefix": "&9DupeAlias> &7", // Legacy chat prefix
"flat": false // Use legacy formatting
}
```
#### Debug Settings
```json
{
"debugMode": false, // Enable debug output
"debuggerExclusions": [] // Methods to exclude from debug
}
```
---
## Commands
### Administrative Commands
#### `/dupealias` (Aliases: `/da`)
**Permission**: `dupealias.admin`
**Description**: Main administrative command
**Subcommands**:
- `/da` - Open admin panel GUI
- `/da gui` - Open admin panel GUI
- `/da debug toggle` - Toggle debug mode
- `/da debug exclude <method>` - Exclude method from debugging
- `/da debug include <method>` - Include method in debugging
#### Tag Management
- `/da tag <tag> [material|global] [remove]` - Manage item tags
- `/da tag <tag>` - Tag held item
- `/da tag <tag> remove` - Remove tag from held item
- `/da tag <tag> false` - Set tag to false on held item
- `/da tag <tag> global` - Create global rule for held item material
- `/da tag <tag> <material>` - Create global rule for specific material
- `/da tag <tag> <material> remove` - Remove global rule
#### Rule Management
- `/da rule create <tag>` - Create new global rule
- `/da rule list` - List all global rules
- `/da rule remove <index>` - Remove rule by index
- `/da rule info <index>` - Show detailed rule information
### Player Commands
#### `/dupe`
**Permission**: `dupealias.dupe`
**Description**: Main duplication command
**Usage**:
- `/dupe` - Duplicate held item once OR open default GUI
- `/dupe <amount>` - Duplicate held item multiple times
- `/dupe gui` - Open main GUI menu
- `/dupe replicator` - Open replicator GUI
- `/dupe inventory` - Open inventory GUI
- `/dupe chest` - Open chest GUI
## Troubleshooting
### Common Issues
#### "You cannot dupe unique items"
**Cause**: Item has UNIQUE tag or matches global rule
**Solution**:
- Check `/da` → Held Item Actions to see current tags
- Review global rules that might be applying UNIQUE tag
- Use `/da tag UNIQUE remove` to remove individual tag
#### Items not refreshing in GUI
**Cause**: Long refresh delay or permission issues
**Solution**:
- Check player has appropriate GUI permissions
- Verify refresh rate permissions (lower numbers = faster)
- Ensure player isn't hitting cooldown limits
#### "You cannot modify final items"
**Cause**: Item has FINAL tag blocking modifications
**Solution**:
- Check item tags in admin panel
- Use `/da tag FINAL remove` if needed
- Grant `dupealias.final.bypass` permission for admins
#### Global rules not applying
**Cause**: Rule criteria not matching or individual tags overriding
**Solution**:
- Test rule criteria with `/da rule info <index>`
- Check match mode (AND vs OR)
- Remember individual tags override global rules
#### GUI won't open
**Cause**: Missing permissions or plugin conflicts
**Solution**:
- Verify player has `dupealias.gui` permission
- Check for inventory plugin conflicts
- Ensure player inventory isn't full
### Debug Mode
Enable debug mode to troubleshoot issues: ``` /da debug toggle ```
This will show detailed information about:
- Tag checking processes
- Global rule matching
- Permission calculations
- GUI state changes
Exclude noisy methods: ``` /da debug exclude <method_name> ```
### Performance Considerations
#### Large Player Counts
- Use session persistence sparingly
- Don't use GUI refresh or input cooldowns.
- Monitor server TPS with `/tps`
#### Complex Global Rules
- Avoid overly complex regex patterns
- Use material whitelisting instead of complex criteria when possible
- Limit the number of active global rules
#### GUI Optimization
- Consider disabling session persistence for busy servers
- Use cooldowns to prevent spam
---
### Getting Help
If you encounter issues not covered in this documentation:
1. Enable debug mode and check console logs
2. Verify your global rules are correctly configured
3. Check for conflicts with other plugins
4. Join the [Alias Development](https://trouper.me/alias) discord
Remember that individual item tags always override global rules, and bypass permissions should be used carefully as they can compromise your server's item security system.