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:
@@ -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");
|
||||
|
||||
@@ -17,4 +17,8 @@ public class BlockRegistryMirror {
|
||||
public static int size() {
|
||||
return customBlockStates.length;
|
||||
}
|
||||
|
||||
public static BlockStateWrapper stoneState() {
|
||||
return stoneState;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package net.momirealms.craftengine.core.block;
|
||||
|
||||
public interface NoteBlockIndicator {
|
||||
public interface ChainUpdateBlockIndicator {
|
||||
|
||||
boolean isNoteBlock();
|
||||
|
||||
boolean isTripwire();
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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) -> {
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item;
|
||||
package net.momirealms.craftengine.core.item.setting;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item;
|
||||
package net.momirealms.craftengine.core.item.setting;
|
||||
|
||||
import net.momirealms.craftengine.core.sound.SoundData;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user