From ec3abdea1455fc8c4e0f440d77e2dc24f880a4a6 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 10 Dec 2022 15:03:23 -0800 Subject: [PATCH] Redesign CreativeTab collection event to be a lot more straight forward. (#9198) --- .../com/example/examplemod/ExampleMod.java | 9 +- .../world/item/CreativeModeTab.java.patch | 2 +- .../client/ForgeHooksClient.java | 126 ++----- .../common/util/MutableHashedLinkedMap.java | 317 ++++++++++++++++++ .../event/CreativeModeTabEvent.java | 121 ++----- .../debug/CreativeModeTabTest.java | 30 +- .../debug/CustomSoundTypeTest.java | 10 +- .../debug/DeferredRegistryTest.java | 7 +- .../debug/block/BlockEntityOnLoadTest.java | 10 +- .../debug/block/CustomHeadTest.java | 9 +- .../debug/block/CustomSignsTest.java | 11 +- .../debug/block/FullPotsAccessorDemo.java | 10 +- .../debug/block/PistonEventTest.java | 9 +- .../block/RedstoneSidedConnectivityTest.java | 9 +- .../client/AmbientOcclusionElementsTest.java | 15 +- .../debug/client/CustomArmorModelTest.java | 12 +- .../debug/client/CustomTooltipTest.java | 9 +- .../debug/client/EmissiveElementsTest.java | 7 +- .../client/model/CompositeModelTest.java | 9 +- .../client/model/CustomTransformTypeTest.java | 16 +- .../client/model/DynBucketModelTest.java | 20 +- .../debug/client/model/MegaModelTest.java | 11 +- .../client/model/MultiLayerModelTest.java | 69 ++-- .../client/model/NewModelLoaderTest.java | 31 +- .../client/model/TRSRTransformerTest.java | 13 +- .../debug/entity/GravityAttributeTest.java | 34 +- .../entity/player/ItemUseAnimationTest.java | 17 +- .../player/PlayerAttackKnockbackTest.java | 15 +- .../debug/fluid/FluidTypeTest.java | 20 +- .../debug/fluid/NewFluidTest.java | 27 +- .../debug/item/CustomElytraTest.java | 16 +- .../debug/item/CustomMobBucketTest.java | 16 +- .../debug/item/CustomShieldTest.java | 17 +- .../debug/item/EnderMaskTest.java | 18 +- .../debug/item/ForgeSpawnEggItemTest.java | 24 +- .../debug/item/HiddenTooltipPartsTest.java | 19 +- .../item/RangedMobsUseModdedWeaponsTest.java | 20 +- .../debug/item/SnowBootsTest.java | 18 +- .../debug/item/TagBasedToolTypesTest.java | 24 +- .../debug/misc/GameTestTest.java | 15 +- .../debug/world/ForgeChunkManagerTest.java | 16 +- 41 files changed, 696 insertions(+), 512 deletions(-) create mode 100644 src/main/java/net/minecraftforge/common/util/MutableHashedLinkedMap.java diff --git a/mdk/src/main/java/com/example/examplemod/ExampleMod.java b/mdk/src/main/java/com/example/examplemod/ExampleMod.java index e4013ff48b..44199e6750 100644 --- a/mdk/src/main/java/com/example/examplemod/ExampleMod.java +++ b/mdk/src/main/java/com/example/examplemod/ExampleMod.java @@ -58,8 +58,7 @@ public class ExampleMod MinecraftForge.EVENT_BUS.register(this); // Register the item to a creative tab - modEventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, - EXAMPLE_BLOCK_ITEM.get())); + modEventBus.addListener(this::addCreative); } private void commonSetup(final FMLCommonSetupEvent event) @@ -69,6 +68,12 @@ public class ExampleMod LOGGER.info("DIRT BLOCK >> {}", ForgeRegistries.BLOCKS.getKey(Blocks.DIRT)); } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(EXAMPLE_BLOCK_ITEM); + } + // You can use SubscribeEvent and let the Event Bus discover methods to call @SubscribeEvent public void onServerStarting(ServerStartingEvent event) diff --git a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch index 3786816660..de7d25fb10 100644 --- a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch +++ b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch @@ -44,7 +44,7 @@ public void m_258021_(FeatureFlagSet p_260125_, boolean p_259855_) { CreativeModeTab.ItemDisplayBuilder creativemodetab$itemdisplaybuilder = new CreativeModeTab.ItemDisplayBuilder(this, p_260125_); - this.f_256824_.m_257865_(p_260125_, creativemodetab$itemdisplaybuilder, p_259855_); -+ net.minecraftforge.client.ForgeHooksClient.onCreativeModeTabBuildContents(this, this.f_256824_).m_257865_(p_260125_, creativemodetab$itemdisplaybuilder, p_259855_); ++ net.minecraftforge.client.ForgeHooksClient.onCreativeModeTabBuildContents(this, this.f_256824_, p_260125_, creativemodetab$itemdisplaybuilder, p_259855_); this.f_243839_ = creativemodetab$itemdisplaybuilder.f_244363_; this.f_243841_ = creativemodetab$itemdisplaybuilder.f_244585_; this.m_257466_(); diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index e55e4778a7..0125362695 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -6,10 +6,6 @@ package net.minecraftforge.client; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import com.google.common.graph.ElementOrder; -import com.google.common.graph.GraphBuilder; -import com.google.common.graph.MutableGraph; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.shaders.FogShape; @@ -74,7 +70,6 @@ import net.minecraft.client.sounds.SoundEngine; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.locale.Language; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Connection; import net.minecraft.network.chat.ChatType; import net.minecraft.network.chat.CommonComponents; @@ -94,9 +89,11 @@ import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackLinkedSet; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.GameType; @@ -144,7 +141,7 @@ import net.minecraftforge.client.textures.ForgeTextureMetadata; import net.minecraftforge.common.ForgeI18n; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.ItemStackMap; +import net.minecraftforge.common.util.MutableHashedLinkedMap; import net.minecraftforge.event.CreativeModeTabEvent; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -153,8 +150,6 @@ import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.ModLoader; import net.minecraftforge.fml.VersionChecker; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.loading.toposort.CyclePresentException; -import net.minecraftforge.fml.loading.toposort.TopologicalSort; import net.minecraftforge.network.NetworkConstants; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.registries.GameData; @@ -176,7 +171,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -1189,106 +1183,26 @@ public class ForgeHooksClient return new ResourceLocation(loc.getNamespace(), normalised); } - public static CreativeModeTab.DisplayItemsGenerator onCreativeModeTabBuildContents(CreativeModeTab tab, CreativeModeTab.DisplayItemsGenerator originalGenerator) { - Set customGenerators = new HashSet<>(); - CreativeModeTabEvent.BuildContents event = ModLoader.get().postEventWithReturn(new net.minecraftforge.event.CreativeModeTabEvent.BuildContents(tab, customGenerators)); - - record ModificationEntry(CreativeModeTab.TabVisibility tabVisibility, ItemStack before, ItemStack after) {} - - return (featureFlagSet, output, hasPermissions) -> { - final Map originalEntries = ItemStackMap.createTypeAndTagLinkedMap(); - final Map entries = ItemStackMap.createTypeAndTagMap(); - - originalGenerator.accept(featureFlagSet, originalEntries::put, hasPermissions); - customGenerators.forEach(generator -> generator.accept(featureFlagSet, (stack, visibility, before, after) -> { - if (stack.getCount() != 1) - throw new IllegalArgumentException("The stack count must be 1"); - - entries.put(stack, new ModificationEntry(visibility, before, after)); - }, hasPermissions)); - - // We switch to the stacks tag here, as we need to be able to compare and hash them for the graph! - // We could not handle this with an open hashset since the builder does not support this internally. - final MutableGraph graph = GraphBuilder.directed().nodeOrder(ElementOrder.insertion()).build(); - final Map tagToStack = Maps.newHashMap(); - - CompoundTag lastStackTag = null; - for (ItemStack stack : originalEntries.keySet()) - { - final CompoundTag tag = stack.serializeNBT(); - tagToStack.put(tag, stack); - if (!stack.isEmpty()) - { - graph.addNode(tag); - } - if (lastStackTag != null) - { - graph.putEdge(lastStackTag, tag); - } - lastStackTag = tag; + public static void onCreativeModeTabBuildContents(CreativeModeTab tab, CreativeModeTab.DisplayItemsGenerator originalGenerator, FeatureFlagSet flags, CreativeModeTab.Output output, boolean hasPermisions) + { + final var entries = new MutableHashedLinkedMap(ItemStackLinkedSet.TYPE_AND_TAG, + (key, left, right) -> { + //throw new IllegalStateException("Accidentally adding the same item stack twice " + key.getDisplayName().getString() + " to a Creative Mode Tab: " + tab.getDisplayName().getString()); + // Vanilla adds enchanting books twice in both visibilities. + // This is just code cleanliness for them. For us lets just increase the visibility and merge the entries. + return CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS; } + ); - CompoundTag finalLastStackTag = lastStackTag; - entries.forEach((stack, modificationEntry) -> { - final CompoundTag tag = stack.serializeNBT(); - if (!stack.isEmpty()) - { - graph.addNode(tag); - tagToStack.put(tag, stack); - } - if (!modificationEntry.after.isEmpty()) - { - final CompoundTag afterTag = modificationEntry.after.serializeNBT(); - graph.putEdge(afterTag, tag); - tagToStack.put(afterTag, modificationEntry.after); - } - else if (finalLastStackTag != null) - { - // If the user does not specify an after, we assume it is the last stack and put it after that. - graph.putEdge(finalLastStackTag, tag); - } - if (!modificationEntry.before.isEmpty()) - { - final CompoundTag beforeTag = modificationEntry.before.serializeNBT(); - graph.putEdge(tag, beforeTag); - tagToStack.put(beforeTag, modificationEntry.before); - } - }); + originalGenerator.accept(flags, (stack, vis) -> { + if (stack.getCount() != 1) + throw new IllegalArgumentException("The stack count must be 1"); + entries.put(stack, vis); + }, hasPermisions); - try - { - List tierList = TopologicalSort.topologicalSort(graph, null); + ModLoader.get().postEvent(new CreativeModeTabEvent.BuildContents(tab, flags, hasPermisions, entries)); - // Now we unwind the tags again so that they are sorted neatly. - for (CompoundTag tag : tierList) - { - final ItemStack stack = tagToStack.get(tag); - if (originalEntries.containsKey(stack)) - { - output.accept(stack, originalEntries.get(stack)); - } - else if (entries.containsKey(stack)) - { - output.accept(stack, entries.get(stack).tabVisibility); - } - } - } - catch (CyclePresentException cyclePresentException) - { - LOGGER.error("Failed to inject custom items into creative mode tab {} due to a cycle in the dependency graph", tab, cyclePresentException); - LOGGER.warn("Detected cycles:"); - for (Set cycle : cyclePresentException.getCycles()) - { - graph.edges().forEach(edge -> { - if (cycle.contains(edge.nodeU()) && cycle.contains(edge.nodeV())) - { - LOGGER.warn(" - {} -> {}", tagToStack.get(edge.nodeU()), tagToStack.get(edge.nodeV())); - } - }); - } - LOGGER.error("Falling back to default!"); - originalGenerator.accept(featureFlagSet, output, hasPermissions); - } - }; + for (var entry : entries) + output.accept(entry.getKey(), entry.getValue()); } } diff --git a/src/main/java/net/minecraftforge/common/util/MutableHashedLinkedMap.java b/src/main/java/net/minecraftforge/common/util/MutableHashedLinkedMap.java new file mode 100644 index 0000000000..eb10cf6006 --- /dev/null +++ b/src/main/java/net/minecraftforge/common/util/MutableHashedLinkedMap.java @@ -0,0 +1,317 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.minecraftforge.common.util; + +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; + +import org.jetbrains.annotations.Nullable; + +import it.unimi.dsi.fastutil.Hash.Strategy; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; + +/** + * A mutable linked map with a hashing strategy and a merge function. + * + * @param the type of keys + * @param the type of mapped values + */ +public class MutableHashedLinkedMap implements Iterable> +{ + private final Strategy strategy; + private final Map entries; + private final MergeFunction merge; + private Entry head = null; + private Entry last = null; + + /** + * Creates a mutable linked map with a default new-value-selecting merge function. + * + * @param strategy the hashing strategy + */ + public MutableHashedLinkedMap(Strategy strategy) + { + this(strategy, (k, v1, v2) -> v2); + } + + /** + * Creates a mutable linked map with a custom merge function. + * + * @param strategy the hashing strategy + * @param merge the function used when merging an existing value and a new value + */ + public MutableHashedLinkedMap(Strategy strategy, MergeFunction merge) + { + this.strategy = strategy; + this.entries = new Object2ObjectOpenCustomHashMap<>(strategy); + this.merge = merge; + } + + /** + * Inserts the mapping with the specified key and value pair. + * + *

If there is a mapping already associated with this key, then the previous value and the specified (new) value + * are merged according to this collection's merge function, and the position of the entry is not modified. If there + * is no such mapping, then the key-value mapping is inserted at the end of this collection.

+ * + * @param key key to be inserted + * @param value (new) value to be associated with the key + * @return the previous value associated with the specified key, or {@code null} if there was no mapping for the key + */ + @Nullable + public V put(K key, V value) + { + var old = entries.get(key); + if (old != null) + { + V ret = old.value; + old.value = merge.apply(key, ret, value); + return ret; + } + + var self = new Entry(key, value); + + var l = last; + self.previous = l; + if (l == null) + head = self; + else + l.next = self; + last = self; + + entries.put(key, self); + return null; + } + + public boolean contains(K key) { return this.entries.containsKey(key); } + public boolean isEmpty() { return this.entries.isEmpty(); } + + @Nullable + public V remove(K key) + { + var ret = this.entries.remove(key); + if (ret == null) + return null; + + remove(ret); + return ret.getValue(); + } + + @Nullable + public V get(K key) + { + var entry = entries.get(key); + return entry == null ? null : entry.getValue(); + } + + @Override + public Iterator> iterator() + { + return new Iterator<>() + { + private Entry current = head; + @Override public boolean hasNext() { return current != null; } + @Override + public Map.Entry next() + { + if (!hasNext()) + throw new NoSuchElementException(); + var ret = current; + current = current.next; + return ret; + } + }; + } + + /** + * Inserts the mapping with the specified key and value pair at the beginning of this map. + * + *

If there is a mapping already associated with this key, then the previous value and the specified (new) value + * are first merged according to this map's merge function, then the entry is moved to the beginning of the map.

+ * + * @param key key to be inserted at the beginning + * @param value (new) value to be associated with the key + * @return the previous value associated with the specified key, or {@code null} if there was no mapping for the key + * + * @see #putBefore(Object, Object, Object) + */ + @Nullable + public V putFirst(K key, V value) + { + if (head != null) + return putBefore(head.getKey(), key, value); + return put(key, value); + } + + /** + * Inserts the mapping with this key and value pair immediately after the entry with the specified positioning key. + * + *

If the specified positioning key is not present within this map, then this method behaves like + * {@link #put(Object, Object)}. If there is a mapping already associated with this key, then the previous value + * and the specified (new) value are first merged according to this map's merge function, then the entry is + * moved to directly after the entry with the specified positioning key.

+ * + * @param after the key to position this new entry afterwards + * @param key key to be inserted at the beginning + * @param value (new) value to be associated with the key + * @return the previous value associated with the specified key, or {@code null} if there was no mapping for the key + * + * @see #putBefore(Object, Object, Object) + */ + @Nullable + public V putAfter(K after, K key, V value) + { + var target = entries.get(after); + if (target == null) + return put(key, value); + + V ret = null; + var entry = entries.get(key); + if (entry != null) + { + ret = entry.value; + entry.value = merge.apply(key, ret, value); + remove(entry); + } + else + { + entry = new Entry(key, value); + entries.put(key, entry); + } + + entry.previous = target; + if (target.next == null) + last = target; + else + target.next.previous = entry; + entry.next = target.next; + + target.next = entry; + return ret; + } + + /** + * Inserts the mapping with this key and value pair immediately before the entry with the specified positioning key. + * + *

If the specified positioning key is not present within this map, then this method behaves like + * {@link #put(Object, Object)}. If there is a mapping already associated with this key, then the previous value + * and the specified (new) value are first merged according to this map's merge function, then the entry is + * moved to directly before the entry with the specified positioning key.

+ * + * @param before the key to position this new entry afterwards + * @param key key to be inserted at the beginning + * @param value (new) value to be associated with the key + * @return the previous value associated with the specified key, or {@code null} if there was no mapping for the key + * + * @see #putAfter(Object, Object, Object) + */ + @Nullable + public V putBefore(K before, K key, V value) + { + var target = entries.get(before); + if (target == null) + return put(key, value); + + V ret = null; + var entry = entries.get(key); + if (entry != null) + { + ret = entry.value; + entry.value = merge.apply(key, ret, value); + remove(entry); + } + else + { + entry = new Entry(key, value); + entries.put(key, entry); + } + + entry.previous = target.previous; + if (target.previous == null) + head = entry; + else + target.previous.next = entry; + entry.next = target; + + target.previous = entry; + + return ret; + } + + private void remove(Entry e) + { + if (head == null) + head = e.next; + else if (e.previous != null) // Should never be null, but just in case. + { + e.previous.next = e.next; + e.previous = null; + } + + if (last == e) + last = e.previous; + else if (e.next != null) // Should never be null, but just in case. + { + e.next.previous = e.previous; + e.next = null; + } + } + + public static interface MergeFunction + { + Value apply(Key key, Value left, Value right); + } + + private class Entry implements Map.Entry + { + private final K key; + private V value; + + private Entry previous; + private Entry next; + + private Entry(K key, V value) + { + this.key = key; + this.value = value; + } + + @Override public K getKey() { return this.key; } + @Override public V getValue() { return this.value; } + @Override + public V setValue(V value) + { + var old = this.value; + this.value = value; + return old; + } + + @Override + public String toString() + { + return "Entry[" + this.key + ", " + this.value + "]"; + } + + @Override + public boolean equals(Object o) + { + if (!(o instanceof Map.Entry)) + return false; + + Map.Entry e = (Map.Entry)o; + return (key == null ? e.getKey() == null : key.equals(e.getKey())) && + (value == null ? e.getValue() == null : value.equals(e.getValue())); + } + + @Override + public int hashCode() + { + return (key == null ? 0 : strategy.hashCode(key)) ^ + (value == null ? 0 : value.hashCode()); + } + } +} diff --git a/src/main/java/net/minecraftforge/event/CreativeModeTabEvent.java b/src/main/java/net/minecraftforge/event/CreativeModeTabEvent.java index aa6a4ce2d3..dde0f33b9b 100644 --- a/src/main/java/net/minecraftforge/event/CreativeModeTabEvent.java +++ b/src/main/java/net/minecraftforge/event/CreativeModeTabEvent.java @@ -7,15 +7,18 @@ package net.minecraftforge.event; import java.util.Collection; import java.util.List; -import java.util.Set; import java.util.function.Consumer; +import java.util.function.Supplier; + import net.minecraft.resources.ResourceLocation; import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTab.Output; +import net.minecraft.world.item.CreativeModeTab.TabVisibility; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; -import net.minecraftforge.common.CreativeModeTabRegistry; +import net.minecraftforge.common.util.MutableHashedLinkedMap; import net.minecraftforge.eventbus.api.Cancelable; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.LogicalSide; @@ -106,58 +109,20 @@ public class CreativeModeTabEvent extends Event implements IModBusEvent * This event is fired on the {@linkplain FMLJavaModLoadingContext#getModEventBus() mod-specific event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}. */ - public static final class BuildContents extends CreativeModeTabEvent + public static final class BuildContents extends CreativeModeTabEvent implements Output { private final CreativeModeTab tab; - private final Set customGenerators; + private final FeatureFlagSet flags; + private final boolean hasPermissions; + private final MutableHashedLinkedMap entries; @ApiStatus.Internal - public BuildContents(CreativeModeTab tab, Set customGenerators) + public BuildContents(CreativeModeTab tab, FeatureFlagSet flags, boolean hasPermissions, MutableHashedLinkedMap entries) { this.tab = tab; - this.customGenerators = customGenerators; - } - - /** - * Registers the given generator. - */ - public void register(DisplayItemsAdapter generator) - { - this.customGenerators.add(generator); - } - - /** - * Registers the given generator if the provided creative mode tab matches this event's currently populating tab. - */ - public void register(CreativeModeTab tab, DisplayItemsAdapter generator) - { - if (this.tab == tab) - this.customGenerators.add(generator); - } - - /** - * Registers the given generator if the provided tab name matches this event's currently populating tab's name. - */ - public void register(ResourceLocation tabName, DisplayItemsAdapter generator) - { - if (this.tab == CreativeModeTabRegistry.getTab(tabName)) - this.customGenerators.add(generator); - } - - /** - * Adds the given item if the provided creative mode tab matches this event's currently populating tab. - */ - public void registerSimple(CreativeModeTab tab, ItemLike item) - { - this.register(tab, (enabledFlags, output, permissions) -> output.accept(item)); - } - - /** - * Adds the given items if the provided creative mode tab matches this event's currently populating tab. - */ - public void registerSimple(CreativeModeTab tab, ItemLike... items) - { - this.register(tab, (enabledFlags, output, permissions) -> output.acceptAll(items)); + this.flags = flags; + this.hasPermissions = hasPermissions; + this.entries = entries; } /** @@ -167,70 +132,36 @@ public class CreativeModeTabEvent extends Event implements IModBusEvent { return this.tab; } - } - @FunctionalInterface - public interface DisplayItemsAdapter - { - void accept(FeatureFlagSet enabledFlags, CreativeModeTabPopulator populator, boolean hasPermissions); - } - - @FunctionalInterface - public interface CreativeModeTabPopulator - { - void accept(ItemStack stack, CreativeModeTab.TabVisibility visibility, ItemStack before, ItemStack after); - - default void accept(ItemStack stack, ItemStack before, ItemStack after) + public FeatureFlagSet getFlags() { - accept(stack, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS, before, after); + return this.flags; } - default void accept(ItemLike stack, CreativeModeTab.TabVisibility visibility, ItemStack before, ItemStack after) + public boolean hasPermissions() { - accept(new ItemStack(stack), visibility, before, after); + return this.hasPermissions; } - default void accept(ItemLike stack, ItemStack before, ItemStack after) + public MutableHashedLinkedMap getEntries() { - accept(stack, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS, before, after); + return this.entries; } - default void accept(ItemStack stack, CreativeModeTab.TabVisibility visibility) + @Override + public void accept(ItemStack stack, TabVisibility visibility) { - accept(stack, visibility, ItemStack.EMPTY, ItemStack.EMPTY); + getEntries().put(stack, visibility); } - default void accept(ItemStack stack) + public void accept(Supplier item, CreativeModeTab.TabVisibility visibility) { - this.accept(stack, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + this.accept(item.get(), visibility); } - default void accept(ItemLike itemLike, CreativeModeTab.TabVisibility visibility) + public void accept(Supplier item) { - this.accept(new ItemStack(itemLike), visibility); - } - - default void accept(ItemLike itemLike) - { - this.accept(new ItemStack(itemLike), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); - } - - default void acceptAll(Collection stacks, CreativeModeTab.TabVisibility visibility) - { - stacks.forEach(stack -> this.accept(stack, visibility)); - } - - default void acceptAll(Collection stacks) - { - this.acceptAll(stacks, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); - } - - default void acceptAll(ItemLike... items) - { - for (ItemLike item : items) - { - this.accept(item); - } + this.accept(item.get()); } } } diff --git a/src/test/java/net/minecraftforge/debug/CreativeModeTabTest.java b/src/test/java/net/minecraftforge/debug/CreativeModeTabTest.java index a0e8f9e706..051e2b3db5 100644 --- a/src/test/java/net/minecraftforge/debug/CreativeModeTabTest.java +++ b/src/test/java/net/minecraftforge/debug/CreativeModeTabTest.java @@ -9,8 +9,10 @@ import java.util.List; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTab.TabVisibility; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Blocks; import net.minecraftforge.event.CreativeModeTabEvent; import net.minecraftforge.eventbus.api.IEventBus; @@ -62,28 +64,28 @@ public class CreativeModeTabTest })); } + private static ItemStack i(ItemLike item) { return new ItemStack(item); } + private static void onCreativeModeTabBuildContents(CreativeModeTabEvent.BuildContents event) { + var entries = event.getEntries(); + var vis = TabVisibility.PARENT_AND_SEARCH_TABS; if (event.getTab() == LOGS) { - event.register((flags, builder, hasPermissions) -> { - builder.accept(new ItemStack(Blocks.STRIPPED_ACACIA_LOG), ItemStack.EMPTY, new ItemStack(Blocks.ACACIA_LOG)); - builder.accept(new ItemStack(Blocks.STRIPPED_BIRCH_LOG), ItemStack.EMPTY, new ItemStack(Blocks.BIRCH_LOG)); - builder.accept(new ItemStack(Blocks.STRIPPED_DARK_OAK_LOG), ItemStack.EMPTY, new ItemStack(Blocks.DARK_OAK_LOG)); - builder.accept(new ItemStack(Blocks.STRIPPED_JUNGLE_LOG), ItemStack.EMPTY, new ItemStack(Blocks.JUNGLE_LOG)); - builder.accept(new ItemStack(Blocks.STRIPPED_OAK_LOG), ItemStack.EMPTY, new ItemStack(Blocks.OAK_LOG)); - builder.accept(new ItemStack(Blocks.STRIPPED_SPRUCE_LOG), ItemStack.EMPTY, new ItemStack(Blocks.SPRUCE_LOG)); - }); + entries.putAfter(i(Blocks.ACACIA_LOG), i(Blocks.STRIPPED_ACACIA_LOG), vis); + entries.putAfter(i(Blocks.BIRCH_LOG), i(Blocks.STRIPPED_BIRCH_LOG), vis); + entries.putAfter(i(Blocks.DARK_OAK_LOG), i(Blocks.STRIPPED_DARK_OAK_LOG), vis); + entries.putAfter(i(Blocks.JUNGLE_LOG), i(Blocks.STRIPPED_JUNGLE_LOG), vis); + entries.putAfter(i(Blocks.OAK_LOG), i(Blocks.STRIPPED_OAK_LOG), vis); + entries.putAfter(i(Blocks.SPRUCE_LOG), i(Blocks.STRIPPED_SPRUCE_LOG), vis); } if (event.getTab() == STONE) { - event.register((flags, builder, hasPermissions) -> { - builder.accept(new ItemStack(Blocks.SMOOTH_STONE), new ItemStack(Blocks.GRANITE), new ItemStack(Blocks.STONE)); - builder.accept(new ItemStack(Blocks.POLISHED_GRANITE), new ItemStack(Blocks.DIORITE), new ItemStack(Blocks.GRANITE)); - builder.accept(new ItemStack(Blocks.POLISHED_DIORITE), new ItemStack(Blocks.ANDESITE), new ItemStack(Blocks.DIORITE)); - builder.accept(new ItemStack(Blocks.POLISHED_ANDESITE), ItemStack.EMPTY, new ItemStack(Blocks.ANDESITE)); - }); + entries.putBefore(i(Blocks.STONE), i(Blocks.SMOOTH_STONE), vis); + entries.putBefore(i(Blocks.GRANITE), i(Blocks.POLISHED_GRANITE), vis); + entries.putBefore(i(Blocks.DIORITE), i(Blocks.POLISHED_DIORITE), vis); + entries.putBefore(i(Blocks.ANDESITE), i(Blocks.POLISHED_ANDESITE), vis); } } } diff --git a/src/test/java/net/minecraftforge/debug/CustomSoundTypeTest.java b/src/test/java/net/minecraftforge/debug/CustomSoundTypeTest.java index b88db23f7f..c7bc4ed5e5 100644 --- a/src/test/java/net/minecraftforge/debug/CustomSoundTypeTest.java +++ b/src/test/java/net/minecraftforge/debug/CustomSoundTypeTest.java @@ -23,9 +23,6 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import java.util.Optional; -import java.util.function.Consumer; - @Mod(CustomSoundTypeTest.MODID) public class CustomSoundTypeTest { @@ -51,7 +48,12 @@ public class CustomSoundTypeTest BLOCKS.register(modEventBus); ITEMS.register(modEventBus); SOUND_EVENTS.register(modEventBus); + modEventBus.addListener(this::addCreative); + } - modEventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.INGREDIENTS, TEST_STEP_BLOCK_ITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(TEST_STEP_BLOCK_ITEM); } } diff --git a/src/test/java/net/minecraftforge/debug/DeferredRegistryTest.java b/src/test/java/net/minecraftforge/debug/DeferredRegistryTest.java index d8cfb8f452..e91ff2c01c 100644 --- a/src/test/java/net/minecraftforge/debug/DeferredRegistryTest.java +++ b/src/test/java/net/minecraftforge/debug/DeferredRegistryTest.java @@ -78,8 +78,13 @@ public class DeferredRegistryTest { modBus.addListener(this::gatherData); MinecraftForge.EVENT_BUS.addListener(this::serverStarted); + modBus.addListener(this::addCreative); + } - modBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.INGREDIENTS, ITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(ITEM); } public void serverStarted(ServerStartedEvent event) diff --git a/src/test/java/net/minecraftforge/debug/block/BlockEntityOnLoadTest.java b/src/test/java/net/minecraftforge/debug/block/BlockEntityOnLoadTest.java index 0a737e39cf..349fa239f8 100644 --- a/src/test/java/net/minecraftforge/debug/block/BlockEntityOnLoadTest.java +++ b/src/test/java/net/minecraftforge/debug/block/BlockEntityOnLoadTest.java @@ -30,7 +30,6 @@ import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import java.util.Locale; -import java.util.function.Consumer; @Mod("be_onload_test") public class BlockEntityOnLoadTest @@ -54,11 +53,16 @@ public class BlockEntityOnLoadTest BLOCKS.register(modBus); ITEMS.register(modBus); BE_TYPES.register(modBus); - - modBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, TEST_BLOCK_ITEM.get())); + modBus.addListener(this::addCreative); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(TEST_BLOCK_ITEM); + } + private static class TestBlock extends Block implements EntityBlock { public TestBlock(Properties props) { super(props); } diff --git a/src/test/java/net/minecraftforge/debug/block/CustomHeadTest.java b/src/test/java/net/minecraftforge/debug/block/CustomHeadTest.java index 1ddc00cf63..b6a4e86c88 100644 --- a/src/test/java/net/minecraftforge/debug/block/CustomHeadTest.java +++ b/src/test/java/net/minecraftforge/debug/block/CustomHeadTest.java @@ -35,8 +35,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import java.util.function.Consumer; - /** * Adds a blaze head block and item to test the event for registering a custom skull model and to demonstrate the proper way to register a custom mob skull. * @@ -61,8 +59,13 @@ public class CustomHeadTest BLOCKS.register(modBus); ITEMS.register(modBus); BLOCK_ENTITIES.register(modBus); + modBus.addListener(this::addCreative); + } - modBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, BLAZE_HEAD_ITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(BLAZE_HEAD_ITEM); } private static class CustomSkullBlock extends SkullBlock diff --git a/src/test/java/net/minecraftforge/debug/block/CustomSignsTest.java b/src/test/java/net/minecraftforge/debug/block/CustomSignsTest.java index 9edbfc88b6..f4eecd5509 100644 --- a/src/test/java/net/minecraftforge/debug/block/CustomSignsTest.java +++ b/src/test/java/net/minecraftforge/debug/block/CustomSignsTest.java @@ -35,8 +35,6 @@ import net.minecraft.world.level.block.state.BlockBehaviour.Properties; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.WoodType; -import java.util.function.Consumer; - @Mod(CustomSignsTest.MODID) public class CustomSignsTest { @@ -66,11 +64,16 @@ public class CustomSignsTest eventBus.addListener(this::clientSetup); eventBus.addListener(this::commonSetup); - - eventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, TEST_SIGN.get())); + eventBus.addListener(this::addCreative); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(TEST_SIGN); + } + private void clientSetup(final FMLClientSetupEvent event) { BlockEntityRenderers.register(CUSTOM_SIGN.get(), SignRenderer::new); diff --git a/src/test/java/net/minecraftforge/debug/block/FullPotsAccessorDemo.java b/src/test/java/net/minecraftforge/debug/block/FullPotsAccessorDemo.java index 07f7ede0e3..7dceead706 100644 --- a/src/test/java/net/minecraftforge/debug/block/FullPotsAccessorDemo.java +++ b/src/test/java/net/minecraftforge/debug/block/FullPotsAccessorDemo.java @@ -56,7 +56,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; -import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -88,11 +87,16 @@ public class FullPotsAccessorDemo BLOCKS.register(bus); ITEMS.register(bus); BLOCK_ENTITIES.register(bus); - - bus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.INGREDIENTS, DIORITE_POT_ITEM.get())); + bus.addListener(this::addCreative); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(DIORITE_POT_ITEM); + } + private static class DioriteFlowerPotBlock extends Block implements EntityBlock { private static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 6.0D, 11.0D); diff --git a/src/test/java/net/minecraftforge/debug/block/PistonEventTest.java b/src/test/java/net/minecraftforge/debug/block/PistonEventTest.java index c29250a3db..e6a9d67d4a 100644 --- a/src/test/java/net/minecraftforge/debug/block/PistonEventTest.java +++ b/src/test/java/net/minecraftforge/debug/block/PistonEventTest.java @@ -7,8 +7,6 @@ package net.minecraftforge.debug.block; import java.util.List; import java.util.Locale; -import java.util.function.Consumer; - import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.level.block.Block; @@ -66,8 +64,13 @@ public class PistonEventTest BLOCKS.register(modBus); ITEMS.register(modBus); modBus.addListener(this::gatherData); + modBus.addListener(this::addCreative); + } - modBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, SHIFT_ON_MOVE_ITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(SHIFT_ON_MOVE_ITEM); } @SubscribeEvent diff --git a/src/test/java/net/minecraftforge/debug/block/RedstoneSidedConnectivityTest.java b/src/test/java/net/minecraftforge/debug/block/RedstoneSidedConnectivityTest.java index ecaab208be..e7e2ce7c65 100644 --- a/src/test/java/net/minecraftforge/debug/block/RedstoneSidedConnectivityTest.java +++ b/src/test/java/net/minecraftforge/debug/block/RedstoneSidedConnectivityTest.java @@ -25,8 +25,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; - @Mod(RedstoneSidedConnectivityTest.MODID) public class RedstoneSidedConnectivityTest { @@ -48,8 +46,13 @@ public class RedstoneSidedConnectivityTest IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); BLOCKS.register(modBus); ITEMS.register(modBus); + modBus.addListener(this::addCreative); + } - modBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, TEST_REDSTONE_BLOCKITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(TEST_REDSTONE_BLOCKITEM); } private static class EastRedstoneBlock extends Block diff --git a/src/test/java/net/minecraftforge/debug/client/AmbientOcclusionElementsTest.java b/src/test/java/net/minecraftforge/debug/client/AmbientOcclusionElementsTest.java index ed509f4318..d6fa092407 100644 --- a/src/test/java/net/minecraftforge/debug/client/AmbientOcclusionElementsTest.java +++ b/src/test/java/net/minecraftforge/debug/client/AmbientOcclusionElementsTest.java @@ -19,8 +19,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import java.util.function.Consumer; - /** * Test mod that demos disabling ambient occlusion on specific faces of "elements" models. */ @@ -50,8 +48,17 @@ public class AmbientOcclusionElementsTest IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); BLOCKS.register(modEventBus); ITEMS.register(modEventBus); + modEventBus.addListener(this::addCreative); + } - modEventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, - AO_BLOCK_SHADE_ITEM.get(), AO_BLOCK_NO_SHADE_ITEM.get(), NO_AO_BLOCK_SHADE_ITEM.get(), NO_AO_BLOCK_NO_SHADE_ITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + { + event.accept(AO_BLOCK_SHADE_ITEM); + event.accept(AO_BLOCK_NO_SHADE_ITEM); + event.accept(NO_AO_BLOCK_SHADE_ITEM); + event.accept(NO_AO_BLOCK_NO_SHADE_ITEM); + } } } diff --git a/src/test/java/net/minecraftforge/debug/client/CustomArmorModelTest.java b/src/test/java/net/minecraftforge/debug/client/CustomArmorModelTest.java index 144741fb60..5a39125e23 100644 --- a/src/test/java/net/minecraftforge/debug/client/CustomArmorModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/CustomArmorModelTest.java @@ -48,9 +48,17 @@ public class CustomArmorModelTest { final IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modBus); + modBus.addListener(this::addCreative); + } - modBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.INGREDIENTS, - RED_LEGGINGS.get(), ENDERMAN_CHESTPLATE.get(), ENDERMAN_BOOTS.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + { + event.accept(RED_LEGGINGS); + event.accept(ENDERMAN_CHESTPLATE); + event.accept(ENDERMAN_BOOTS); + } } private static class TintedArmorItem extends ArmorItem diff --git a/src/test/java/net/minecraftforge/debug/client/CustomTooltipTest.java b/src/test/java/net/minecraftforge/debug/client/CustomTooltipTest.java index 4c27e1adde..013cf52eb0 100644 --- a/src/test/java/net/minecraftforge/debug/client/CustomTooltipTest.java +++ b/src/test/java/net/minecraftforge/debug/client/CustomTooltipTest.java @@ -40,7 +40,6 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Optional; -import java.util.function.Consumer; @Mod(CustomTooltipTest.ID) public class CustomTooltipTest @@ -65,10 +64,16 @@ public class CustomTooltipTest modEventBus.register(ClientModBusEventHandler.class); } ITEMS.register(modEventBus); - modEventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.INGREDIENTS, CUSTOM_ITEM.get())); + modEventBus.addListener(this::addCreative); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(CUSTOM_ITEM); + } + static record CustomTooltip(int color) implements TooltipComponent { } diff --git a/src/test/java/net/minecraftforge/debug/client/EmissiveElementsTest.java b/src/test/java/net/minecraftforge/debug/client/EmissiveElementsTest.java index 78df4077de..8944258e27 100644 --- a/src/test/java/net/minecraftforge/debug/client/EmissiveElementsTest.java +++ b/src/test/java/net/minecraftforge/debug/client/EmissiveElementsTest.java @@ -37,7 +37,12 @@ public class EmissiveElementsTest IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); BLOCKS.register(modEventBus); ITEMS.register(modEventBus); + modEventBus.addListener(this::addCreative); + } - modEventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.BUILDING_BLOCKS, TEST_BLOCK_ITEM.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(TEST_BLOCK_ITEM); } } diff --git a/src/test/java/net/minecraftforge/debug/client/model/CompositeModelTest.java b/src/test/java/net/minecraftforge/debug/client/model/CompositeModelTest.java index 68984e9e23..83c1e91f66 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/CompositeModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/CompositeModelTest.java @@ -28,8 +28,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; - @Mod(CompositeModelTest.MODID) public class CompositeModelTest { @@ -87,7 +85,12 @@ public class CompositeModelTest BLOCKS.register(modEventBus); ITEMS.register(modEventBus); + modEventBus.addListener(this::addCreative); + } - modEventBus.addListener((CreativeModeTabEvent.BuildContents event) -> event.registerSimple(CreativeModeTabs.INGREDIENTS, composite_item.get())); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(composite_item); } } diff --git a/src/test/java/net/minecraftforge/debug/client/model/CustomTransformTypeTest.java b/src/test/java/net/minecraftforge/debug/client/model/CustomTransformTypeTest.java index 89adb08313..61e1908cb5 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/CustomTransformTypeTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/CustomTransformTypeTest.java @@ -50,8 +50,6 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; - /* * Test mod for the custom transform types feature. * This test mod adds an item that should be held in the main hand, while another item is in the offhand. @@ -129,13 +127,13 @@ public class CustomTransformTypeTest BLOCKS.register(modBus); BLOCK_ENTITY_TYPES.register(modBus); ITEMS.register(modBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(ITEM_HANGER_ITEM.get()); - }); - } - }); + modBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(ITEM_HANGER_ITEM); } public void gatherData(GatherDataEvent event) diff --git a/src/test/java/net/minecraftforge/debug/client/model/DynBucketModelTest.java b/src/test/java/net/minecraftforge/debug/client/model/DynBucketModelTest.java index 1e18ce7f13..a026535598 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/DynBucketModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/DynBucketModelTest.java @@ -15,8 +15,6 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import java.util.function.Consumer; - @Mod(DynBucketModelTest.MODID) public class DynBucketModelTest { @@ -33,14 +31,16 @@ public class DynBucketModelTest { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modEventBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(DRIP_BUCKET.get()); - output.accept(LAVA_OBSIDIAN.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); + } + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + { + event.accept(DRIP_BUCKET); + event.accept(LAVA_OBSIDIAN); } } } diff --git a/src/test/java/net/minecraftforge/debug/client/model/MegaModelTest.java b/src/test/java/net/minecraftforge/debug/client/model/MegaModelTest.java index 939eb6d045..4882ccff3d 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/MegaModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/MegaModelTest.java @@ -88,12 +88,13 @@ public class MegaModelTest BLOCKS.register(modEventBus); ITEMS.register(modEventBus); BLOCK_ENTITIES.register(modEventBus); + modEventBus.addListener(this::addCreative); + } - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.BUILDING_BLOCKS) { - onBuildContents.register((p_259204_, p_259752_, p_260123_) -> p_259752_.accept(TEST_BLOCK_ITEM.get())); - } - }); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(TEST_BLOCK_ITEM); } @Mod.EventBusSubscriber(value = Dist.CLIENT, modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) diff --git a/src/test/java/net/minecraftforge/debug/client/model/MultiLayerModelTest.java b/src/test/java/net/minecraftforge/debug/client/model/MultiLayerModelTest.java index 0c1eacd4ac..a28d1dafda 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/MultiLayerModelTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/MultiLayerModelTest.java @@ -12,17 +12,14 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; -import net.minecraft.resources.ResourceLocation; import net.minecraftforge.event.CreativeModeTabEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.ObjectHolder; -import net.minecraftforge.registries.RegisterEvent; - -import java.util.function.Consumer; +import net.minecraftforge.registries.RegistryObject; @Mod(MultiLayerModelTest.MODID) public class MultiLayerModelTest @@ -32,44 +29,34 @@ public class MultiLayerModelTest public static final String VERSION = "0.0"; private static final String blockName = "test_layer_block"; - private static final ResourceLocation blockId = new ResourceLocation(MODID, blockName); - @ObjectHolder(registryName = "block", value = blockName) - public static final Block TEST_BLOCK = null; - @Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD) - public static class Registration + private static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID); + private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); + private static final RegistryObject TEST_BLOCK = BLOCKS.register(blockName, () -> new Block(Block.Properties.of(Material.WOOD).noOcclusion())); + private static final RegistryObject TEST_BLOCK_ITEM = ITEMS.register(blockName, () -> new BlockItem(TEST_BLOCK.get(), new Item.Properties())); + + public MultiLayerModelTest() { - @SubscribeEvent - public static void registerBlocks(RegisterEvent event) - { - if (!ENABLED || !event.getRegistryKey().equals(ForgeRegistries.Keys.BLOCKS)) - return; - event.register(ForgeRegistries.Keys.BLOCKS, blockId, () -> new Block(Block.Properties.of(Material.WOOD).noOcclusion())); - } + if (!ENABLED) + return; - @SubscribeEvent - public static void registerItems(RegisterEvent event) - { - if (!ENABLED || !event.getRegistryKey().equals(ForgeRegistries.Keys.ITEMS)) - return; - event.register(ForgeRegistries.Keys.ITEMS, blockId, () -> new BlockItem(TEST_BLOCK, new Item.Properties())); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(TEST_BLOCK.asItem()); - }); - } - }); - } + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + BLOCKS.register(modEventBus); + ITEMS.register(modEventBus); + modEventBus.addListener(this::clientSetup); + modEventBus.addListener(this::addCreative); + } - @SubscribeEvent - public static void clientSetup(FMLClientSetupEvent event) - { - if (!ENABLED) - return; - ItemBlockRenderTypes.setRenderLayer(TEST_BLOCK, (layer) -> { - return layer == RenderType.solid() || layer == RenderType.translucent(); - }); - } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(TEST_BLOCK); + } + + private void clientSetup(FMLClientSetupEvent event) + { + ItemBlockRenderTypes.setRenderLayer(TEST_BLOCK.get(), (layer) -> { + return layer == RenderType.solid() || layer == RenderType.translucent(); + }); } } diff --git a/src/test/java/net/minecraftforge/debug/client/model/NewModelLoaderTest.java b/src/test/java/net/minecraftforge/debug/client/model/NewModelLoaderTest.java index dd23998c14..903a3061c4 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/NewModelLoaderTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/NewModelLoaderTest.java @@ -7,7 +7,6 @@ package net.minecraftforge.debug.client.model; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; -import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.resources.model.ModelBaker; import net.minecraft.world.item.*; import net.minecraft.world.level.block.Block; @@ -48,7 +47,7 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import java.util.function.Consumer; +import java.util.Arrays; import java.util.function.Function; import net.minecraft.client.renderer.block.model.ItemTransforms; @@ -127,20 +126,22 @@ public class NewModelLoaderTest modEventBus.addListener(this::modelRegistry); modEventBus.addListener(this::datagen); + modEventBus.addListener(this::addCreative); + } - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(obj_item.get()); - output.accept(custom_transforms.get()); - output.accept(custom_vanilla_loader.get()); - output.accept(custom_loader.get()); - output.accept(item_layers.get()); - output.accept(separate_perspective.get()); - - }); - } - }); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + { + Arrays.asList( + obj_item, + custom_transforms, + custom_vanilla_loader, + custom_loader, + item_layers, + separate_perspective + ).forEach(event::accept); + } } public void modelRegistry(ModelEvent.RegisterGeometryLoaders event) diff --git a/src/test/java/net/minecraftforge/debug/client/model/TRSRTransformerTest.java b/src/test/java/net/minecraftforge/debug/client/model/TRSRTransformerTest.java index 15426f82a0..4245c3e5c3 100644 --- a/src/test/java/net/minecraftforge/debug/client/model/TRSRTransformerTest.java +++ b/src/test/java/net/minecraftforge/debug/client/model/TRSRTransformerTest.java @@ -6,8 +6,6 @@ package net.minecraftforge.debug.client.model; import java.util.List; -import java.util.function.Consumer; - import net.minecraft.client.renderer.RenderType; import net.minecraft.util.RandomSource; import net.minecraft.world.item.CreativeModeTabs; @@ -56,12 +54,13 @@ public class TRSRTransformerTest { DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> mod.addListener(this::onModelBake)); BLOCKS.register(mod); ITEMS.register(mod); + mod.addListener(this::addCreative); + } - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.BUILDING_BLOCKS) { - onBuildContents.register((p_259204_, p_259752_, p_260123_) -> p_259752_.accept(TEST_ITEM.get())); - } - }); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(TEST_ITEM); } public void onModelBake(ModelEvent.BakingCompleted e) { diff --git a/src/test/java/net/minecraftforge/debug/entity/GravityAttributeTest.java b/src/test/java/net/minecraftforge/debug/entity/GravityAttributeTest.java index d83f1b4d94..b2be029e77 100644 --- a/src/test/java/net/minecraftforge/debug/entity/GravityAttributeTest.java +++ b/src/test/java/net/minecraftforge/debug/entity/GravityAttributeTest.java @@ -8,19 +8,19 @@ package net.minecraftforge.debug.entity; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.stream.StreamSupport; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BiomeTags; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.item.CreativeModeTabs; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.event.CreativeModeTabEvent; +import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegisterEvent; +import net.minecraftforge.registries.RegistryObject; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -39,20 +39,24 @@ import net.minecraft.world.level.Level; import net.minecraft.server.level.ServerLevel; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraft.world.item.Item.Properties; -@Mod("gravity_attribute_test") +@Mod(GravityAttributeTest.MODID) public class GravityAttributeTest { public static final boolean ENABLE = false; - private static Logger logger = LogManager.getLogger(); + public static final String MODID = "gravity_attribute_test"; + private static Logger logger = LogManager.getLogger(MODID); private int ticks; private static final UUID REDUCED_GRAVITY_ID = UUID.fromString("DEB06000-7979-4242-8888-00000DEB0600"); private static final AttributeModifier REDUCED_GRAVITY = (new AttributeModifier(REDUCED_GRAVITY_ID, "Reduced gravity", (double)-0.80, Operation.MULTIPLY_TOTAL)); + private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); + private static final RegistryObject TEST_ITEM = ITEMS.register("gravity_stick", () -> new ItemGravityStick(new Properties().rarity(Rarity.RARE))); public GravityAttributeTest() @@ -60,7 +64,10 @@ public class GravityAttributeTest if (ENABLE) { MinecraftForge.EVENT_BUS.register(this); - FMLJavaModLoadingContext.get().getModEventBus().register(this); + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.register(this); + ITEMS.register(modEventBus); + modEventBus.addListener(this::addCreative); } } @@ -115,19 +122,10 @@ public class GravityAttributeTest } } - @SubscribeEvent - public void registerItems(RegisterEvent event) + private void addCreative(CreativeModeTabEvent.BuildContents event) { - event.register(ForgeRegistries.Keys.ITEMS, helper -> helper.register("gravity_stick", - new ItemGravityStick(new Properties().rarity(Rarity.RARE)))); - - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.TOOLS_AND_UTILITIES) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(ForgeRegistries.ITEMS.getValue(new ResourceLocation("gravity_attribute_test", "gravity_stick"))); - }); - } - }); + if (event.getTab() == CreativeModeTabs.TOOLS_AND_UTILITIES) + event.accept(TEST_ITEM); } public static class ItemGravityStick extends Item diff --git a/src/test/java/net/minecraftforge/debug/entity/player/ItemUseAnimationTest.java b/src/test/java/net/minecraftforge/debug/entity/player/ItemUseAnimationTest.java index bea0002277..0a93edfb07 100644 --- a/src/test/java/net/minecraftforge/debug/entity/player/ItemUseAnimationTest.java +++ b/src/test/java/net/minecraftforge/debug/entity/player/ItemUseAnimationTest.java @@ -41,14 +41,15 @@ public class ItemUseAnimationTest public ItemUseAnimationTest() { - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.COMBAT) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(THING.get()); - }); - } - }); + var modBus = FMLJavaModLoadingContext.get().getModEventBus(); + ITEMS.register(modBus); + modBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.COMBAT) + event.accept(THING); } private static class ThingItem extends Item diff --git a/src/test/java/net/minecraftforge/debug/entity/player/PlayerAttackKnockbackTest.java b/src/test/java/net/minecraftforge/debug/entity/player/PlayerAttackKnockbackTest.java index 48c22d92d3..773450a63c 100644 --- a/src/test/java/net/minecraftforge/debug/entity/player/PlayerAttackKnockbackTest.java +++ b/src/test/java/net/minecraftforge/debug/entity/player/PlayerAttackKnockbackTest.java @@ -21,7 +21,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import java.util.UUID; -import java.util.function.Consumer; /** * Tests if the patch to PlayerEntity to make it utilize Attributes.ATTACK_KNOCKBACK works @@ -46,13 +45,13 @@ public class PlayerAttackKnockbackTest { { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modEventBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.COMBAT) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(KNOCKBACK_SWORD.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.COMBAT) + event.accept(KNOCKBACK_SWORD); } static class KnockbackSwordItem extends SwordItem { diff --git a/src/test/java/net/minecraftforge/debug/fluid/FluidTypeTest.java b/src/test/java/net/minecraftforge/debug/fluid/FluidTypeTest.java index 04c62cf0cd..6ba1becde1 100644 --- a/src/test/java/net/minecraftforge/debug/fluid/FluidTypeTest.java +++ b/src/test/java/net/minecraftforge/debug/fluid/FluidTypeTest.java @@ -173,22 +173,18 @@ public class FluidTypeTest ITEMS.register(modEventBus); modEventBus.addListener(this::commonSetup); + modEventBus.addListener(this::addCreative); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> new FluidTypeTestClient(modEventBus)); - - FMLJavaModLoadingContext.get().getModEventBus().addListener(new Consumer() { - @Override - public void accept(CreativeModeTabEvent.BuildContents onBuildContents) { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permission) -> { - output.accept(new ItemStack(TEST_FLUID_BUCKET.get())); - }); - } - } - }); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(TEST_FLUID_BUCKET); + } + private void commonSetup(FMLCommonSetupEvent event) { // Add Interactions for sources @@ -218,7 +214,7 @@ public class FluidTypeTest private void registerBlockColors(RegisterColorHandlersEvent.Block event) { - event.getBlockColors().register((state, getter, pos, index) -> + event.register((state, getter, pos, index) -> { if (getter != null && pos != null) { diff --git a/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java b/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java index 84ca69fc4d..dd2dfedecc 100644 --- a/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java +++ b/src/test/java/net/minecraftforge/debug/fluid/NewFluidTest.java @@ -63,7 +63,7 @@ public class NewFluidTest private static ForgeFlowingFluid.Properties makeProperties() { return new ForgeFlowingFluid.Properties(test_fluid_type, test_fluid, test_fluid_flowing) - .bucket(test_fluid_bucket).block(test_fluid_block); + .bucket(TEST_FLUID_BUCKET).block(test_fluid_block); } public static RegistryObject test_fluid_type = FLUID_TYPES.register("test_fluid", () -> new FluidType(FluidType.Properties.create()) @@ -111,7 +111,7 @@ public class NewFluidTest public static RegistryObject test_fluid_block = BLOCKS.register("test_fluid_block", () -> new LiquidBlock(test_fluid, Properties.of(Material.WATER).noCollission().strength(100.0F).noLootTable()) ); - public static RegistryObject test_fluid_bucket = ITEMS.register("test_fluid_bucket", () -> + public static RegistryObject TEST_FLUID_BUCKET = ITEMS.register("test_fluid_bucket", () -> new BucketItem(test_fluid, new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1)) ); @@ -119,7 +119,7 @@ public class NewFluidTest public static RegistryObject fluidloggable_block = BLOCKS.register("fluidloggable_block", () -> new FluidloggableBlock(Properties.of(Material.WOOD).noCollission().strength(100.0F).noLootTable()) ); - public static RegistryObject fluidloggable_blockitem = ITEMS.register("fluidloggable_block", () -> + public static RegistryObject FLUID_LOGGABLE_BLOCK_ITEM = ITEMS.register("fluidloggable_block", () -> new BlockItem(fluidloggable_block.get(), new Item.Properties()) ); @@ -135,15 +135,16 @@ public class NewFluidTest ITEMS.register(modEventBus); FLUID_TYPES.register(modEventBus); FLUIDS.register(modEventBus); + modEventBus.addListener(this::addCreative); + } + } - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(fluidloggable_blockitem.get()); - output.accept(test_fluid_bucket.get()); - }); - } - }); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + { + event.accept(FLUID_LOGGABLE_BLOCK_ITEM); + event.accept(TEST_FLUID_BUCKET); } } @@ -155,7 +156,7 @@ public class NewFluidTest Validate.isTrue(state.getBlock() == Blocks.WATER && state2 == state); ItemStack stack = Fluids.WATER.getFluidType().getBucket(new FluidStack(Fluids.WATER, 1)); Validate.isTrue(stack.getItem() == Fluids.WATER.getBucket()); - event.enqueueWork(() -> DispenserBlock.registerBehavior(test_fluid_bucket.get(), DispenseFluidContainer.getInstance())); + event.enqueueWork(() -> DispenserBlock.registerBehavior(TEST_FLUID_BUCKET.get(), DispenseFluidContainer.getInstance())); } // WARNING: this doesn't allow "any fluid", only the fluid from this test mod! @@ -198,7 +199,7 @@ public class NewFluidTest public ItemStack pickupBlock(LevelAccessor worldIn, BlockPos pos, BlockState state) { if (state.getValue(FLUIDLOGGED)) { worldIn.setBlock(pos, state.setValue(FLUIDLOGGED, false), 3); - return new ItemStack(test_fluid_bucket.get()); + return new ItemStack(TEST_FLUID_BUCKET.get()); } else { return ItemStack.EMPTY; } diff --git a/src/test/java/net/minecraftforge/debug/item/CustomElytraTest.java b/src/test/java/net/minecraftforge/debug/item/CustomElytraTest.java index 429c47566b..5099d89025 100644 --- a/src/test/java/net/minecraftforge/debug/item/CustomElytraTest.java +++ b/src/test/java/net/minecraftforge/debug/item/CustomElytraTest.java @@ -33,8 +33,6 @@ import net.minecraft.world.item.Item.Properties; import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; - @Mod(CustomElytraTest.MOD_ID) @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, modid = CustomElytraTest.MOD_ID) public class CustomElytraTest @@ -48,13 +46,13 @@ public class CustomElytraTest final IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modBus); modBus.addListener(this::onClientSetup); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(TEST_ELYTRA.get()); - }); - } - }); + modBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(TEST_ELYTRA); } private void onClientSetup(FMLClientSetupEvent event) diff --git a/src/test/java/net/minecraftforge/debug/item/CustomMobBucketTest.java b/src/test/java/net/minecraftforge/debug/item/CustomMobBucketTest.java index 02b94f90b2..e2bd0a980a 100644 --- a/src/test/java/net/minecraftforge/debug/item/CustomMobBucketTest.java +++ b/src/test/java/net/minecraftforge/debug/item/CustomMobBucketTest.java @@ -19,8 +19,6 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import java.util.function.Consumer; - @Mod(CustomMobBucketTest.MODID) public class CustomMobBucketTest { @@ -41,13 +39,13 @@ public class CustomMobBucketTest { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modEventBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(COW_BUCKET.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); } } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(COW_BUCKET); + } } diff --git a/src/test/java/net/minecraftforge/debug/item/CustomShieldTest.java b/src/test/java/net/minecraftforge/debug/item/CustomShieldTest.java index 4c0c97559c..a29d4e8c70 100644 --- a/src/test/java/net/minecraftforge/debug/item/CustomShieldTest.java +++ b/src/test/java/net/minecraftforge/debug/item/CustomShieldTest.java @@ -31,14 +31,15 @@ public class CustomShieldTest public CustomShieldTest() { - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.COMBAT) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(CUSTOM_SHIELD_ITEM.get()); - }); - } - }); + var modBus = FMLJavaModLoadingContext.get().getModEventBus(); + ITEMS.register(modBus); + modBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.COMBAT) + event.accept(CUSTOM_SHIELD_ITEM); } private static class CustomShieldItem extends Item diff --git a/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java b/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java index 5f34612f4f..af17fa00bd 100644 --- a/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java +++ b/src/test/java/net/minecraftforge/debug/item/EnderMaskTest.java @@ -17,15 +17,13 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import java.util.function.Consumer; - @Mod(EnderMaskTest.MODID) public class EnderMaskTest { public static final String MODID = "ender_mask_test"; public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - public static RegistryObject ender_mask = ITEMS.register("ender_mask", () -> + public static RegistryObject ENDER_MASK = ITEMS.register("ender_mask", () -> new ArmorItem(ArmorMaterials.LEATHER, EquipmentSlot.HEAD, (new Item.Properties())) { @Override @@ -40,12 +38,12 @@ public class EnderMaskTest { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modEventBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(ender_mask.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(ENDER_MASK); } } diff --git a/src/test/java/net/minecraftforge/debug/item/ForgeSpawnEggItemTest.java b/src/test/java/net/minecraftforge/debug/item/ForgeSpawnEggItemTest.java index d9b901303b..bda11ae1e9 100644 --- a/src/test/java/net/minecraftforge/debug/item/ForgeSpawnEggItemTest.java +++ b/src/test/java/net/minecraftforge/debug/item/ForgeSpawnEggItemTest.java @@ -6,8 +6,6 @@ package net.minecraftforge.debug.item; import java.util.Map; -import java.util.function.Consumer; - import net.minecraft.client.renderer.entity.PigRenderer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; @@ -51,20 +49,20 @@ public class ForgeSpawnEggItemTest { if (ENABLED) { - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - ENTITIES.register(FMLJavaModLoadingContext.get().getModEventBus()); - - FMLJavaModLoadingContext.get().getModEventBus().register(this); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(EGG.get()); - }); - } - }); + var eventBus = FMLJavaModLoadingContext.get().getModEventBus(); + ITEMS.register(eventBus); + ENTITIES.register(eventBus); + eventBus.register(this); + eventBus.addListener(this::addCreative); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(EGG); + } + @SubscribeEvent public void onRegisterAttributes(final EntityAttributeCreationEvent event) { diff --git a/src/test/java/net/minecraftforge/debug/item/HiddenTooltipPartsTest.java b/src/test/java/net/minecraftforge/debug/item/HiddenTooltipPartsTest.java index e2f73743d9..a35c8ab381 100644 --- a/src/test/java/net/minecraftforge/debug/item/HiddenTooltipPartsTest.java +++ b/src/test/java/net/minecraftforge/debug/item/HiddenTooltipPartsTest.java @@ -23,8 +23,6 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.NotNull; -import java.util.function.Consumer; - @Mod(HiddenTooltipPartsTest.MOD_ID) @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, modid = HiddenTooltipPartsTest.MOD_ID) public class HiddenTooltipPartsTest @@ -37,14 +35,15 @@ public class HiddenTooltipPartsTest public HiddenTooltipPartsTest() { - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(TEST_ITEM.get()); - }); - } - }); + var modBus = FMLJavaModLoadingContext.get().getModEventBus(); + ITEMS.register(modBus); + modBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(TEST_ITEM); } static class TestItem extends Item diff --git a/src/test/java/net/minecraftforge/debug/item/RangedMobsUseModdedWeaponsTest.java b/src/test/java/net/minecraftforge/debug/item/RangedMobsUseModdedWeaponsTest.java index 71a317f90b..731332ec89 100644 --- a/src/test/java/net/minecraftforge/debug/item/RangedMobsUseModdedWeaponsTest.java +++ b/src/test/java/net/minecraftforge/debug/item/RangedMobsUseModdedWeaponsTest.java @@ -17,8 +17,6 @@ import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; -import java.util.function.Consumer; - @Mod(RangedMobsUseModdedWeaponsTest.MOD_ID) public class RangedMobsUseModdedWeaponsTest { @@ -45,14 +43,16 @@ public class RangedMobsUseModdedWeaponsTest { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modEventBus); modEventBus.addListener(this::onClientSetup); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.COMBAT) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(MODDED_BOW.get()); - output.accept(MODDED_CROSSBOW.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); + } + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.COMBAT) + { + event.accept(MODDED_BOW); + event.accept(MODDED_CROSSBOW); } } diff --git a/src/test/java/net/minecraftforge/debug/item/SnowBootsTest.java b/src/test/java/net/minecraftforge/debug/item/SnowBootsTest.java index 23195b82fc..ce0697d754 100644 --- a/src/test/java/net/minecraftforge/debug/item/SnowBootsTest.java +++ b/src/test/java/net/minecraftforge/debug/item/SnowBootsTest.java @@ -16,15 +16,13 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import java.util.function.Consumer; - @Mod(SnowBootsTest.MODID) public class SnowBootsTest { public static final String MODID = "snow_boots_test"; public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - public static RegistryObject snow_boots = ITEMS.register("snow_boots", () -> + public static RegistryObject SNOW_BOOTS = ITEMS.register("snow_boots", () -> new ArmorItem(ArmorMaterials.DIAMOND, EquipmentSlot.FEET, (new Item.Properties())) { @Override @@ -38,12 +36,12 @@ public class SnowBootsTest { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(modEventBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.COMBAT) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(snow_boots.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.COMBAT) + event.accept(SNOW_BOOTS); } } diff --git a/src/test/java/net/minecraftforge/debug/item/TagBasedToolTypesTest.java b/src/test/java/net/minecraftforge/debug/item/TagBasedToolTypesTest.java index dd545077f9..326ce916bc 100644 --- a/src/test/java/net/minecraftforge/debug/item/TagBasedToolTypesTest.java +++ b/src/test/java/net/minecraftforge/debug/item/TagBasedToolTypesTest.java @@ -41,7 +41,6 @@ import net.minecraftforge.registries.RegistryObject; import java.util.List; import java.util.Set; -import java.util.function.Consumer; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -97,22 +96,15 @@ public class TagBasedToolTypesTest BLOCKS.register(modEventBus); ITEMS.register(modEventBus); modEventBus.addListener(this::gatherData); + modEventBus.addListener(this::addCreative); + } - FMLJavaModLoadingContext.get().getModEventBus().addListener(new Consumer() { - @Override - public void accept(CreativeModeTabEvent.BuildContents onBuildContents) { - if (onBuildContents.getTab() == CreativeModeTabs.TOOLS_AND_UTILITIES) { - onBuildContents.register((flags, output, permission) -> { - output.accept(TOOL.get()); - }); - } else if (onBuildContents.getTab() == CreativeModeTabs.BUILDING_BLOCKS) { - onBuildContents.register((flags, output, permission) -> { - output.accept(ORE_ITEM.get()); - }); - } - } - - }); + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.TOOLS_AND_UTILITIES) + event.accept(TOOL); + if (event.getTab() == CreativeModeTabs.BUILDING_BLOCKS) + event.accept(ORE_ITEM); } @SubscribeEvent diff --git a/src/test/java/net/minecraftforge/debug/misc/GameTestTest.java b/src/test/java/net/minecraftforge/debug/misc/GameTestTest.java index 51fc12018a..0bc3dea2c0 100644 --- a/src/test/java/net/minecraftforge/debug/misc/GameTestTest.java +++ b/src/test/java/net/minecraftforge/debug/misc/GameTestTest.java @@ -70,17 +70,16 @@ public class GameTestTest BLOCKS.register(modBus); ITEMS.register(modBus); BLOCK_ENTITIES.register(modBus); - - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(ENERGY_BLOCK_ITEM.get()); - }); - } - }); + modBus.addListener(this::addCreative); } } + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(ENERGY_BLOCK_ITEM); + } + @SubscribeEvent public void onRegisterGameTests(RegisterGameTestsEvent event) { diff --git a/src/test/java/net/minecraftforge/debug/world/ForgeChunkManagerTest.java b/src/test/java/net/minecraftforge/debug/world/ForgeChunkManagerTest.java index a49c62979a..8fab79c0cc 100644 --- a/src/test/java/net/minecraftforge/debug/world/ForgeChunkManagerTest.java +++ b/src/test/java/net/minecraftforge/debug/world/ForgeChunkManagerTest.java @@ -9,8 +9,6 @@ import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.longs.LongSet; import java.util.Map; import java.util.UUID; -import java.util.function.Consumer; - import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; @@ -51,13 +49,13 @@ public class ForgeChunkManagerTest modEventBus.addListener(this::commonSetup); BLOCKS.register(modEventBus); ITEMS.register(modEventBus); - FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer) onBuildContents -> { - if (onBuildContents.getTab() == CreativeModeTabs.INGREDIENTS) { - onBuildContents.register((flags, output, permissions) -> { - output.accept(CHUNK_LOADER_ITEM.get()); - }); - } - }); + modEventBus.addListener(this::addCreative); + } + + private void addCreative(CreativeModeTabEvent.BuildContents event) + { + if (event.getTab() == CreativeModeTabs.INGREDIENTS) + event.accept(CHUNK_LOADER_ITEM); } private void commonSetup(FMLCommonSetupEvent event)