🚧 COMING SOON

CustomiZer is currently in active development. This page previews everything the plugin will include at launch. Stay tuned!

🧩 CustomiZer — Complete Plugin Documentation

A single Minecraft plugin that handles resource packs, custom items, swords, armors, blocks, pickaxes, harvester hoes, GUI menus, and a full progression system — all from config files.

📦 Resource Pack

Auto-generates and serves your resource pack via HTTP. Supports packs folder, custom model data, 1.21.4+ items/ format.

🎁 Custom Items

17+ action types: heal, fly, commands, economy, job boosters, effects, god mode, and more.

⚔️ Rarity Swords

5-tier rarity system with unique textures per tier, lifesteal, elemental damage, and status effects.

🛡️ Custom Armors

Leather armors with custom colors, full armor set bonuses, and integrated resource pack support.

🧱 Custom Blocks

Note-block based custom blocks with break restrictions, drops, sounds, and particles.

⛏️ Custom Pickaxes

Leveling pickaxes with radius mining, vein mining, bonus drops, and hold effects.

🌾 Harvester Hoes

Multi-crop harvest hoes with economy rewards, Jobs XP, and auto-replant per level.

🏆 Progression

Mastery tracks, daily/weekly missions, prestige system, reforge station, and gem sockets.

📋 Requirements

DependencyTypePurpose
Paper / Purpur 1.21+RequiredServer platform
VaultSoftEconomy (money rewards, reforge costs)
PlaceholderAPISoftCustom placeholders in messages and lore
Jobs RebornSoftXP from breaking custom and vanilla blocks
WorldGuardSoftRegion-based XP/money multipliers
ModelEngineSoftMerges ModelEngine resource packs automatically
ItemsAdderSoftItemsAdder block reward detection (optional)
💡 All soft dependencies are fully optional and toggled per-feature in settings.yml. The plugin boots fine without any of them.

⌨️ Commands & Permissions

CommandPermissionDescription
/zcxp.useMain command — reload, get, give, list, gui, reforge
/z reloadcxp.reloadReloads all config files and rebuilds the resource pack
/z get <type> <name>cxp.useGet a custom item, sword, armor, block, harvester, or pickaxe
/z give <player> <type> <name>cxp.giveGive a custom item to another player
/z guicxp.guiOpens the main category GUI
/zrepaircxp.repairRepair all custom items in your inventory
/zmastery [player]cxp.masteryView mastery track progress
/zmissionscxp.missionsOpen the mission board
/zprestigecxp.prestigePrestige when all mastery tracks reach level 100
/zreforgecxp.reforgeOpen the reforge station GUI
/zsocket add [count]cxp.socket.addAdd 1–4 socket slots to the held item
/zsocket extractcxp.socketRemove and destroy the first socketed gem, freeing the slot
/zsocket infocxp.socketShow socket count and socketed gems on the held item
/z info <type> <name>cxp.adminShow model data, CMD, and metadata for any item, sword, armor, block, harvester, or pickaxe
/zpack zipcxp.adminRebuild the resource pack in memory and push it to all online players
/zpack reloadpackscxp.adminRescan the packs/ folder, re-assign model data, then rebuild the pack
/zpack fontscxp.adminList every registered font image with its pack:id and Unicode codepoint
/zpack font <pack> <id>cxp.adminPreview a font image in your action bar
/zpack gui <packName> [namespace]cxp.adminGenerate a GUI background pack from PNGs in gui_input/<packName>/
/zpack rank <packName> [namespace]cxp.adminGenerate a rank badge / icon pack from PNGs in rank_input/<packName>/
/zpack item <packName> [namespace] [material]cxp.adminGenerate a flat 2-D item pack from PNGs in item_input/<packName>/
/zpack block <packName> [namespace] [material] [sound]cxp.adminGenerate a custom block pack from PNGs in block_input/<packName>/
/zpack armor <packName> [namespace]cxp.adminGenerate an armor set pack from layer + icon PNGs in armor_input/<packName>/

📦 Resource Pack System

CustomiZer handles the entire resource pack pipeline automatically — no external hosting needed.

🌐 Built-in HTTP Server

On startup the plugin spins up a lightweight HTTP server on a configurable port (default 7270). The resource pack is served at http://<your-ip>:<port>/<hash>.zip. Players receive it automatically on join via the setResourcePack API.

🔄 Hot Reload Without Restart

Running /zpack zip or /z reload rebuilds the pack in memory and updates the live HTTP handler — the server never needs a restart. The new pack hash triggers a fresh download on the next player join.

📐 Dual Format Output

The pack is written in both formats simultaneously:

  • Old formatassets/minecraft/models/item/<material>.json with overrides[] — works on all versions including 1.21.8.
  • New formatassets/minecraft/items/<material>.json with range_dispatch — required for 1.21.4+ priority rendering.

🗂️ Includes Folder

Place any extra resource pack inside plugins/CustomiZer/includes/ and it will be merged into the generated pack automatically on every build. Perfect for adding custom sounds, textures, or fonts from other tools.

