diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java index ae7d984611e..3cc568351df 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/ChemicalHelper.java @@ -193,7 +193,7 @@ public static MaterialEntry getMaterialEntry(ItemLike itemLike) { MaterialEntry materialEntry1 = getMaterialEntry(itemTag); // check that it's not the empty marker and that it's not a parent tag if (!materialEntry1.isEmpty() && - Arrays.stream(materialEntry1.tagPrefix().getItemParentTags()).noneMatch(itemTag::equals)) { + materialEntry1.tagPrefix().getItemParentTags().stream().noneMatch(itemTag::equals)) { return materialEntry1; } } @@ -210,7 +210,7 @@ public static MaterialEntry getMaterialEntry(TagKey tag) { Set> allItemTags = BuiltInRegistries.ITEM.getTagNames().collect(Collectors.toSet()); for (TagPrefix prefix : TagPrefix.values()) { for (Material material : GTCEuAPI.materialManager.getRegisteredMaterials()) { - Arrays.stream(prefix.getItemTags(material)) + prefix.getItemTags(material).stream() .filter(allItemTags::contains) .forEach(tagKey -> { // remove the tag so that the next iteration is faster. @@ -291,19 +291,19 @@ public static Block getBlock(TagPrefix orePrefix, Material material) { @Nullable public static TagKey getBlockTag(TagPrefix orePrefix, @NotNull Material material) { var tags = orePrefix.getBlockTags(material); - if (tags.length > 0) { - return tags[0]; + if (tags.isEmpty()) { + return null; } - return null; + return tags.get(0); } @Nullable public static TagKey getTag(TagPrefix orePrefix, @NotNull Material material) { var tags = orePrefix.getItemTags(material); - if (tags.length > 0) { - return tags[0]; + if (tags.isEmpty()) { + return null; } - return null; + return tags.get(0); } public static List> getAllItemInfos() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/ItemMaterialData.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/ItemMaterialData.java index 342641859da..158d73a200c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/ItemMaterialData.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/ItemMaterialData.java @@ -163,7 +163,7 @@ public static void reinitializeMaterialData() { // Load new data TagsHandler.initExtraUnificationEntries(); for (TagPrefix prefix : TagPrefix.values()) { - prefix.getIgnored().forEach((mat, items) -> registerMaterialEntries(Arrays.asList(items), prefix, mat)); + prefix.getIgnored().forEach((mat, items) -> registerMaterialEntries(items, prefix, mat)); } GTMaterialItems.toUnify .forEach((materialEntry, supplier) -> registerMaterialEntry(supplier, materialEntry)); diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/stack/MaterialEntry.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/stack/MaterialEntry.java index 9f909b4784a..fcfe13fa40b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/stack/MaterialEntry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/stack/MaterialEntry.java @@ -40,10 +40,10 @@ public String toString() { return material.getResourceLocation().toString(); } var tags = tagPrefix.getItemTags(material); - if (tags.length == 0) { + if (tags.isEmpty()) { return tagPrefix.name + "/" + material.getName(); } - return tags[0].location().toString(); + return tags.get(0).location().toString(); } public static @Nullable MaterialEntry of(Object o) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java index 777131be6e6..eab84067316 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java @@ -57,6 +57,7 @@ import lombok.experimental.Accessors; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; import java.util.function.*; @@ -1034,7 +1035,7 @@ public record BlockProperties(Supplier> renderType, @Setter private BiConsumer> tooltip; - private final Map[]> ignoredMaterials = new HashMap<>(); + private final Map>> ignoredMaterials = new HashMap<>(); private final Object2FloatMap materialAmounts = new Object2FloatOpenHashMap<>(); @Getter @@ -1173,43 +1174,51 @@ public static TagPrefix getPrefix(String prefixName, @Nullable TagPrefix replace return PREFIXES.getOrDefault(prefixName, replacement); } - @SuppressWarnings("unchecked") - public TagKey[] getItemParentTags() { - return tags.stream().filter(TagType::isParentTag).map(type -> type.getTag(this, GTMaterials.NULL)) - .toArray(TagKey[]::new); + public @Unmodifiable List> getItemParentTags() { + return tags.stream() + .filter(TagType::isParentTag) + .map(type -> type.getTag(this, GTMaterials.NULL)) + .filter(Objects::nonNull) + .toList(); } - @SuppressWarnings("unchecked") - public TagKey[] getItemTags(@NotNull Material mat) { - return tags.stream().filter(type -> !type.isParentTag()).map(type -> type.getTag(this, mat)) + public @Unmodifiable List> getItemTags(@NotNull Material mat) { + return tags.stream() + .filter(type -> !type.isParentTag()) + .map(type -> type.getTag(this, mat)) .filter(Objects::nonNull) - .toArray(TagKey[]::new); + .toList(); } - @SuppressWarnings("unchecked") - public TagKey[] getAllItemTags(@NotNull Material mat) { - return tags.stream().map(type -> type.getTag(this, mat)).filter(Objects::nonNull).toArray(TagKey[]::new); + public @Unmodifiable List> getAllItemTags(@NotNull Material mat) { + return tags.stream() + .map(type -> type.getTag(this, mat)) + .filter(Objects::nonNull) + .toList(); } - @SuppressWarnings("unchecked") - public TagKey[] getBlockTags(@NotNull Material mat) { - return tags.stream().filter(type -> !type.isParentTag()).map(type -> type.getTag(this, mat)) - .map(itemTagKey -> TagKey.create(Registries.BLOCK, itemTagKey.location())).toArray(TagKey[]::new); + public @Unmodifiable List> getBlockTags(@NotNull Material mat) { + return tags.stream() + .filter(type -> !type.isParentTag()) + .map(type -> type.getTag(this, mat)) + .filter(Objects::nonNull) + .map(itemTagKey -> TagKey.create(Registries.BLOCK, itemTagKey.location())) + .toList(); } - @SuppressWarnings("unchecked") - public TagKey[] getAllBlockTags(@NotNull Material mat) { + public @Unmodifiable List> getAllBlockTags(@NotNull Material mat) { return tags.stream().map(type -> type.getTag(this, mat)) - .map(itemTagKey -> TagKey.create(Registries.BLOCK, itemTagKey.location())).toArray(TagKey[]::new); + .filter(Objects::nonNull) + .map(itemTagKey -> TagKey.create(Registries.BLOCK, itemTagKey.location())) + .toList(); } public boolean hasItemTable() { return itemTable != null; } - @SuppressWarnings("unchecked") - public Supplier getItemFromTable(Material material) { - return (Supplier) itemTable.get().get(this, material); + public Supplier getItemFromTable(Material material) { + return itemTable.get().get(this, material); } public boolean doGenerateItem() { @@ -1267,41 +1276,51 @@ public boolean isIgnored(Material material) { @SafeVarargs public final void setIgnored(Material material, Supplier... items) { + setIgnored(material, Arrays.asList(items)); + } + + public final void setIgnored(Material material, Collection> items) { ignoredMaterials.put(material, items); - if (items.length > 0) { - ItemMaterialData.registerMaterialEntries(Arrays.asList(items), this, material); + if (!items.isEmpty()) { + ItemMaterialData.registerMaterialEntries(items, this, material); } } - @SuppressWarnings("unchecked") public void setIgnored(Material material, ItemLike... items) { // go through setIgnoredBlock to wrap if this is a block prefix + Collection> collection = new ArrayList<>(items.length); if (this.doGenerateBlock()) { - this.setIgnoredBlock(material, - Arrays.stream(items).filter(Block.class::isInstance).map(Block.class::cast).toArray(Block[]::new)); + for (var item : items) { + if (item instanceof Block b) { + collection.add(GTMemoizer.memoizeBlockSupplier(() -> b)); + } + } } else { - this.setIgnored(material, - Arrays.stream(items).map(item -> (Supplier) () -> item).toArray(Supplier[]::new)); + for (var item : items) { + collection.add(() -> item); + } } + setIgnored(material, collection); } - @SuppressWarnings("unchecked") - public void setIgnoredBlock(Material material, Block... items) { - this.setIgnored(material, Arrays.stream(items).map(block -> GTMemoizer.memoizeBlockSupplier(() -> block)) - .toArray(Supplier[]::new)); + public void setIgnoredBlock(Material material, Block... blocks) { + Collection> collection = new ArrayList<>(blocks.length); + for (var block : blocks) { + collection.add(GTMemoizer.memoizeBlockSupplier(() -> block)); + } + setIgnored(material, collection); } - @SuppressWarnings("unchecked") public void setIgnored(Material material) { - this.ignoredMaterials.put(material, new Supplier[0]); + this.ignoredMaterials.put(material, List.of()); } public void removeIgnored(Material material) { ignoredMaterials.remove(material); } - public Map[]> getIgnored() { - return new HashMap<>(ignoredMaterials); + public @Unmodifiable Map>> getIgnored() { + return Map.copyOf(ignoredMaterials); } public boolean isAmountModified(Material material) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/ingredient/item/IntersectionMapIngredient.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/ingredient/item/IntersectionMapIngredient.java index ab644883e7c..cb7061f478f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/ingredient/item/IntersectionMapIngredient.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/lookup/ingredient/item/IntersectionMapIngredient.java @@ -48,8 +48,8 @@ public static List from(ItemStack stack) { if (!entry.isEmpty() && TagPrefix.ORES.containsKey(entry.tagPrefix())) { List children = new ArrayList<>(); - children.add(new ItemTagMapIngredient(entry.tagPrefix().getItemTags(entry.material())[0])); - children.add(new ItemTagMapIngredient(entry.tagPrefix().getItemParentTags()[0])); + children.add(new ItemTagMapIngredient(entry.tagPrefix().getItemTags(entry.material()).get(0))); + children.add(new ItemTagMapIngredient(entry.tagPrefix().getItemParentTags().get(0))); return Collections.singletonList(new IntersectionMapIngredient(children)); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java index ee3b7ff2257..ce0db2d32f6 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/VanillaRecipeHelper.java @@ -327,8 +327,9 @@ public static void addShapedRecipe(Consumer provider, boolean se } else if (content instanceof TagKey key) { builder.define(sign, (TagKey) key); } else if (content instanceof TagPrefix prefix) { - if (prefix.getItemParentTags().length > 0) { - builder.define(sign, prefix.getItemParentTags()[0]); + var parentTags = prefix.getItemParentTags(); + if (!parentTags.isEmpty()) { + builder.define(sign, parentTags.get(0)); } } else if (content instanceof ItemLike itemLike) { builder.define(sign, itemLike); @@ -491,8 +492,9 @@ public static void addShapedFluidContainerRecipe(Consumer provid } else if (content instanceof TagKey key) { builder.define(sign, (TagKey) key); } else if (content instanceof TagPrefix prefix) { - if (prefix.getItemParentTags().length > 0) { - builder.define(sign, prefix.getItemParentTags()[0]); + var parentTags = prefix.getItemParentTags(); + if (!parentTags.isEmpty()) { + builder.define(sign, parentTags.get(0)); } } else if (content instanceof ItemLike itemLike) { builder.define(sign, itemLike);