From e697039361ab85dda2c780e7fa537c5dcdb63be5 Mon Sep 17 00:00:00 2001 From: WakelessSloth56 Date: Wed, 28 Sep 2022 01:33:39 +0800 Subject: [PATCH] refactor(next): item --- .../itemgroup/impl/TabVanillaHiddenItems.java | 6 +- .../effect/MobEffectInstanceSerializer.java | 4 +- .../arnicalib/game/entity/PlayerUtils.java | 2 +- .../arnicalib/game/item/ItemPredicates.java | 15 +++ .../arnicalib/game/item/ItemRegistry.java | 37 ++++++ .../game/item/ItemStackSerializer.java | 42 +++++++ .../mcmod/arnicalib/game/item/ItemUtils.java | 43 +++++++ .../mcmod/arnicalib/utils/game/ItemUtils.java | 116 ------------------ 8 files changed, 143 insertions(+), 122 deletions(-) create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemPredicates.java create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemRegistry.java create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemStackSerializer.java create mode 100644 src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemUtils.java delete mode 100644 src/main/java/org/auioc/mcmod/arnicalib/utils/game/ItemUtils.java diff --git a/src/main/java/org/auioc/mcmod/arnicalib/common/itemgroup/impl/TabVanillaHiddenItems.java b/src/main/java/org/auioc/mcmod/arnicalib/common/itemgroup/impl/TabVanillaHiddenItems.java index 9fe9224f..7468a813 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/common/itemgroup/impl/TabVanillaHiddenItems.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/common/itemgroup/impl/TabVanillaHiddenItems.java @@ -1,6 +1,6 @@ package org.auioc.mcmod.arnicalib.common.itemgroup.impl; -import org.auioc.mcmod.arnicalib.utils.game.ItemUtils; +import org.auioc.mcmod.arnicalib.game.item.ItemPredicates; import org.auioc.mcmod.arnicalib.utils.game.VanillaPredicates; import net.minecraft.core.NonNullList; import net.minecraft.world.item.CreativeModeTab; @@ -23,8 +23,8 @@ public ItemStack makeIcon() { public void fillItemList(NonNullList list) { ForgeRegistries.ITEMS.getValues() .stream() - .filter(ItemUtils.IS_AIR.negate()) - .filter(ItemUtils.IS_CATEGORIZED.negate()) + .filter(ItemPredicates.IS_AIR.negate()) + .filter(ItemPredicates.IS_CATEGORIZED.negate()) .filter(VanillaPredicates.REGISTRY_ENTRY) .map(ItemStack::new) .forEach(list::add); diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/effect/MobEffectInstanceSerializer.java b/src/main/java/org/auioc/mcmod/arnicalib/game/effect/MobEffectInstanceSerializer.java index ef69adf9..cd6b98c4 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/effect/MobEffectInstanceSerializer.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/effect/MobEffectInstanceSerializer.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; import org.auioc.mcmod.arnicalib.base.validate.Validate; -import org.auioc.mcmod.arnicalib.utils.game.ItemUtils; +import org.auioc.mcmod.arnicalib.game.item.ItemRegistry; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; @@ -43,7 +43,7 @@ public static MobEffectInstance fromJson(JsonObject json) { List curativeItems = new ArrayList(); for (var element : curativeItemsJson) { var curativeItemId = GsonHelper.convertToString(element, "curative_item"); - curativeItems.add(new ItemStack(ItemUtils.getItemOrElseThrow(curativeItemId))); + curativeItems.add(new ItemStack(ItemRegistry.getOrElseThrow(curativeItemId))); } instance.setCurativeItems(curativeItems); } diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/entity/PlayerUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/entity/PlayerUtils.java index c777d504..e8f02478 100644 --- a/src/main/java/org/auioc/mcmod/arnicalib/game/entity/PlayerUtils.java +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/entity/PlayerUtils.java @@ -1,7 +1,7 @@ package org.auioc.mcmod.arnicalib.game.entity; import javax.annotation.Nullable; -import org.auioc.mcmod.arnicalib.utils.game.ItemUtils; +import org.auioc.mcmod.arnicalib.game.item.ItemUtils; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemPredicates.java b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemPredicates.java new file mode 100644 index 00000000..951bc220 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemPredicates.java @@ -0,0 +1,15 @@ +package org.auioc.mcmod.arnicalib.game.item; + +import java.util.function.Predicate; +import org.auioc.mcmod.arnicalib.utils.game.VanillaPredicates; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; + +public class ItemPredicates { + + public static final Predicate IS_VANILLA_ITEM = (itemStack) -> VanillaPredicates.REGISTRY_ENTRY.test(itemStack.getItem()); + public static final Predicate IS_AIR = (item) -> item == Items.AIR; + public static final Predicate IS_CATEGORIZED = (item) -> item.getItemCategory() != null; + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemRegistry.java b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemRegistry.java new file mode 100644 index 00000000..3e3ad10e --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemRegistry.java @@ -0,0 +1,37 @@ +package org.auioc.mcmod.arnicalib.game.item; + +import java.util.List; +import java.util.Optional; +import javax.annotation.Nonnull; +import org.auioc.mcmod.arnicalib.game.registry.RegistryEntryException; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; +import net.minecraftforge.registries.ForgeRegistries; + +public class ItemRegistry { + + @Nonnull + public static Optional get(ResourceLocation id) { + return Optional.ofNullable(ForgeRegistries.ITEMS.containsKey(id) ? ForgeRegistries.ITEMS.getValue(id) : null); + } + + @Nonnull + public static Optional get(String id) { + return get(new ResourceLocation(id)); + } + + @Nonnull + public static Item getOrElseThrow(ResourceLocation id) { + return get(id).orElseThrow(RegistryEntryException.UNKNOWN_ITEM.create(id.toString())); + } + + @Nonnull + public static Item getOrElseThrow(String id) { + return get(id).orElseThrow(RegistryEntryException.UNKNOWN_ITEM.create(id.toString())); + } + + public static List getItems(List idList) { + return idList.stream().map(ItemRegistry::getOrElseThrow).toList(); + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemStackSerializer.java b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemStackSerializer.java new file mode 100644 index 00000000..f2e3234e --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemStackSerializer.java @@ -0,0 +1,42 @@ +package org.auioc.mcmod.arnicalib.game.item; + +import org.auioc.mcmod.arnicalib.base.validate.Validate; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.TagParser; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.item.ItemStack; + +public class ItemStackSerializer { + + public static ItemStack fromJson(JsonObject json) { + var item = ItemRegistry.getOrElseThrow(GsonHelper.getAsString(json, "id")); + + int count = GsonHelper.getAsInt(json, "count", 1); + try { + Validate.isPositive(count, "The item count must be positive: " + count); + int maxStackSize = ItemUtils.getMaxStackSize(item); + Validate.isTrue( + count <= maxStackSize, + "The specified count " + count + " is too large, the max stack size of item '" + ItemUtils.toString(item) + "' is " + maxStackSize + ); + } catch (IllegalArgumentException e) { + throw new JsonSyntaxException(e); + } + + CompoundTag nbt = null; + var snbt = GsonHelper.getAsString(json, "nbt", null); + if (snbt != null) { + try { + nbt = TagParser.parseTag(snbt); + } catch (CommandSyntaxException e) { + throw new JsonSyntaxException("Invalid NBT: " + e.getMessage()); + } + } + + return ItemUtils.createItemStack(item, count, nbt); + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemUtils.java new file mode 100644 index 00000000..d884e4e4 --- /dev/null +++ b/src/main/java/org/auioc/mcmod/arnicalib/game/item/ItemUtils.java @@ -0,0 +1,43 @@ +package org.auioc.mcmod.arnicalib.game.item; + +import javax.annotation.Nullable; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public class ItemUtils { + + @SuppressWarnings("deprecation") + public static int getMaxStackSize(Item item) { + return item.getMaxStackSize(); + } + + @SuppressWarnings("deprecation") + public static int getMaxDamage(Item item) { + return item.getMaxDamage(); + } + + public static ItemStack createItemStack(Item item, int count, @Nullable CompoundTag nbt) { + ItemStack itemStack = new ItemStack(item, count); + if (nbt != null) { + itemStack.setTag(nbt); + } + return itemStack; + } + + public static void hurt(Player player, ItemStack itemStack) { + itemStack.hurtAndBreak(1, player, (p) -> { + p.broadcastBreakEvent(player.getUsedItemHand()); + }); + } + + public static String toString(ItemStack itemStack) { + return String.format("%s%s * %d", toString(itemStack), (itemStack.hasTag()) ? itemStack.getTag() : "{}", itemStack.getCount()); + } + + public static String toString(Item item) { + return item.getRegistryName().toString(); + } + +} diff --git a/src/main/java/org/auioc/mcmod/arnicalib/utils/game/ItemUtils.java b/src/main/java/org/auioc/mcmod/arnicalib/utils/game/ItemUtils.java deleted file mode 100644 index af997724..00000000 --- a/src/main/java/org/auioc/mcmod/arnicalib/utils/game/ItemUtils.java +++ /dev/null @@ -1,116 +0,0 @@ -package org.auioc.mcmod.arnicalib.utils.game; - -import java.util.List; -import java.util.Optional; -import java.util.function.Predicate; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.auioc.mcmod.arnicalib.base.validate.Validate; -import org.auioc.mcmod.arnicalib.game.registry.RegistryEntryException; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.TagParser; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.GsonHelper; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraftforge.registries.ForgeRegistries; - -public interface ItemUtils { - - @Nonnull - static Optional getItem(ResourceLocation id) { - return Optional.ofNullable(ForgeRegistries.ITEMS.containsKey(id) ? ForgeRegistries.ITEMS.getValue(id) : null); - } - - @Nonnull - static Optional getItem(String id) { - return getItem(new ResourceLocation(id)); - } - - @Nonnull - static Item getItemOrElseThrow(ResourceLocation id) { - return getItem(id).orElseThrow(RegistryEntryException.UNKNOWN_ITEM.create(id.toString())); - } - - @Nonnull - static Item getItemOrElseThrow(String id) { - return getItem(id).orElseThrow(RegistryEntryException.UNKNOWN_ITEM.create(id.toString())); - } - - static List getItems(List idList) { - return idList.stream().map(ItemUtils::getItemOrElseThrow).toList(); - } - - static String getRegistryName(Item item) { - return item.getRegistryName().toString(); - } - - static String getRegistryName(ItemStack itemStack) { - return getRegistryName(itemStack.getItem()); - } - - Predicate IS_VANILLA_ITEM = (itemStack) -> VanillaPredicates.REGISTRY_ENTRY.test(itemStack.getItem()); - Predicate IS_AIR = (item) -> item == Items.AIR; - Predicate IS_CATEGORIZED = (item) -> item.getItemCategory() != null; - - @SuppressWarnings("deprecation") - static int getMaxStackSize(Item item) { - return item.getMaxStackSize(); - } - - @SuppressWarnings("deprecation") - static int getMaxDamage(Item item) { - return item.getMaxDamage(); - } - - - static String toString(ItemStack itemStack) { - return String.format("%s%s * %d", getRegistryName(itemStack), (itemStack.hasTag()) ? itemStack.getTag() : "{}", itemStack.getCount()); - } - - - static void damageItem(Player player, ItemStack itemStack) { - itemStack.hurtAndBreak(1, player, (p) -> { - p.broadcastBreakEvent(player.getUsedItemHand()); - }); - } - - - static ItemStack createItemStack(Item item, int count, @Nullable CompoundTag nbt) { - ItemStack itemStack = new ItemStack(item, count); - if (nbt != null) { - itemStack.setTag(nbt); - } - return itemStack; - } - - static ItemStack deserializeFromJson(JsonObject json) { - var item = getItemOrElseThrow(GsonHelper.getAsString(json, "id")); - - int count = GsonHelper.getAsInt(json, "count", 1); - try { - Validate.isPositive(count, "The item count must be positive: " + count); - Validate.isTrue(count <= getMaxStackSize(item), "The specified count " + count + " is too large, the max stack size of item '" + getRegistryName(item) + "' is " + getMaxStackSize(item)); - } catch (IllegalArgumentException e) { - throw new JsonSyntaxException(e); - } - - CompoundTag nbt = null; - var snbt = GsonHelper.getAsString(json, "nbt", null); - if (snbt != null) { - try { - nbt = TagParser.parseTag(snbt); - } catch (CommandSyntaxException e) { - throw new JsonSyntaxException("Invalid NBT: " + e.getMessage()); - } - } - - return createItemStack(item, count, nbt); - } - -}