💡 ModelEngine's resource pack is merged automatically if ModelEngine is installed and resourcepack.modelengine: true is set in config.yml.
⚠️ Block item materials (DIRT, STONE, etc.) correctly inherit their 3D cube model — the plugin detects material.isBlock() and uses the block/<name> parent automatically to avoid missing textures.

🗂️ Pack Manager (packs/ folder)

Drop any pack folder into plugins/CustomiZer/packs/ and CustomiZer integrates it automatically. Packs ship their own configs and textures — no editing of core plugin files required.

📁 Pack Structure

Each pack folder contains a configs/ directory for YAML definitions and a resourcepack/ directory with textures, models, and fonts.

🔤 Namespace

Every pack declares its own namespace in the info.namespace field of each config file. All items, blocks, and assets are scoped to that namespace to avoid conflicts between packs.

🎨 Font Images

Packs can declare font images for GUI overlay textures. Scale, position, and horizontal offset are all configurable — and can be overridden globally in customfonts.yml.

🔗 Category Integration

Pack items appear in the in-game GUI under their category tab alongside configured items. Categories are defined in a configs/category.yml inside the pack.

📂 Complete Pack Folder Layout

This is the exact structure the plugin expects. Drop your pack folder into plugins/CustomiZer/packs/ and run /zpack reloadpacks then /zpack zip.

packs/
└── my_pack/
    ├── configs/
    │   ├── my_items.yml          ← items / blocks / font_images definitions
    │   ├── category.yml          ← optional: GUI category for this pack
    │   └── subfolder/            ← configs can be nested in subdirectories
    │       └── more_items.yml
    │
    └── resourcepack/
        ├── pack.mcmeta           ← required Minecraft pack metadata
        └── assets/
            └── <namespace>/     ← must match info.namespace in your YMLs
                ├── models/
                │   ├── item/     ← .json model files for items
                │   └── block/    ← .json model files for blocks
                └── textures/
                    ├── item/     ← .png textures for items
                    ├── block/    ← .png textures for blocks
                    └── custom/   ← textures for font images (any subpath)
💡 Namespace folder must match. If your YAML says info.namespace: gem_ranks, textures must be under assets/gem_ranks/textures/. A mismatch means textures silently fail to load.

📄 pack.mcmeta (required)

Place this file at resourcepack/pack.mcmeta. Use pack_format: 34 for Minecraft 1.21+.

{
  "pack": {
    "pack_format": 34,
    "description": "My Pack"
  }
}

🔑 Registry — Auto-assigned IDs

The plugin automatically assigns Custom Model Data integers (starting at 30100) to every item and block and Unicode PUA codepoints (starting at U+EC00) to every font image. These assignments are persisted in packs/.registry.yml — they never change between restarts, so existing items in player inventories remain valid.

ℹ️ After adding or editing a pack, always run /zpack reloadpacks (rescans and re-assigns IDs) then /zpack zip (rebuilds and pushes the pack to players). /z reload does both in one command.

🖼️ Font Images — GUI Overlays

CustomiZer supports custom GUI overlay images using Minecraft's bitmap font system. This lets you render full-texture images inside inventory titles — perfect for custom GUI backgrounds, rank badges, icons, and HUD overlays.

📂 Step 1 — Where to put the texture

Font textures are .png files placed inside the pack's resourcepack at:

resourcepack/assets/<namespace>/textures/<your-path>.png

The <your-path> value is whatever you write in the config's path: field (the .png extension is added automatically). Examples:

path: valueActual file location
bronze_amethyst_iresourcepack/assets/gem_ranks/textures/bronze_amethyst_i.png
custom/30main_gui/gui1resourcepack/assets/iavegas/textures/custom/30main_gui/gui1.png
ranks/gold_rankresourcepack/assets/my_pack/textures/ranks/gold_rank.png
⚠️ If the texture is not found at the exact expected path, the font entry is silently skipped — it won't show in /zpack fonts. Double-check the namespace folder matches info.namespace in your YAML.

📄 Step 2 — Declare it in configs/

Create a YAML file anywhere inside configs/ (e.g. configs/my_fonts.yml). You can mix font images with items in the same file, or keep them separate.

info:
  namespace: gem_ranks          # must match assets/<namespace>/ folder

font_images:
  ba_i:                         # unique ID for this font image
    path: "bronze_amethyst_i"   # path under textures/ (no .png)
    scale_ratio: 12             # rendered height in pixels
    y_position: 9.5             # ascent — distance from text baseline
    permission: bronze_amethyst_i   # optional: permission to display in GUI
    show_in_gui: true               # optional: show in font browser GUI

Full field reference:

FieldRequiredDescription
pathYesPath to the PNG relative to assets/<namespace>/textures/, without the .png extension
scale_ratioYesRendered height in game-pixels. Set this to the texture's natural pixel height for a 1:1 render. For a 176px-wide GUI texture, 176 fills the inventory width exactly.
y_positionYesAscent (vertical offset). 14 aligns the image to the top of a standard inventory frame. Smaller values move the image down.
permissionNoPermission node required to see this image in in-game GUIs
show_in_guiNotrue to display this font image in the GUI browser. Default: false

