9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-29 11:59:11 +00:00

Merge remote-tracking branch 'upstream/dev' into dev

# Conflicts:
#	bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/reflection/minecraft/NetworkReflections.java
This commit is contained in:
jhqwqmc
2025-06-08 13:55:15 +08:00
43 changed files with 361 additions and 200 deletions

View File

@@ -4,6 +4,7 @@ import net.momirealms.craftengine.core.util.Key;
public class BlockKeys {
public static final Key NOTE_BLOCK = Key.of("minecraft:note_block");
public static final Key TRIPWIRE = Key.of("minecraft:tripwire");
public static final Key CRAFTING_TABLE = Key.of("minecraft:crafting_table");
public static final Key STONECUTTER = Key.of("minecraft:stonecutter");
public static final Key BELL = Key.of("minecraft:bell");

View File

@@ -17,4 +17,8 @@ public class BlockRegistryMirror {
public static int size() {
return customBlockStates.length;
}
public static BlockStateWrapper stoneState() {
return stoneState;
}
}

View File

@@ -1,6 +1,8 @@
package net.momirealms.craftengine.core.block;
public interface NoteBlockIndicator {
public interface ChainUpdateBlockIndicator {
boolean isNoteBlock();
boolean isTripwire();
}

View File

@@ -3,6 +3,7 @@ package net.momirealms.craftengine.core.item;
import com.google.gson.JsonElement;
import net.kyori.adventure.text.Component;
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.sparrow.nbt.Tag;

View File

@@ -3,6 +3,7 @@ package net.momirealms.craftengine.core.item;
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
import net.momirealms.craftengine.core.item.behavior.ItemBehaviors;
import net.momirealms.craftengine.core.item.modifier.*;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.pack.LoadingSequence;
import net.momirealms.craftengine.core.pack.Pack;
import net.momirealms.craftengine.core.pack.ResourceLocation;
@@ -491,6 +492,12 @@ public abstract class AbstractItemManager<I> extends AbstractModelGenerator impl
List<String> data = MiscUtils.getAsStringList(obj);
return new RemoveComponentModifier<>(data);
}, "remove-components", "remove-component");
registerDataFunction((obj) -> {
Map<String, Object> data = MiscUtils.castToMap(obj, false);
int nutrition = ResourceConfigUtils.getAsInt(data.get("nutrition"), "nutrition");
float saturation = ResourceConfigUtils.getAsFloat(data.get("saturation"), "saturation");
return new FoodModifier<>(nutrition, saturation, (boolean) data.getOrDefault("can-always-eat", false));
}, "food");
}
if (VersionHelper.isOrAbove1_21()) {
registerDataFunction((obj) -> {

View File

@@ -26,4 +26,5 @@ public final class ComponentKeys {
public static final Key PROFILE = Key.of("minecraft", "profile");
public static final Key DYED_COLOR = Key.of("minecraft", "dyed_color");
public static final Key DEATH_PROTECTION = Key.of("minecraft", "death_protection");
public static final Key FOOD = Key.of("minecraft", "food");
}

View File

@@ -3,6 +3,7 @@ package net.momirealms.craftengine.core.item;
import com.google.gson.JsonElement;
import net.kyori.adventure.text.Component;
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.util.Key;
import net.momirealms.sparrow.nbt.Tag;

View File

@@ -2,6 +2,7 @@ package net.momirealms.craftengine.core.item;
import com.google.gson.JsonElement;
import net.kyori.adventure.text.Component;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.util.AdventureHelper;
import net.momirealms.craftengine.core.util.Key;

View File

@@ -3,7 +3,12 @@ package net.momirealms.craftengine.core.item;
import net.momirealms.craftengine.core.entity.ItemDisplayContext;
import net.momirealms.craftengine.core.entity.projectile.ProjectileMeta;
import net.momirealms.craftengine.core.item.modifier.EquippableModifier;
import net.momirealms.craftengine.core.item.modifier.FoodModifier;
import net.momirealms.craftengine.core.item.modifier.ItemDataModifier;
import net.momirealms.craftengine.core.item.setting.AnvilRepairItem;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.item.setting.FoodData;
import net.momirealms.craftengine.core.item.setting.Helmet;
import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration;
import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException;
import net.momirealms.craftengine.core.sound.SoundData;
@@ -30,13 +35,18 @@ public class ItemSettings {
ProjectileMeta projectileMeta;
boolean dyeable = true;
Helmet helmet = null;
FoodData foodData = null;
private ItemSettings() {}
public <I> List<ItemDataModifier<I>> modifiers() {
ArrayList<ItemDataModifier<I>> modifiers = new ArrayList<>();
if (VersionHelper.isOrAbove1_21_2() && this.equipment != null && this.equipment.modernData() != null) modifiers.add(new EquippableModifier<>(this.equipment.modernData()));
// TODO 1.20 leather armor
if (VersionHelper.isOrAbove1_21_2() && this.equipment != null && this.equipment.modernData() != null) {
modifiers.add(new EquippableModifier<>(this.equipment.modernData()));
}
if (VersionHelper.isOrAbove1_20_5() && this.foodData != null) {
modifiers.add(new FoodModifier<>(this.foodData.nutrition(), this.foodData.saturation(), false));
}
return modifiers;
}
@@ -60,6 +70,8 @@ public class ItemSettings {
newSettings.canPlaceRelatedVanillaBlock = settings.canPlaceRelatedVanillaBlock;
newSettings.projectileMeta = settings.projectileMeta;
newSettings.dyeable = settings.dyeable;
newSettings.helmet = settings.helmet;
newSettings.foodData = settings.foodData;
return newSettings;
}
@@ -107,6 +119,11 @@ public class ItemSettings {
return anvilRepairItems;
}
@Nullable
public FoodData foodData() {
return foodData;
}
@Nullable
public Helmet helmet() {
return helmet;
@@ -152,6 +169,11 @@ public class ItemSettings {
return this;
}
public ItemSettings foodData(FoodData foodData) {
this.foodData = foodData;
return this;
}
public ItemSettings equipment(EquipmentGeneration equipment) {
this.equipment = equipment;
return this;
@@ -249,6 +271,14 @@ public class ItemSettings {
boolean bool = (boolean) value;
return settings -> settings.dyeable(bool);
}));
registerFactory("food", (value -> {
Map<String, Object> args = MiscUtils.castToMap(value, false);
FoodData data = new FoodData(
ResourceConfigUtils.getAsInt(args.get("nutrition"), "nutrition"),
ResourceConfigUtils.getAsFloat(args.get("saturation"), "saturation")
);
return settings -> settings.foodData(data);
}));
}
private static void registerFactory(String id, ItemSettings.Modifier.Factory factory) {

View File

@@ -1,8 +1,8 @@
package net.momirealms.craftengine.core.item.modifier;
import net.momirealms.craftengine.core.item.EquipmentData;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
public class EquippableModifier<I> implements ItemDataModifier<I> {
private final EquipmentData data;

View File

@@ -0,0 +1,46 @@
package net.momirealms.craftengine.core.item.modifier;
import net.momirealms.craftengine.core.item.ComponentKeys;
import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.item.ItemBuildContext;
import net.momirealms.craftengine.core.item.NetworkItemHandler;
import net.momirealms.sparrow.nbt.CompoundTag;
import net.momirealms.sparrow.nbt.Tag;
import java.util.Map;
public class FoodModifier<I> implements ItemDataModifier<I> {
private final int nutrition;
private final float saturation;
private final boolean canAlwaysEat;
public FoodModifier(int nutrition, float saturation, boolean canAlwaysEat) {
this.canAlwaysEat = canAlwaysEat;
this.nutrition = nutrition;
this.saturation = saturation;
}
@Override
public String name() {
return "food";
}
@Override
public void apply(Item<I> item, ItemBuildContext context) {
item.setJavaComponent(ComponentKeys.FOOD, Map.of(
"nutrition", this.nutrition,
"saturation", this.saturation,
"can_always_eat", this.canAlwaysEat
));
}
@Override
public void prepareNetworkItem(Item<I> item, ItemBuildContext context, CompoundTag networkData) {
Tag previous = item.getNBTComponent(ComponentKeys.FOOD);
if (previous != null) {
networkData.put(ComponentKeys.FOOD.asString(), NetworkItemHandler.pack(NetworkItemHandler.Operation.ADD, previous));
} else {
networkData.put(ComponentKeys.FOOD.asString(), NetworkItemHandler.pack(NetworkItemHandler.Operation.REMOVE));
}
}
}

View File

@@ -27,7 +27,7 @@ public abstract class AbstractRecipeManager<T> implements RecipeManager<T> {
protected final Map<Key, List<Recipe<T>>> byIngredient = new HashMap<>();
protected final Set<Key> dataPackRecipes = new HashSet<>();
protected final Set<Key> customRecipes = new HashSet<>();
private final RecipeParser recipeParser;
protected final RecipeParser recipeParser;
protected boolean isReloading;
public AbstractRecipeManager() {

View File

@@ -1,4 +1,4 @@
package net.momirealms.craftengine.core.item;
package net.momirealms.craftengine.core.item.setting;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package net.momirealms.craftengine.core.item;
package net.momirealms.craftengine.core.item.setting;
import net.momirealms.craftengine.core.entity.EquipmentSlot;
import net.momirealms.craftengine.core.util.Key;

View File

@@ -0,0 +1,19 @@
package net.momirealms.craftengine.core.item.setting;
public class FoodData {
private final int nutrition;
private final float saturation;
public FoodData(int nutrition, float saturation) {
this.nutrition = nutrition;
this.saturation = saturation;
}
public int nutrition() {
return nutrition;
}
public float saturation() {
return saturation;
}
}

View File

@@ -1,4 +1,4 @@
package net.momirealms.craftengine.core.item;
package net.momirealms.craftengine.core.item.setting;
import net.momirealms.craftengine.core.sound.SoundData;

View File

@@ -8,7 +8,7 @@ import dev.dejvokep.boostedyaml.block.implementation.Section;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import net.momirealms.craftengine.core.font.BitmapImage;
import net.momirealms.craftengine.core.font.Font;
import net.momirealms.craftengine.core.item.EquipmentData;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import net.momirealms.craftengine.core.pack.conflict.PathContext;
import net.momirealms.craftengine.core.pack.conflict.resolution.ResolutionConditional;
import net.momirealms.craftengine.core.pack.host.ResourcePackHost;

View File

@@ -2,7 +2,7 @@ package net.momirealms.craftengine.core.pack.misc;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import net.momirealms.craftengine.core.item.EquipmentData;
import net.momirealms.craftengine.core.item.setting.EquipmentData;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;

View File

@@ -87,7 +87,8 @@ public class Config {
protected Path resource_pack$delivery$file_to_upload;
protected Component resource_pack$send$prompt;
protected int performance$max_block_chain_update_limit;
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;
@@ -276,7 +277,8 @@ public class Config {
item$non_italic_tag = config.getBoolean("item.non-italic-tag", false);
// performance
performance$max_block_chain_update_limit = config.getInt("performance.max-block-chain-update-limit", 64);
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
@@ -391,8 +393,8 @@ public class Config {
return instance.resource_pack$override_uniform_font;
}
public static int maxChainUpdate() {
return instance.performance$max_block_chain_update_limit;
public static int maxNoteBlockChainUpdate() {
return instance.performance$max_note_block_chain_update_limit;
}
public static int maxEmojisPerParse() {