serverside mod framework for custom items, blocks, recipes and more
New Features:
custom-model-data
, id
, state
, and char
(details to be explained later).button_block
, fence_block
, and stem_block
.functions
option for crafting recipes, allowing post-crafting operations.conditions
option for crafting/smithing recipes.totem-animation
command with support for custom sounds.damage
function type.fix-atlas
option in config.ymlBug Fixes:
pack.mcmeta
formats.client-bound-data/material
not being applied in the villager trade UI and component hover events.API Changes:
stepOn
method for block behaviors.The 0.0.64 update is CraftEngine's first breaking change in several months. But don't worry, you can smoothly upgrade to the new version by following the steps below.
First, let's understand the main changes in the new version. The most core change is the complete removal of the additional-real-blocks
design. All real block IDs have been unified from craftengine:note_block_xx
to craftengine:custom_xx
. This means it's no longer necessary to register custom blocks individually for each block type. Instead, you can configure the serverside-blocks
option in config.yml
to create a shared internal ID pool for all blocks.
Secondly, mappings now support dynamic loading. They are no longer limited to fixed files in the plugin's root directory but can read configuration files from any resources/xxx/configuration
directory.
These changes aim to automate ID allocation. In previous versions, manual ID assignment was often troublesome. Humans are prone to forgetting and had to repeatedly check for used IDs. To reduce the configuration burden, we decided to automate this process, ensuring high reliability without impacting configuration file loading speed.
Automatic ID allocation will apply to the following:
custom-model-data
optionchar
option for imagesOf course, you can still manually set IDs by specifying the relevant options. All content automatically assigned by the plugin will be saved in the cache
folder within the plugin's root directory. To clean up outdated cache files, you can directly use the /ce debug clean-cache
command.
WorldPainter
or local WorldEdit
), ensure you enable the sync-custom-blocks-on-chunk-load
option in config.yml
and make sure all chunks requiring synchronization are loaded at least once.mappings.yml
and additional-real-blocks.yml
files have been removed. A new mappings.yml
file will be generated in the resources/internal/configuration
folder.id
parameter from each block's configuration. The plugin will then automatically assign unique IDs.variants
section, and this section is now optional.For example, for configuring multiple leaf variants, in the new version you only need the configuration below. There's no need to repeatedly write 28 separate variant entries:
properties: waterlogged: type: boolean default: false persistent: type: boolean default: true distance: type: int default: 7 range: 1~7 id: 100 # The allocation of real IDs has moved here from the old `variants` section. While you can still manually specify one as in this example, we highly recommend simply removing the `id` option. Letting the new system handle fully automatic allocation for you will greatly simplify configuration and avoid potential conflicts. variants: waterlogged=false: appearance: default waterlogged=true: appearance: waterlogged settings: resistance: 1200.0 burnable: false fluid-state: water distance=7,persistent=false: settings: is-randomly-ticking: true
To simplify configuration, all image resources now support automatic ID allocation. You just need to remove the char
option from your original configuration. Additionally, sprites requiring automatic allocation need to declare their layout via the grid-size
parameter. Refer to the example below for the specific configuration method:
images: default:emojis: height: 11 ascent: 9 font: minecraft:emoji file: minecraft:font/image/emojis.png grid-size: 4,4 # Rows, Columns
In the old version, manually configuring client block states via the state
option was a complex and error-prone process. To simplify this operation, the new version introduces the auto-state
option. You simply remove the original state configuration and specify a preset visual type via auto-state, and the plugin will automatically assign the most suitable block state for you.
Example 1: Creating an Arbitrary Solid Wood Block
Suppose you need to create a wood block requiring only a standard 1x1x1 solid visual appearance, regardless of whether the underlying block is a note block, mushroom block, or something else. You just specify solid
in auto-state
, and the plugin will automatically assign a suitable block.
block: settings: template: default:settings/planks loot: template: default:loot_table/self state: model: template: default:model/simplified_cube_all arguments: path: minecraft:block/custom/palm_planks auto-state: solid
Example 2: Creating a Leaves Block
If you need to create a new leaves block and don't care if its visual representation is oak leaves or birch leaves, as long as it has a generic leaves appearance, you can configure it as follows (this example is for a template):
appearances: default: auto-state: leaves model: path: ${model_path} generation: parent: minecraft:block/leaves textures: all: ${texture_path} waterlogged: auto-state: waterlogged_leaves model: path: ${model_path}
Currently Available auto-state
Preset Types:
Celebrating the release of v0.0.63! 🎉 This version introduces the concept of block entities for the first time. However, I sincerely apologize that the furniture refactoring originally planned for v0.0.63 has been postponed to v0.0.64.
After the comprehensive furniture refactoring in v0.0.64, I expect to launch the second part of the block entity update in v0.0.65. Please note that the current tick functionality of block entities does not work properly on Folia, and block entity rendering is incompatible with FastAsyncWorldEdit operations. These issues will be addressed and improved in v0.0.65.
New Features
change_over_time_block
, simple_storage_block
, toggleable_lamp_block
, bouncing_block
, liquid_flowable_block
wall_block_item
simple_storage
, simple_particle
, wall_torch_particle
max-damage
item datafriction
, jump-factor
, speed-factor
worldguard:region
condition typeteleport
, toast
safe_block
, amethyst_torch
, sofa
Bug Fixes
keep_components
in smithing recipesBlockBreakEvent
still dropping vanilla loots when item drops were cancelled by other pluginsonPlace
in block behaviors for some versionsitem_model
component in specific paths on version 1.21.2concrete_block
not solidifying immediately upon contact with liquid surfacesminecraft:component
properties in minecraft:condition
type item modelsOptimizations
<global>
now supports use in other pluginsconfig.yml
attribute-modifiers
enchantable
option, now also prevents items from being enchanted on anvilscommand
function, added as-event
and as-op
optionsmatch_block_property
condition to support vanilla block state matchingliquid_collision_block_item
external-item
construction logic, detecting potential circular build issuescategory
now supports adding duplicate item IDsCompatibility & Integration
Zaphkiel
, Slimefun
, SX-Item
, HeadDatabase
lobfile
APIRefactoring & API
spark
:<)isFirstReload
method to CraftEngineReloadEvent
CraftEngineBlocks/Items/Furniture
to retrieve all loaded configurationsAsyncResourcePackCacheEvent
to support other plugins caching their own resource packs in CraftEngine and participating in resource pack generationThis version is the last stable release prior to the "Furniture Refactoring and Block Entity" update. It primarily includes several major bug fixes and minor feature updates.
New Features
Bug Fixes
Optimizations
New Features
correct-tools
double_high_block_item
item behaviorshow-notification
to control recipe discovery messagesBug Fixes
Optimizations
In the 0.0.61 update, we introduced the double_high_block_item
behavior to fix some weird behaviors when placing double high blocks for instance doors. To fix that just replace the block_item
with double_high_block_item
.
New Features
Bug Fixes
Optimizations
In the 0.0.59.9 update, we introduced the smithing_trim recipe type. Because of this, some existing armor sets (like the default topaz set) now need the minecraft:trimmable_armor tag—otherwise, they won’t work with the smithing table for applying armor trims after this update.
templates:
default:armor/topaz:
material: chainmail_${part}
custom-model-data: 1000
data:
item-name: <!i><#FF8C00><i18n:item.topaz_${part}>
tooltip-style: minecraft:topaz
settings:
tags:
- default:topaz_tools
+ - minecraft:trimmable_armor
equipment:
asset-id: default:topaz
$$>=1.21.2:
slot: ${slot}
model:
template: default:model/armor_trim
We've added checks for missing template parameters in this update, so you might see some console warnings now. No worries though – just set default values for your templates or provide the missing parameters, and the warnings will go away.
appearances: type=top,waterlogged=false: state: ${base_block}[type=top,waterlogged=false] model: path: ${model_top_path} - generation: ${model_top_generation} + generation: ${model_top_generation:-null}
New Features
Bug Fixes
Optimizations
Changes
trapdoor_block
, door_block
, fence_gate_block
slab_block
, stairs_block
, pressure_plate_block
sturdy_base_block
, stackable_block
compost-probability
(composting chance)oversized-in-gui
(enlarged GUI display)hand-animation-on-swap
(hand animation when swapping)color-when-undyed
(default color for undyed items)"$$>=1.20"
)resource-pack.exclude-core-shaders
option.prefix
folders)waterlogged
block behavior:
migrate-templates
commandvolume: 0.9~1.0
)null
instead of parameter namesmap
type parameter shortcutsmask
application issuesstrippable_block
behavior in 1.21.5+:
block_attack
componentclient-bound-data
problems in 1.21.5+:
Bug Fixes
New Features
invulnerable
, craft-remaining-item
, consume-replacement
, food
((for 1.20.1-1.20.4)).client-bound-material
option for items.dyed-color
Improvements
/ce reload
in 5ms (tested on i9-13900K)New Template Syntax: Changed parameter format to ${param:-default}
(adds $ prefix and supports :-default_value)
Migration is Required: Run /ce debug migrate-templates
to convert existing template configs
Note: Migration isn't perfect - minor errors may occur with "{}" formatted config sections (should be easy to fix manually)
We apologize for the config format change caused by previous design limitations
Bug Fixes
New Features
Changes
Fixed Bugs:
right_click
event lacking position
argumentBreaking API Changes:
- CustomBlock and CustomFurniture classes have been converted to interfaces.
- LoadedFurniture in the craft-engine-bukkit module has been renamed to BukkitFurniture and now implements the Furniture interface.
Breaking Configuration Changes:
- Due to the new support for combined block behaviors, default configurations will be affected by this update. sugar_cane_block has been replaced with vertical_crop_block. For detailed default configuration changes, please refer to this commit: [3128fe3](https://github.com/Xiao-MoMi/craft-engine/commit/3128fe355122e2856fb5727fcccc4b68f35cf14d).
Fixed Bugs:
- Fixed client-side light remaining after breaking certain custom blocks.
- Fixed collision shapes not syncing with the client for some block types (e.g., cactus).
- Reimplemented self-host using Netty for improved stability.
- Fixed custom projectiles in always-loaded chunks not applying models correctly after restart.
- Fixed custom block tags causing water blocks to lose gravity and lava to appear as water in 1.20.5-1.21.1.
- Fixed torches and similar blocks placed on furniture breaking immediately (furniture was not designed to have support shape).
- Fixed container opening issues in early Paper 1.21.4 builds.
- Fixed replaceable blocks being able to replace themselves.
- Fixed debug stick not functioning properly.
New Features:
- Added support for combined block behaviors, allowing creation of new block types through customization.
- client-bound-data no longer requires server-side mods and now supports <arg> and <papi>.
- Enhanced <global> variable functionality, now supporting parameter passing within tags.
- <image> can now be used with other items and won't cause irreversible item corruption in creative mode (not guaranteed to work with ViaVersion).
- Added support-shape block setting.
- Added lamp_block behavior and redstone-related APIs.
- Added more condition and function types.
- Shift-clicking in the CE menu now directly gives items.
- Any item can now be used as a totem animation (requires 1.21.2+).
- Added legacy-model configuration for resource pack models compatible with 1.21.3 and below.
- Added support for merging external ZIP resource packs.
- Added blacklist for file extensions during resource pack merging.
- Refactored dependency downloads to further reduce plugin size.
- Added default configuration for copper_coil.
- Added blacklist configurations for bush_block and hanging_block.
Overview
API Changes