9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 15:09:15 +00:00

调整配置文件格式

This commit is contained in:
XiaoMoMi
2025-08-23 03:24:10 +08:00
parent eca18e32d7
commit f8bbe9011a
5 changed files with 88 additions and 62 deletions

View File

@@ -9,7 +9,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet;
public class CustomIngredientList extends ArrayList<Object> { public class CustomIngredientList extends ArrayList<Object> {
private final Ingredient<ItemStack> ingredient; private final Ingredient<ItemStack> ingredient;

View File

@@ -190,16 +190,6 @@ block:
extended-interaction-range: 0.5 extended-interaction-range: 0.5
furniture: furniture:
# Automatically remove outdated furniture entities when a chunk is loaded.
handle-invalid-furniture-on-chunk-load:
# Enable/disable the cleanup system
enable: false
# Removes the specified invalid furniture
remove:
- "xxx:invalid_furniture"
# Converts the invalid furniture to a valid one
convert:
"namespace:furniture_a": "namespace:furniture_b"
# Hide technical entities used for storing furniture metadata. # Hide technical entities used for storing furniture metadata.
# NOTE: # NOTE:
# - These are INVISIBLE entities used internally for tracking furniture states # - These are INVISIBLE entities used internally for tracking furniture states
@@ -211,10 +201,14 @@ furniture:
collision-entity-type: interaction collision-entity-type: interaction
emoji: emoji:
chat: true # Contexts where emoji parsing is enabled
book: true contexts:
anvil: true chat: true
sign: true book: true
anvil: true
sign: true
# Prevent lag or oversized packet when processing emoji-heavy content
max-emojis-per-parse: 16
image: image:
# Block image tags using minecraft:default font in these interfaces # Block image tags using minecraft:default font in these interfaces
@@ -366,12 +360,6 @@ gui:
brewing: brewing:
title: "<white><shift:-11><image:internal:brewing_recipe>" title: "<white><shift:-11><image:internal:brewing_recipe>"
performance:
# Maximum chain update depth when fixing client visuals
max-note-block-chain-update-limit: 48
# Prevent lag or oversized packet when processing emoji-heavy content
max-emojis-per-parse: 16
light-system: light-system:
# Required for custom light-emitting blocks # Required for custom light-emitting blocks
enable: true enable: true
@@ -420,6 +408,16 @@ chunk-system:
# server's CraftEngine internal data. Enabling this option will synchronize the data when the chunk is loaded. # server's CraftEngine internal data. Enabling this option will synchronize the data when the chunk is loaded.
# (This option only slightly impacts performance, which has been fully optimized, so you don't need to worry too much.) # (This option only slightly impacts performance, which has been fully optimized, so you don't need to worry too much.)
sync-custom-blocks-on-chunk-load: false sync-custom-blocks-on-chunk-load: false
# This system processes any invalid block when a chunk is loaded.
process-invalid-blocks:
enable: false
remove: []
convert: {}
# This system processes any invalid furniture when a chunk is loaded.
process-invalid-furniture:
enable: false
remove: []
convert: {}
# Enables or disables debug mode # Enables or disables debug mode
debug: debug:

View File

@@ -96,10 +96,6 @@ public class Config {
protected Path resource_pack$delivery$file_to_upload; protected Path resource_pack$delivery$file_to_upload;
protected Component resource_pack$send$prompt; protected Component resource_pack$send$prompt;
protected int performance$max_note_block_chain_update_limit;
protected int performance$max_tripwire_chain_update_limit;
protected int performance$max_emojis_per_parse;
protected boolean light_system$force_update_light; protected boolean light_system$force_update_light;
protected boolean light_system$enable; protected boolean light_system$enable;
@@ -110,9 +106,11 @@ public class Config {
protected boolean chunk_system$cache_system; protected boolean chunk_system$cache_system;
protected boolean chunk_system$injection$use_fast_method; protected boolean chunk_system$injection$use_fast_method;
protected boolean chunk_system$injection$target; protected boolean chunk_system$injection$target;
protected boolean chunk_system$process_invalid_furniture$enable;
protected Map<String, String> chunk_system$process_invalid_furniture$mapping;
protected boolean chunk_system$process_invalid_blocks$enable;
protected Map<String, String> chunk_system$process_invalid_blocks$mapping;
protected boolean furniture$handle_invalid_furniture_on_chunk_load$enable;
protected Map<String, String> furniture$handle_invalid_furniture_on_chunk_load$mapping;
protected boolean furniture$hide_base_entity; protected boolean furniture$hide_base_entity;
protected ColliderType furniture$collision_entity_type; protected ColliderType furniture$collision_entity_type;
@@ -161,10 +159,11 @@ public class Config {
protected Key equipment$sacrificed_vanilla_armor$humanoid; protected Key equipment$sacrificed_vanilla_armor$humanoid;
protected Key equipment$sacrificed_vanilla_armor$humanoid_leggings; protected Key equipment$sacrificed_vanilla_armor$humanoid_leggings;
protected boolean emoji$chat; protected boolean emoji$contexts$chat;
protected boolean emoji$book; protected boolean emoji$contexts$book;
protected boolean emoji$anvil; protected boolean emoji$contexts$anvil;
protected boolean emoji$sign; protected boolean emoji$contexts$sign;
protected int emoji$max_emojis_per_parse;
public Config(CraftEngine plugin) { public Config(CraftEngine plugin) {
this.plugin = plugin; this.plugin = plugin;
@@ -310,11 +309,6 @@ public class Config {
resource_pack$duplicated_files_handler = List.of(); resource_pack$duplicated_files_handler = List.of();
} }
// performance
performance$max_note_block_chain_update_limit = config.getInt("performance.max-note-block-chain-update-limit", 64);
performance$max_tripwire_chain_update_limit = config.getInt("performance.max-tripwire-chain-update-limit", 128);
performance$max_emojis_per_parse = config.getInt("performance.max-emojis-per-parse", 32);
// light // light
light_system$force_update_light = config.getBoolean("light-system.force-update-light", false); light_system$force_update_light = config.getBoolean("light-system.force-update-light", false);
light_system$enable = config.getBoolean("light-system.enable", true); light_system$enable = config.getBoolean("light-system.enable", true);
@@ -330,22 +324,37 @@ public class Config {
chunk_system$injection$target = config.getEnum("chunk-system.injection.target", InjectionTarget.class, InjectionTarget.PALETTE) == InjectionTarget.PALETTE; chunk_system$injection$target = config.getEnum("chunk-system.injection.target", InjectionTarget.class, InjectionTarget.PALETTE) == InjectionTarget.PALETTE;
} }
// furniture chunk_system$process_invalid_furniture$enable = config.getBoolean("chunk-system.process-invalid-furniture.enable", false);
furniture$handle_invalid_furniture_on_chunk_load$enable = config.getBoolean("furniture.handle-invalid-furniture-on-chunk-load.enable", false); ImmutableMap.Builder<String, String> furnitureBuilder = ImmutableMap.builder();
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); for (String furniture : config.getStringList("chunk-system.process-invalid-furniture.remove")) {
for (String furniture : config.getStringList("furniture.handle-invalid-furniture-on-chunk-load.remove")) { furnitureBuilder.put(furniture, "");
builder.put(furniture, "");
} }
if (config.contains("furniture.handle-invalid-furniture-on-chunk-load.convert")) { if (config.contains("chunk-system.process-invalid-furniture.convert")) {
Section section = config.getSection("furniture.handle-invalid-furniture-on-chunk-load.convert"); Section section = config.getSection("chunk-system.process-invalid-furniture.convert");
if (section != null) { if (section != null) {
for (Map.Entry<String, Object> entry : section.getStringRouteMappedValues(false).entrySet()) { for (Map.Entry<String, Object> entry : section.getStringRouteMappedValues(false).entrySet()) {
builder.put(entry.getKey(), entry.getValue().toString()); furnitureBuilder.put(entry.getKey(), entry.getValue().toString());
} }
} }
} }
chunk_system$process_invalid_furniture$mapping = furnitureBuilder.build();
furniture$handle_invalid_furniture_on_chunk_load$mapping = builder.build(); chunk_system$process_invalid_blocks$enable = config.getBoolean("chunk-system.process-invalid-blocks.enable", false);
ImmutableMap.Builder<String, String> blockBuilder = ImmutableMap.builder();
for (String furniture : config.getStringList("chunk-system.process-invalid-blocks.remove")) {
blockBuilder.put(furniture, "");
}
if (config.contains("chunk-system.process-invalid-blocks.convert")) {
Section section = config.getSection("chunk-system.process-invalid-blocks.convert");
if (section != null) {
for (Map.Entry<String, Object> entry : section.getStringRouteMappedValues(false).entrySet()) {
blockBuilder.put(entry.getKey(), entry.getValue().toString());
}
}
}
chunk_system$process_invalid_blocks$mapping = blockBuilder.build();
// furniture
furniture$hide_base_entity = config.getBoolean("furniture.hide-base-entity", true); furniture$hide_base_entity = config.getBoolean("furniture.hide-base-entity", true);
furniture$collision_entity_type = ColliderType.valueOf(config.getString("furniture.collision-entity-type", "interaction").toUpperCase(Locale.ENGLISH)); furniture$collision_entity_type = ColliderType.valueOf(config.getString("furniture.collision-entity-type", "interaction").toUpperCase(Locale.ENGLISH));
@@ -405,10 +414,12 @@ public class Config {
image$intercept_packets$advancement = config.getBoolean("image.intercept-packets.advancement", true); image$intercept_packets$advancement = config.getBoolean("image.intercept-packets.advancement", true);
// emoji // emoji
emoji$chat = config.getBoolean("emoji.chat", true); emoji$contexts$chat = config.getBoolean("emoji.contexts.chat", true);
emoji$anvil = config.getBoolean("emoji.anvil", true); emoji$contexts$anvil = config.getBoolean("emoji.contexts.anvil", true);
emoji$book = config.getBoolean("emoji.book", true); emoji$contexts$book = config.getBoolean("emoji.contexts.book", true);
emoji$sign = config.getBoolean("emoji.sign", true); emoji$contexts$sign = config.getBoolean("emoji.contexts.sign", true);
emoji$max_emojis_per_parse = config.getInt("emoji.max-emojis-per-parse", 32);
firstTime = false; firstTime = false;
} }
@@ -464,24 +475,28 @@ public class Config {
} }
public static int maxNoteBlockChainUpdate() { public static int maxNoteBlockChainUpdate() {
return instance.performance$max_note_block_chain_update_limit; return 64;
} }
public static int maxEmojisPerParse() { public static int maxEmojisPerParse() {
return instance.performance$max_emojis_per_parse; return instance.emoji$max_emojis_per_parse;
} }
public static boolean handleInvalidFurniture() { public static boolean handleInvalidFurniture() {
return instance.furniture$handle_invalid_furniture_on_chunk_load$enable; return instance.chunk_system$process_invalid_furniture$enable;
}
public static boolean handleInvalidBlock() {
return instance.chunk_system$process_invalid_blocks$enable;
} }
public static Map<String, String> furnitureMappings() { public static Map<String, String> furnitureMappings() {
return instance.furniture$handle_invalid_furniture_on_chunk_load$mapping; return instance.chunk_system$process_invalid_furniture$mapping;
} }
// public static boolean forceUpdateLight() { public static Map<String, String> blockMappings() {
// return instance.light_system$force_update_light; return instance.chunk_system$process_invalid_blocks$mapping;
// } }
public static boolean enableLightSystem() { public static boolean enableLightSystem() {
return instance.light_system$enable; return instance.light_system$enable;
@@ -772,19 +787,19 @@ public class Config {
} }
public static boolean allowEmojiSign() { public static boolean allowEmojiSign() {
return instance.emoji$sign; return instance.emoji$contexts$sign;
} }
public static boolean allowEmojiChat() { public static boolean allowEmojiChat() {
return instance.emoji$chat; return instance.emoji$contexts$chat;
} }
public static boolean allowEmojiAnvil() { public static boolean allowEmojiAnvil() {
return instance.emoji$anvil; return instance.emoji$contexts$anvil;
} }
public static boolean allowEmojiBook() { public static boolean allowEmojiBook() {
return instance.emoji$book; return instance.emoji$contexts$book;
} }
public static ColliderType colliderType() { public static ColliderType colliderType() {

View File

@@ -4,6 +4,7 @@ import net.momirealms.craftengine.core.block.CustomBlock;
import net.momirealms.craftengine.core.block.EmptyBlock; import net.momirealms.craftengine.core.block.EmptyBlock;
import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.ImmutableBlockState;
import net.momirealms.craftengine.core.block.InactiveCustomBlock; import net.momirealms.craftengine.core.block.InactiveCustomBlock;
import net.momirealms.craftengine.core.plugin.config.Config;
import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.BuiltInRegistries;
import net.momirealms.craftengine.core.registry.Holder; import net.momirealms.craftengine.core.registry.Holder;
import net.momirealms.craftengine.core.registry.WritableRegistry; import net.momirealms.craftengine.core.registry.WritableRegistry;
@@ -58,7 +59,20 @@ public final class DefaultSectionSerializer {
CompoundTag palette = (CompoundTag) tag; CompoundTag palette = (CompoundTag) tag;
String id = palette.getString("id"); String id = palette.getString("id");
CompoundTag data = palette.getCompound("properties"); CompoundTag data = palette.getCompound("properties");
Key key = Key.of(id); Key key;
if (Config.handleInvalidBlock()) {
String converted = Config.blockMappings().get(id);
if (converted == null) {
key = Key.of(id);
} else if (converted.isEmpty()) {
paletteEntries.add(EmptyBlock.STATE);
continue;
} else {
key = Key.of(converted);
}
} else {
key = Key.of(id);
}
Holder<CustomBlock> owner = BuiltInRegistries.BLOCK.get(key).orElseGet(() -> { Holder<CustomBlock> owner = BuiltInRegistries.BLOCK.get(key).orElseGet(() -> {
Holder.Reference<CustomBlock> holder = ((WritableRegistry<CustomBlock>) BuiltInRegistries.BLOCK).registerForHolder( Holder.Reference<CustomBlock> holder = ((WritableRegistry<CustomBlock>) BuiltInRegistries.BLOCK).registerForHolder(
ResourceKey.create(BuiltInRegistries.BLOCK.key().location(), key)); ResourceKey.create(BuiltInRegistries.BLOCK.key().location(), key));

View File

@@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G
# Project settings # Project settings
# Rule: [major update].[feature update].[bug fix] # Rule: [major update].[feature update].[bug fix]
project_version=0.0.62.2 project_version=0.0.62.2
config_version=44 config_version=45
lang_version=24 lang_version=24
project_group=net.momirealms project_group=net.momirealms
latest_supported_version=1.21.8 latest_supported_version=1.21.8