diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 243afe7d1..75f1b3521 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -54,7 +54,6 @@ import org.jetbrains.annotations.Nullable; import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.Yaml; -import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java index 2926a4f98..991cd262a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java @@ -17,7 +17,6 @@ import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask; import net.momirealms.craftengine.core.util.VersionHelper; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; @@ -26,7 +25,6 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityPortalEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.world.EntitiesLoadEvent; import org.bukkit.inventory.ItemStack; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java index 4208adf7e..91aea6bfa 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugMigrateTemplatesCommand.java @@ -8,8 +8,6 @@ import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import net.momirealms.craftengine.core.util.FileUtils; import org.bukkit.command.CommandSender; import org.incendo.cloud.Command; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; import java.io.IOException; import java.nio.file.Files; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/handler/ProjectilePacketHandler.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/handler/ProjectilePacketHandler.java index 32e45409f..23e95d709 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/handler/ProjectilePacketHandler.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/handler/ProjectilePacketHandler.java @@ -1,13 +1,11 @@ package net.momirealms.craftengine.bukkit.plugin.network.handler; -import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.entity.data.ItemDisplayEntityData; import net.momirealms.craftengine.bukkit.entity.projectile.BukkitCustomProjectile; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.injector.ProtectedFieldVisitor; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MEntityTypes; -import net.momirealms.craftengine.core.entity.projectile.CustomProjectile; import net.momirealms.craftengine.core.entity.projectile.ProjectileMeta; import net.momirealms.craftengine.core.item.CustomItem; import net.momirealms.craftengine.core.item.Item; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java index 50ebb7d31..30f83d2d3 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItemManager.java @@ -46,10 +46,10 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl protected final Map> customItems = new HashMap<>(); protected final Map>> customItemTags; protected final Map> cmdConflictChecker; - protected final Map modernItemModels1_21_4; + protected final Map modernItemModels1_21_4; protected final Map> modernItemModels1_21_2; protected final Map> legacyOverrides; - protected final Map> modernOverrides; + protected final Map> modernOverrides; protected final Set equipmentsToGenerate; // Cached command suggestions protected final List cachedSuggestions = new ArrayList<>(); @@ -225,7 +225,7 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl } @Override - public Map modernItemModels1_21_4() { + public Map modernItemModels1_21_4() { return Collections.unmodifiableMap(this.modernItemModels1_21_4); } @@ -245,7 +245,7 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl } @Override - public Map> modernItemOverrides() { + public Map> modernItemOverrides() { return Collections.unmodifiableMap(this.modernOverrides); } @@ -411,8 +411,12 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl conflict.put(customModelData, id); // Parse models if (isModernFormatRequired() && modernModel != null) { - TreeMap map = AbstractItemManager.this.modernOverrides.computeIfAbsent(clientBoundMaterial, k -> new TreeMap<>()); - map.put(customModelData, modernModel); + TreeMap map = AbstractItemManager.this.modernOverrides.computeIfAbsent(clientBoundMaterial, k -> new TreeMap<>()); + map.put(customModelData, new ModernItemModel( + modernModel, + (boolean) section.getOrDefault("oversized-in-gui", true), + (boolean) section.getOrDefault("hand-animation-on-swap", true) + )); } if (needsLegacyCompatibility() && legacyOverridesModels != null && !legacyOverridesModels.isEmpty()) { TreeSet lom = AbstractItemManager.this.legacyOverrides.computeIfAbsent(clientBoundMaterial, k -> new TreeSet<>()); @@ -423,7 +427,11 @@ public abstract class AbstractItemManager extends AbstractModelGenerator impl // use item model if (itemModelKey != null) { if (isModernFormatRequired() && modernModel != null) { - AbstractItemManager.this.modernItemModels1_21_4.put(itemModelKey, modernModel); + AbstractItemManager.this.modernItemModels1_21_4.put(itemModelKey, new ModernItemModel( + modernModel, + (boolean) section.getOrDefault("oversized-in-gui", true), + (boolean) section.getOrDefault("hand-animation-on-swap", true) + )); } if (Config.packMaxVersion() >= VERSION_1_21_2 && needsLegacyCompatibility() && legacyOverridesModels != null && !legacyOverridesModels.isEmpty()) { TreeSet lom = AbstractItemManager.this.modernItemModels1_21_2.computeIfAbsent(itemModelKey, k -> new TreeSet<>()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java index 4aaf4e6df..74803b54c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java @@ -6,6 +6,7 @@ import net.momirealms.craftengine.core.item.modifier.ItemDataModifier; import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration; import net.momirealms.craftengine.core.pack.model.ItemModel; import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel; +import net.momirealms.craftengine.core.pack.model.ModernItemModel; import net.momirealms.craftengine.core.pack.model.generation.ModelGenerator; import net.momirealms.craftengine.core.plugin.Manageable; import net.momirealms.craftengine.core.plugin.config.ConfigParser; @@ -25,11 +26,11 @@ public interface ItemManager extends Manageable, ModelGenerator { Map> legacyItemOverrides(); - Map> modernItemOverrides(); + Map> modernItemOverrides(); Collection equipmentsToGenerate(); - Map modernItemModels1_21_4(); + Map modernItemModels1_21_4(); Map> modernItemModels1_21_2(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index e03292536..7873555eb 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -19,6 +19,7 @@ import net.momirealms.craftengine.core.pack.host.impl.NoneHost; import net.momirealms.craftengine.core.pack.misc.EquipmentGeneration; import net.momirealms.craftengine.core.pack.model.ItemModel; import net.momirealms.craftengine.core.pack.model.LegacyOverridesModel; +import net.momirealms.craftengine.core.pack.model.ModernItemModel; import net.momirealms.craftengine.core.pack.model.generation.ModelGeneration; import net.momirealms.craftengine.core.pack.model.generation.ModelGenerator; import net.momirealms.craftengine.core.pack.obfuscation.ObfA; @@ -1299,7 +1300,7 @@ public abstract class AbstractPackManager implements PackManager { private void generateModernItemModels1_21_4(Path generatedPackPath) { if (Config.packMaxVersion() < 21.39f) return; - for (Map.Entry entry : this.plugin.itemManager().modernItemModels1_21_4().entrySet()) { + for (Map.Entry entry : this.plugin.itemManager().modernItemModels1_21_4().entrySet()) { Key key = entry.getKey(); Path itemPath = generatedPackPath .resolve("assets") @@ -1322,7 +1323,14 @@ public abstract class AbstractPackManager implements PackManager { continue; } JsonObject model = new JsonObject(); - model.add("model", entry.getValue().get()); + ModernItemModel modernItemModel = entry.getValue(); + model.add("model", modernItemModel.itemModel().get()); + if (!modernItemModel.handAnimationOnSwap()) { + model.addProperty("hand_animation_on_swap", false); + } + if (modernItemModel.oversizedInGui()) { + model.addProperty("oversized_in_gui", true); + } try (BufferedWriter writer = Files.newBufferedWriter(itemPath)) { GsonHelper.get().toJson(model, writer); } catch (IOException e) { @@ -1333,7 +1341,7 @@ public abstract class AbstractPackManager implements PackManager { private void generateModernItemOverrides(Path generatedPackPath) { if (Config.packMaxVersion() < 21.39f) return; - for (Map.Entry> entry : this.plugin.itemManager().modernItemOverrides().entrySet()) { + for (Map.Entry> entry : this.plugin.itemManager().modernItemOverrides().entrySet()) { Key vanillaItemModel = entry.getKey(); Path overridedItemPath = generatedPackPath .resolve("assets") @@ -1365,22 +1373,29 @@ public abstract class AbstractPackManager implements PackManager { newJson.add("model", model); model.addProperty("type", "minecraft:range_dispatch"); model.addProperty("property", "minecraft:custom_model_data"); + // 将原有的json读成fallback + model.add("fallback", fallbackModel); + JsonArray entries = new JsonArray(); + model.add("entries", entries); + for (Map.Entry modelWithDataEntry : entry.getValue().entrySet()) { + JsonObject entryObject = new JsonObject(); + ModernItemModel modernItemModel = modelWithDataEntry.getValue(); + entryObject.addProperty("threshold", modelWithDataEntry.getKey()); + entryObject.add("model", modernItemModel.itemModel().get()); + entries.add(entryObject); + if (modernItemModel.handAnimationOnSwap()) { + handAnimationOnSwap = true; + } + if (modernItemModel.oversizedInGui()) { + oversizedInGui = true; + } + } if (!handAnimationOnSwap) { newJson.addProperty("hand_animation_on_swap", false); } if (oversizedInGui) { newJson.addProperty("oversized_in_gui", true); } - // 将原有的json读成fallback - model.add("fallback", fallbackModel); - JsonArray entries = new JsonArray(); - model.add("entries", entries); - for (Map.Entry modelWithDataEntry : entry.getValue().entrySet()) { - JsonObject entryObject = new JsonObject(); - entryObject.addProperty("threshold", modelWithDataEntry.getKey()); - entryObject.add("model", modelWithDataEntry.getValue().get()); - entries.add(entryObject); - } try { Files.createDirectories(overridedItemPath.getParent()); } catch (IOException e) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/ModernItemModel.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/ModernItemModel.java new file mode 100644 index 000000000..17225c4ec --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/ModernItemModel.java @@ -0,0 +1,25 @@ +package net.momirealms.craftengine.core.pack.model; + +public class ModernItemModel { + private final ItemModel itemModel; + private final boolean oversizedInGui; + private final boolean handAnimationOnSwap; + + public ModernItemModel(ItemModel itemModel, boolean handAnimationOnSwap, boolean oversizedInGui) { + this.handAnimationOnSwap = handAnimationOnSwap; + this.itemModel = itemModel; + this.oversizedInGui = oversizedInGui; + } + + public boolean handAnimationOnSwap() { + return handAnimationOnSwap; + } + + public ItemModel itemModel() { + return itemModel; + } + + public boolean oversizedInGui() { + return oversizedInGui; + } +}