🔤 Step 3 — Apply the pack

After saving the files, run these two commands as admin:

  1. /zpack reloadpacks — scans the pack and assigns a Unicode codepoint to each font image
  2. /zpack zip — rebuilds the resource pack and sends it to online players

You can verify registration with /zpack fonts (lists all font IDs + their Unicode codepoints) and preview any single image with /zpack font <pack> <id> (shows it in your action bar).

✏️ Global Overrides — customfonts.yml

Override any font image's scale, position, and horizontal shift from plugins/CustomiZer/customfonts.yml without touching the pack itself. Useful for fine-tuning third-party packs.

fonts:
  gem_ranks:          # pack folder name
    ba_i:             # font image ID
      scale_ratio: 14
      y_position: 10
      x_position: -4  # horizontal pixel shift (not available in pack config)
⚠️ Minecraft's bitmap font system renders at most 256 pixels per dimension. Keep textures at or below 256×256 px — larger images fail silently and show as blank.

🪄 Pack Generators — Make Packs Without Coding

CustomiZer includes built-in pack generators that create a complete, ready-to-use resource pack just from PNG images you drop into a folder. No JSON files, no YAML editing, no coding required. The plugin figures everything out from your image files and produces all the configs automatically.

💡 General workflow for every generator:
1. Drop your PNG files into the correct input folder (see each section below).
2. Run the generator command in-game as an admin.
3. Run /zpack reloadpacks then /zpack zip.
Done — the pack is live and players receive it automatically.

🖼️ GUI Backgrounds

Full-width inventory overlay images. Auto-scales to fit the 176px inventory width.

🏅 Rank Badges

Small inline icons for chat, scoreboard, and lore. Rendered at natural pixel height.

🎁 Flat Items

One PNG = one item. Generates a flat 2-D item with full YAML config.

🧱 Custom Blocks

Auto-detects top/side texture splits. Generates 6-face block configs with REAL_NOTE placement.

🛡️ Armor Sets

Drop layer + icon PNGs per set. Generates armors_rendering + all armor piece items.

🖼️ GUI Background Generator — /zpack gui

Use this to create custom inventory background images — the large full-width textures that slide behind a chest or furnace GUI. Used by packs like iavegas.

📁 Step 1 — Put your PNG in the right folder

Create this folder if it doesn't exist, then drop your PNG inside:

plugins/CustomiZer/gui_input/<packName>/
  └── my_gui.png       ← your background image
  • Replace <packName> with any name you want, e.g. my_casino_gui.
  • You can put multiple PNGs in the folder — each becomes its own GUI image.
  • The PNG should be the same width as a Minecraft inventory (176px wide at 1× scale, or any multiple of that).

⌨️ Step 2 — Run the command

/zpack gui <packName>
/zpack gui <packName> <namespace>   ← optional: custom namespace, defaults to packName

The plugin reads your PNG dimensions, auto-calculates the scale_ratio so the image fills the full 176px inventory width, and generates:

  • plugins/CustomiZer/packs/<packName>/ — drop-in pack folder (ready for reloadpacks)
  • plugins/CustomiZer/gui_output/<packName>.zip — portable ZIP to share or archive

✅ Step 3 — Apply and use

/zpack reloadpacks
/zpack zip

To use the image as a GUI title background in gui.yml:

title: "<shift:-8><font_image:my_casino_gui:my_gui>"

Preview it instantly in-game: /zpack font <packName> <id>

ℹ️ <shift:-8> shifts the image 8 pixels left so it aligns with the left edge of the inventory frame. Adjust the number if your image looks off-center.

🏅 Rank Badge Generator — /zpack rank

Use this to create small inline icons — rank badges, clan logos, status icons — that appear in chat, scoreboards, item lore, or inventory titles. Used by packs like gem_ranks.

📁 Step 1 — Put your PNGs in the right folder

plugins/CustomiZer/rank_input/<packName>/
  ├── gold_rank.png
  ├── silver_rank.png
  └── bronze_rank.png
  • Each PNG = one rank badge. The filename (without .png) becomes the badge ID.
  • Make your images small — 12–20px tall works best for chat alignment.

⌨️ Step 2 — Run the command

/zpack rank <packName>
/zpack rank <packName> <namespace>   ← optional namespace

The generator uses the image's natural height as the scale_ratio (so a 12px-tall PNG renders at 12px), sets y_position: 9.5 to align with the chat baseline, and adds a permission field per badge.

✅ Step 3 — Apply and use

/zpack reloadpacks
/zpack zip

Insert a badge anywhere that accepts MiniMessage tags (chat prefix, lore, title):

<font_image:my_ranks:gold_rank> PlayerName

Each badge also gets a permission node equal to its filename (e.g. gold_rank). Gate display in your chat plugin using that node.

🎁 Item Generator — /zpack item

Use this to create custom inventory items — ingots, raw materials, quest items, consumables, anything that looks like a flat 2-D sprite. Used for packs like ultimate_armors (ingots, raw ore).

