ClevelandCustomBlocks
A simple, lightweight, clean and robust custom block plugin
For Normal Users
Introduction
- Compatible with Paper 1.21.4 and later.
- Built with Kotlin/JDK 21
How to Install
- Download the plugin JAR (named
ClevelandCustomBlocks-[version].jar). - Drop it into your server’s plugins/ folder.
- Start the server once. The plugin will create its data folder and copy a default define.yml into:
plugins/ClevelandCustomBlocks/define.yml - (Optional but recommended) Prepare a resource pack (see "How to build resourcepack" below) so your custom blocks render as intended.
- Make sure your server is running Paper 1.21.4+ and clients use the same resource pack. (or just use force server-resourcepack)
How to Configure
See wikipage: How-to-Configure-Resourcepack-and-define.
How to Use
Commands & Permissions
Permissions:
clevelandcustomblocks.use: All Commands (default: OP)
Commands
/ccbs give [player|@selector] [pack:id] [amount]Give item/ccbs reload: Reloadsdefine.ymland reports changes/warnings./ccbs chunk GET: Summarize all registered custom blocks in the current chunk./ccbs chunk CLEANUPForcibly clean all registered custom blocks in the current chunk. ```
Play
Place Just place it like a normal block. The plugin:
1. Replaces the target block with an invisible **collision** block (`BARRIER`).
2. Spawns an `ItemDisplay` at the block center showing your model.
Interact
- Right-click** the block to run configured **actions** (as player/server).
- Left-click** the block to **remove** it. In **Creative**, it removes without dropping. In **Survival**, it drops the corresponding item.
Links
Troubleshooting
- Placed block shows as barrier / no model: Ensure the client has your resource pack and the selector model exists under the correct path for your
originalBlock. - Right-click does nothing: Make sure the block definition has an
action:section and your commands are valid for your server/plugins.$clickerbecomes the player name. - Items don’t stack as expected: The plugin respects the base item’s
maxStackSizeand splits large grants into multiple stacks.