Page cover

⛏️Making Custom Blocks

Custom Block Definitions determine the properties of a block, including its custom model data.

Creating Custom Blocks

Custom block definitions go into plugins/Origami/custom/MY-CONTENT-PACK-NAME/blocks If this directory is empty, then Origami will generate an example file for you. Below is a working example of a custom block, rainbow_block.yml:

baseBlock: GLASS
displayName: '&cR&6a&ei&an&9b&bo&5w &6B&el&ao&9c&bk'
lore:
  - <rainbow>It shimmers beautifully in the sunlight.</rainbow>
canBeMinedWith:
  - pickaxes
timeToBreak: 40
toolLevelRequired: 2
drops:
  - DIAMOND(1)
dropLootTable: null
canBePushed: true
isAffectedByFortune: true
placeSound: BLOCK_AMETHYST_BLOCK_PLACE
breakSound: BLOCK_AMETHYST_BLOCK_BREAK
model: rainbow

events:
  - onRightClick: # <-- onRightClick is an event, see the events page for more info
      commands:
        # this is a list of Minecraft commands, executed as @s
        - tellraw @s {"text":"The block reverberates majestically.","italic":true,"color":"gray"}
      cooldown: 20 # <-- cooldown of 20 ticks (1 second)
  • (Material) baseBlock - determines what block goes beneath the custom model displayed via an item frame. GLASS typically works the best, but using SPAWNER works too.

  • (Integer) dropExperience is how much XP should be dropped when the block is mined. XP can only be gained from a block if using the correct tool.

  • (Formatted string) displayName - can use either legacy formatting codes (§ or &, but not both at once) or MiniMessage. You can also use a language string, and set the item's name in your resource pack's lang file instead - formatting included.

  • (List of formatted strings) lore - lore to display on the custom item. Each entry uses the same formatting rules as the displayName.

  • (List of tools) canBeMinedWith - multiple "preferred tools" can be set here, with valid tool types being: pickaxes, axes, shovels, hoes, and swords. A block can only be broken quickly or drop its items if one of the correct tools is used. Usually blocks in Minecraft only set one of these.

  • (Integer) toolLevelRequired - specifies the minimum tool level allowed for mining the block. Wooden tools are level 1, Stone are level 2, etc.

  • (List of Item Strings) drops - If both this and dropLootTable are null, the block will drop itself. Can optionally be followed by a semicolon and then a 0-1 "chance" value which determines the chance that particular item has of dropping (otherwise the item will always drop)

  • (Loot Table) dropLootTable - if both this and drops are null, the block will drop itself. You can use this to specify a loot table for the block to drop.

If both drops and dropLootTable are set, the result will be the items from the loot table plus whatever drops you specified.

  • (Boolean) canBePushed - if true, the block can be moved by Pistons and Sticky Pistons.

  • (Boolean) isAffectedByFortune - if true, the Fortune enchantment will apply a multiplier to the amount of each dropped item. Useful when creating ores.

  • (Sound) placeSound / breakSound - self explanatory

Model data

See this page for a guide on how models work.

  • (String) model - the name of the custom model. A value of rainbow here would point to <server folder>/plugins/Origami/custom/MY-CONTENT-PACK-NAME/models/block/rainbow.json

Last updated