📁 Step 1 — Put your PNGs in the right folder

plugins/CustomiZer/item_input/<packName>/
  ├── blood_ingot.png
  ├── raw_blood.png
  └── solar_ingot.png
  • Filename (without .png) = item ID. Underscores become spaces in the display name (blood_ingotBlood Ingot).
  • Use standard Minecraft item texture sizes: 16×16 or 32×32.

⌨️ Step 2 — Run the command

/zpack item <packName>
/zpack item <packName> <namespace> <material>
  ↑ material defaults to PAPER — change to e.g. DIAMOND for a different base glow

✅ Step 3 — Apply and use

/zpack reloadpacks
/zpack zip

Give items to players or yourself:

/z give <player> item blood_ingot
/z get item solar_ingot

Open the generated config at packs/<packName>/configs/<packName>.yml to add lore, actions, crafting recipes, etc.

🧱 Block Generator — /zpack block

Use this to create custom placeable blocks that appear as solid cubes in the world. Used for packs like blossom_studios (decorative wood beams, stone tiles, etc.).

📁 Step 1 — Name your PNGs correctly

The generator auto-detects texture splits based on filename suffixes. You have two options per block:

Files you provideResult
oak_beam.png onlySame texture on all 6 faces (full cube)
oak_beam_top.png + oak_beam.pngTop & bottom = _top, four sides = bare name
oak_beam_top.png + oak_beam_side.pngTop & bottom = _top, four sides = _side
plugins/CustomiZer/block_input/<packName>/
  ├── oak_beam.png          ← sides (or all-faces if no _top exists)
  ├── oak_beam_top.png      ← top & bottom
  ├── stone_tile.png        ← all 6 faces identical (no _top provided)
  └── spruce_beam_top.png   ← top/bottom for spruce_beam (sides use spruce_beam.png or spruce_beam_side.png)

⌨️ Step 2 — Run the command

/zpack block <packName>
/zpack block <packName> <namespace> <material> <sound>
ArgumentDefaultOptions
namespacesame as packNameany lowercase name
materialPAPERany Bukkit material (held item appearance)
soundstonestone, wood, metal, dirt, sand

✅ Step 3 — Apply and use

/zpack reloadpacks
/zpack zip

/z give <player> block oak_beam     ← gives the item; right-click to place

Open packs/<packName>/configs/<packName>.yml to adjust hardness, sounds, and drops. To set what drops when mined, add an entry in blocks.yml:

blocks:
  oak_beam:
    pack_id: "<packName>:oak_beam"
    display_name: "Oak Beam"
    drops:
      - item: OAK_LOG
        amount: 1
        chance: 100
⚠️ Blocks use REAL_NOTE placement — they consume note-block states. Your server has a limited number of note-block states available. Avoid adding hundreds of custom block types if your server already uses ItemsAdder or similar plugins that also consume note-block states.

🛡️ Armor Set Generator — /zpack armor

Use this to create a complete wearable armor set — helmet, chestplate, leggings, boots — with custom inventory icons and worn overlay textures. Used for packs like elitecreatures.

📁 Step 1 — Create one subfolder per armor set

plugins/CustomiZer/armor_input/<packName>/
  └── my_armor_set/           ← one folder per set; folder name = set ID
      ├── layer_1.png         ← REQUIRED — worn overlay: body, arms, feet
      ├── layer_2.png         ← REQUIRED — worn overlay: leggings only
      ├── helmet.png          ← optional inventory icon
      ├── chestplate.png      ← optional inventory icon
      ├── leggings.png        ← optional inventory icon
      └── boots.png           ← optional inventory icon
  • layer_1.png and layer_2.png are the worn textures players see when the armor is equipped. Make them in Blockbench or any armor texture editor.
  • The icon PNGs are what shows in the inventory slot. Standard 16×16 or 32×32.
  • You can have multiple set subfolders under one <packName> — all sets get merged into a single pack file.

⌨️ Step 2 — Run the command

/zpack armor <packName>
/zpack armor <packName> <namespace>   ← optional namespace, defaults to packName

The generator produces a config with:

  • An armors_rendering block linking layer_1 and layer_2 to the set ID
  • An item entry per piece you provided (helmet/chestplate/leggings/boots) with specific_properties.armor.slot set correctly

✅ Step 3 — Apply and use

/zpack reloadpacks
/zpack zip

/z give <player> armor my_armor_set_chestplate

Open packs/<packName>/configs/<packName>.yml to optionally enable leather color tinting:

armors_rendering:
  my_armor_set:
    color: '#8c196c'    ← hex colour shown on the leather base layer
    use_color: true     ← set to true to enable tinting
ℹ️ 3-D cosmetic items (like the barrel_knight pack — barrel chestplate, pitchfork, etc.) use hand-crafted JSON geometry files made in Blockbench. Those cannot be auto-generated from textures and must be built manually. The armor generator only covers standard flat-texture armor sets.

🎁 Custom Items

Items can be defined in two ways: via the main plugins/CustomiZer/items.yml (gameplay actions), or via a pack config inside packs/<pack>/configs/ (resource pack textures/models for any item type).

📦 Pack Item Config (configs/*.yml)

This is the format for defining items inside a pack folder. The plugin reads all .yml files recursively from configs/. Every file that has an items: section is processed.

info:
  namespace: my_pack            # must match the assets/<namespace>/ folder

items:
  my_item:                      # unique item ID within this namespace
    display_name: "My Item"     # shown in-game (color codes supported)
    resource:
      material: PAPER           # base Minecraft material
      generate: false           # false = use an existing model JSON
      model_path: item/my_item  # path relative to assets/<namespace>/models/
                                # (no .json extension needed)

To auto-generate a simple flat item model from a texture (no model JSON needed):

items:
  bronze_coin:
    display_name: "Bronze Coin"
    resource:
      material: PAPER
      generate: true            # plugin generates the model automatically
      model_path: item/bronze_coin   # resolves to textures/item/bronze_coin.png

Full resource: field reference:

FieldRequiredDescription
materialYesBase Minecraft material — e.g. PAPER, DIAMOND_SWORD, LEATHER_HORSE_ARMOR
generateNotrue = auto-generate a flat item/generated model from the texture at model_path. false = use the model JSON at models/<model_path>.json
model_pathYesWhen generate: true — path to the texture PNG under textures/. When generate: false — path to the model JSON under models/. Both relative to assets/<namespace>/, no extension needed.
model_idNoForce a specific Custom Model Data integer. Omit to let the plugin auto-assign one (recommended).

📂 Where to put the texture / model

Given namespace: my_pack and model_path: item/my_item:

generate:File to provideFull path
trueTexture PNGresourcepack/assets/my_pack/textures/item/my_item.png
falseModel JSON + textures it referencesresourcepack/assets/my_pack/models/item/my_item.json

📄 Main items.yml (action items)

Right-click action items are configured in plugins/CustomiZer/items.yml. Fields:

  • NAME — Display name (color codes supported)
  • MATERIAL — Vanilla Minecraft material (e.g. PAPER, DIAMOND)
  • LORE — List of lore lines
  • CMD — Custom model data integer (links to resource pack texture)
  • COOLDOWN — Seconds before the item can be used again
  • DURATION — Effect duration in seconds (for effect actions)
  • AMOUNT / MAX_AMOUNT — For money/random money actions
  • COMMAND — Console command to run (%player% placeholder)
  • ACTION — What the item does (see table below)

⚡ Item Actions

ActionWhat it doesExtra fields
COMMANDRuns a console command when usedCOMMAND
HEALRestores the player to full health
JUMPApplies Jump Boost effectDURATION
SPEEDApplies Speed effectDURATION
REGENApplies Regeneration effectDURATION
STRENGTHApplies Strength effectDURATION
LUCKApplies Luck effectDURATION
POISONPoisons the player (curse item)DURATION
GODToggles Resistance + Saturation + Regeneration
FLYToggles flight for the player
MONEYDeposits a fixed amount to the player's balanceAMOUNT
RANDOMMONEYDeposits a random amount within a rangeAMOUNT, MAX_AMOUNT
JOBSBOOSTERApplies a Jobs XP multiplier for a durationJOB_BOOST_MULTIPLIER, JOB_BOOST_DURATION
UNCLAIMScans chunks in a radius and unclaims themAREA
DIEInstantly kills the player
NONEItem with no action (decoration, key item, trophy)

⚔️ Custom Swords (swords.yml)

Custom swords support a 5-tier rarity system. Each tier can have a completely different custom model data value, meaning a different texture. Players upgrade their sword's rarity to unlock better stats and visuals.

🎨 5 Rarity Tiers

Common → Rare → Epic → Legendary → Mythical. Each tier has its own CMD (texture), name, and lore.

💉 Lifesteal

Configure a percentage of damage dealt to be returned as health (e.g. lifesteal: 0.10 = 10%).

🔥 Elemental Damage

Assign an elemental type (Fire, Ice, Lightning…) that triggers special effects on hit.

✨ Hit Effects

Apply potion effects to enemies or yourself on hit, each with a configurable chance and duration.

📄 Sword Config Structure

  • type — Minecraft material (e.g. IRON_SWORD)
  • lifesteal — 0.0–1.0 fraction of damage returned as HP
  • elemental_damage — Element name string
  • effects-enemy — Map of effect → chance + duration applied to the hit target
  • effects-self — Map of effect → chance + duration applied to the attacker
  • rarity.common / rare / epic / legendary / mythical — Per-tier custom_model_data, name, and lore

🛡️ Custom Armors (armors.yml)

Custom armors use leather armor with specific RGB dye colors to match your resource pack textures. Each piece (helmet, chestplate, leggings, boots) is individually configured.

📄 Armor Config Structure

  • color — RGB integer for the leather dye color (e.g. 16711680 = red)
  • custom_model_data — CMD for each armor piece
  • display_name — Display name per piece
  • lore — Lore lines per piece
  • attributes — Vanilla attribute modifiers (armor, armor_toughness, attack_damage…)

✨ Armor Set Bonuses (sets.yml)

When a player equips all pieces of a configured armor set, a set bonus activates. Bonuses can include persistent potion effects, stat boosts, and broadcast messages.

💡 Set bonuses activate and deactivate automatically as pieces are equipped or removed. A message is shown to the player on both events.

🧱 Custom Blocks

Custom blocks use Minecraft's note-block system — each unique instrument + note combination maps to a Custom Model Data value, providing hundreds of unique block textures with no client mod required.

📦 Pack Block Config (configs/*.yml)

Blocks are items with a specific_properties.block section. The item ID, texture, and model are registered just like a regular item, but the block placement behavior is added below:

info:
  namespace: my_pack

items:
  custom_ore:
    display_name: "Custom Ore"
    resource:
      material: PAPER             # underlying item material
      generate: true              # auto-generate cube model from 6 textures
      textures:                   # [top, bottom, north, south, east, west]
        - block/custom_ore_top
        - block/custom_ore_bottom
        - block/custom_ore_side
        - block/custom_ore_side
        - block/custom_ore_side
        - block/custom_ore_side

    specific_properties:
      block:
        placed_model:
          type: REAL_NOTE         # uses the note-block placement system
          break_particles: BLOCK  # particle type on break
          directional_mode: NONE  # NONE / LOG (4 rotations) / AXIS (2 rotations)
        cancel_drop: false        # true = don't drop the item when broken
        hardness: 3.0             # mining resistance
        sound:
          break:
            name: "BLOCK_STONE_BREAK"
            volume: 1.0
            pitch: 1.0
          place:
            name: "BLOCK_STONE_PLACE"
            volume: 1.0
            pitch: 1.0

specific_properties.block field reference:

FieldDescription
placed_model.typeAlways REAL_NOTE for pack blocks (note-block state system)
placed_model.break_particlesParticle type on break — e.g. BLOCK, ITEM
placed_model.directional_modeNONE — no rotation; LOG — 4 face directions; AXIS — 2 axis directions
cancel_dropfalse = drop the item when broken; true = suppress the drop
hardnessMining resistance (float). Matches vanilla block hardness values.
sound.break / sound.placeBukkit sound name + volume + pitch played on break/place

📂 Where to put the block textures

Given namespace: my_pack and generate: true with textures listed as block/custom_ore_top:

resourcepack/assets/my_pack/textures/block/custom_ore_top.png
resourcepack/assets/my_pack/textures/block/custom_ore_bottom.png
resourcepack/assets/my_pack/textures/block/custom_ore_side.png

If using generate: false, provide a model JSON at resourcepack/assets/my_pack/models/<model_path>.json that references your textures.

🔨 Break Restrictions

Configure allowed tools with break_with in blocks.yml. Supports vanilla materials, HAND, and custom pickaxe IDs.

📦 Custom Drops

Each block entry in blocks.yml can define extra drops: items from items.yml, pack items, or vanilla materials — with amount ranges and drop chances.

🔊 Sound & Particle

soundeffectonmined and visualeffectonmined fire when the block is broken, regardless of reward config.

🗺️ Persistence

All placed pack blocks are saved to pack_blocks.yml and survive server restarts with correct texture state restored.

⚠️ Note-block textures depend on the block placed below them. The plugin cancels block-physics events to prevent adjacent block changes from corrupting the instrument/note state.

💰 Block Rewards (xp_values in blocks.yml)

The xp_values section in blocks.yml maps block IDs to rewards given when a player breaks them. Supports both custom pack blocks and vanilla Minecraft blocks.

FieldDescription
nameFriendly block name used in messages
jobsxpJobs Reborn XP awarded on break
jobJobs job name receiving the XP (e.g. Miner)
moneyVault economy money deposited on break
pointsJobs points awarded on break
cancel-vanilla-dropstrue = suppress default drops; false = keep them alongside rewards
soundeffectonminedBukkit Sound name played on break
visualeffectonminedParticle effect name spawned on break
bannedtoolsTools that cannot break this block (vanilla blocks only)
DropsExtra reward drops — type VANILLA, CMODELDATA, or COMMAND — each with a chance, message, and drop value
💡 WorldGuard region multipliers and dividers are applied automatically to jobsxp, money, and points when WorldGuard integration is enabled.

🌍 Ore Generator (generators.yml)

CustomiZer can automatically inject blocks into newly generated chunks — custom ores, decorative pack blocks, or vanilla blocks — without any external plugins. Supports vanilla blocks, your own CustomiZer pack blocks, and ItemsAdder blocks.

💡 The generator only runs when a chunk is generated for the first time. It does not affect already-explored terrain. To test it, travel to unexplored areas of your world.

📋 Block ID Formats

FormatExampleWhat it places
minecraft:<MATERIAL>minecraft:gold_oreAny vanilla Minecraft block — use the Bukkit material name in lowercase after the colon
<packName>:<itemId>blossom_studios:oak_beamA CustomiZer pack block — must be a block registered in packs/ with placed_model.type: REAL_NOTE
<namespace>:<id>myitems:custom_oreAn ItemsAdder custom block — ItemsAdder plugin must be installed
ℹ️ The plugin identifies CustomiZer blocks first (looks them up in the pack registry). If no pack block is found, it tries ItemsAdder as a fallback.

📄 generators.yml — Full Config Reference

worlds_populators:

  my_custom_ore:
    block: blossom_studios:oak_beam   # block ID — see formats above
    worlds:
      - world                          # exact world folder name
    replaceable_blocks:
      - STONE                          # Bukkit material names (uppercase)
      - DEEPSLATE
    biomes: []                         # empty = any biome
                                       # or list specific biomes: [PLAINS, DESERT, FOREST]
    chance: 70.0                       # 0–100 — % probability each vein attempt places a block
    amount: 8                          # vein placement attempts per newly generated chunk
    max_height: 45                     # highest Y this ore can generate
    min_height: -60                    # lowest Y (use negative for deepslate layer)
FieldRequiredDescription
blockYesBlock ID to place — see formats table above
worldsYesList of exact world folder names where this generator runs
replaceable_blocksYesBukkit material names (uppercase) this ore can replace. Only blocks of these types will be overwritten.
biomesNoRestrict to specific biomes (uppercase, e.g. PLAINS). Empty list [] = generate in any biome.
chanceYes0–100 percent. Probability that each vein attempt actually places a block. 100 = always place, 50 = 50% chance per attempt.
amountNoNumber of vein placement attempts per newly generated chunk. Default: 6. Higher = denser ore generation.
min_heightYesLowest Y level the ore can generate at. Use negative values for deepslate layers (e.g. -60).
max_heightYesHighest Y level the ore can generate at.

⚡ Quick Examples

Dense ore deep underground, any biome:

my_deep_ore:
  block: minecraft:ancient_debris
  worlds: [world]
  replaceable_blocks: [NETHERRACK]
  biomes: []
  chance: 40.0
  amount: 3
  min_height: -58
  max_height: 16

CustomiZer pack block, plains only:

blood_ore:
  block: ultimate_armors:blood_ore
  worlds: [world]
  replaceable_blocks: [STONE, ANDESITE, GRANITE]
  biomes: [PLAINS]
  chance: 60.0
  amount: 5
  min_height: 10
  max_height: 50
⚠️ Ore generation only affects newly generated chunks. Already-explored terrain is never modified. To see your ores, explore areas your server has never generated before.
ℹ️ CustomiZer pack blocks placed by the generator are fully tracked in pack_blocks.yml — they show the correct texture, prevent note-block physics corruption, and drop the correct items when broken, just like player-placed blocks.

⛏️ Custom Pickaxes (pickaxes.yml)

Custom pickaxes level up as players mine with them. Each level unlocks better stats, abilities, and visual upgrades via changing custom model data.

📊 Level System

Each level requires a set number of blocks mined (blocks_required). On level-up, CMD changes to show a new texture and a message is sent.

🔲 Radius Mining

radius and height_radius control how many extra blocks are broken in a cube around the target block.

⚗️ Hold Effects

effect_on_hold applies a potion effect while the pickaxe is in the main hand (e.g. Haste).

🎁 Bonus Drops

bonus can add extra drops (vanilla items or custom items) with a configured chance per level.

📋 Lore Placeholders

Pickaxe lore lines support dynamic placeholders that update as the pickaxe levels up:

  • {level} — Current level number
  • {blocks_mined} — Total blocks mined with this pickaxe
  • {blocks_required} — Blocks needed to reach the next level
  • {progress} — Visual progress bar

🌾 Harvester Hoes (harvesterhoes.yml)

Harvester hoes automatically harvest crops in a configurable area. They also reward money and Jobs XP per crop harvested, with different amounts per crop type.

📄 Hoe Structure

  • type — Vanilla hoe material
  • display_name, lore — Cosmetics
  • custom_model_data — Resource pack texture
  • levels — Map of level keys, each with radius, money per crop, XP per crop, and specific drop overrides per crop type (WHEAT, CARROT, POTATO, etc.)
  • abilities — Per-level abilities (e.g. auto-replant, fortune multiplier)
💡 Harvester hoe rewards are integrated with Jobs Reborn and Vault economy. Economy rewards fire per individual crop harvested, not per right-click.

🏆 Mastery System

Players gain mastery XP by performing in-game activities (breaking blocks, killing mobs, crafting, etc.). Mastery is split into multiple tracks, each with 100 levels. Reaching level 100 in all tracks unlocks Prestige.

📈 Multiple Tracks

Each track represents a different skill area. Players can specialize or grind all tracks simultaneously.

🎖️ Level Rewards

Configurable rewards per mastery level milestone — commands, items, money, or effects.

📊 Leaderboards

View mastery progress for yourself or any online player with /zmastery [player].

🔌 PlaceholderAPI

Mastery levels and track progress are exposed as PAPI placeholders for use in scoreboards, chat, and holograms.

📋 Mission System

Players complete daily and weekly missions to earn rewards. Missions reset on a configurable schedule and are displayed in a paginated GUI.

FeatureDetails
Mission typesBreak blocks, kill mobs, mine specific ores, use items, and more
Reset schedulesDaily and weekly — configurable reset times
RewardsCommands, economy money, custom items, mastery XP
GUIPaginated mission board with progress bars and completion status
Completion messageBroadcast message sent to the player on mission completion

⭐ Prestige System

When a player reaches level 100 in all mastery tracks, they can prestige. Prestiging resets all mastery levels to 0 but grants a permanent prestige tier displayed in their profile.

⚠️ Prestige requires confirmation — players must run /zprestige confirm after the initial command to prevent accidental resets.
💡 Each prestige level can unlock exclusive titles, cosmetics, or server perks configured via the reward command system.

🔮 Reforge System

Players can reforge custom items at the reforge station to apply random modifiers that boost stats. Each reforge costs a configurable amount of in-game currency.

🎲 How Reforging Works

  1. Open the reforge station via /zreforge or the GUI.
  2. Place the item you want to reforge in the station slot.
  3. Pay the reforge cost (Vault economy).
  4. A random modifier is applied — modifiers can change attack damage, speed, defense, or apply special effects.
  5. Re-roll as many times as desired to chase the modifier you want.

💎 Gem Socket System

Items can have gem sockets added to them. Players insert gem items into sockets to permanently boost the item's stats.

CommandWhat it does
/zsocket add <count>Admin command — adds socket slots to the held item
/zsocket infoShows how many sockets the held item has and what gems are socketed
/zsocket extractRemoves and destroys the gem in slot 1, returning the socket slot
Right-click gem on itemInserts the gem into the first available socket slot

🗃️ GUI System (gui.yml)

All GUIs are fully configurable from plugins/CustomiZer/gui.yml. Every category, subcategory, and pagination button can have a custom material, CMD, name, lore, slot, and decoration.

📂 Category Menu

The main category GUI shows buttons for each content type: Items, Swords, Armors, Blocks, Pickaxes, Harvesters, and Cosmetics. Clicking a category opens a subcategory menu.

📑 Subcategory Tabs

Each category has two tabs:

  • Configured Items — items defined in the main plugin config files (items.yml, swords.yml, etc.)
  • Pack Items — items coming from installed packs in the packs/ folder

Both tabs are independently paginated. Each category has its own subcategory configuration (title, materials, slots) in gui.yml.

🎨 Decoration & Borders

Each GUI section supports a configurable background item (fills empty slots) and a border item (fills the GUI frame). Both can be any material with a custom CMD.

📄 Pagination

When item count exceeds the available slots, pagination is enabled automatically. Previous-page, next-page, and close buttons are all individually configurable per category with custom materials, CMD, name, and slot position.

🔌 Integrations

💰 Vault

All economy rewards (block breaks, item use, reforge costs) go through Vault. Compatible with any economy plugin that supports Vault.

⚒️ Jobs Reborn

Breaking blocks configured in xp_values awards Jobs XP directly to the player's job progression. Both custom pack blocks and vanilla blocks supported.

🗺️ WorldGuard

Region-based XP and money multipliers, dividers, and time-based boost schedules. Configure per-region reward scaling without touching individual block configs.

📊 PlaceholderAPI

Exposes mastery levels, prestige tier, and other player stats as PAPI placeholders for scoreboards, chat formatting, and holograms.

🎭 ModelEngine

If ModelEngine is installed, its resource pack is automatically merged into the CustomiZer-generated pack so you never have two conflicting packs.

🧊 ItemsAdder

Optional integration for detecting ItemsAdder custom blocks in reward events. Can be disabled entirely in settings.yml.

⚙️ Settings & Config Files

FilePurpose
config.ymlServer IP/port for resource pack, language, hotbar/bossbar toggles, WorldGuard region multipliers
settings.ymlToggle integrations: itemsadder_support, worldguard_integration_support, jobs_support (all default false)
blocks.ymlCustom placeable blocks (break restrictions, drops, sound/particle) + xp_values block rewards
items.ymlCustom right-click items and their actions
swords.ymlCustom swords with rarity tiers
armors.ymlCustom leather armor sets
sets.ymlArmor set bonus definitions
pickaxes.ymlLeveling custom pickaxes
harvesterhoes.ymlHarvester hoe definitions
generators.ymlWorld ore/block generator — define custom block injection rules per world, biome, height range, and chance
gui.ymlAll GUI layouts — sizes, titles, button materials/slots, decoration, pagination
customfonts.ymlGlobal overrides for pack font image scale/position (takes priority over pack configs on every startup)
rarity.ymlRarity tier definitions and display names
lang/en.yml lang/fr.ymlAll plugin messages in English and French
packs/Drop-in pack folders (each with configs/ and resourcepack/)
includes/Extra resource pack files merged into the generated pack
models/JSON model files for custom pickaxes
ℹ️ All config files are reloaded with /z reload. To rebuild only the resource pack without a full config reload, use /zpack zip. Neither requires a server restart.