Skip to content

Commit 7dac94f

Browse files
committed
Update IClientItemExtension registration
1 parent b0b5ac7 commit 7dac94f

8 files changed

Lines changed: 66 additions & 99 deletions

File tree

‎NeoForge/src/main/java/vazkii/botania/neoforge/client/ForgeBlockEntityItemRendererHelper.java‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import java.util.IdentityHashMap;
1717
import java.util.Map;
18-
import java.util.function.Consumer;
1918

2019
public class ForgeBlockEntityItemRendererHelper {
2120
// Nulls in ctor call are fine, we don't use those fields
@@ -33,14 +32,10 @@ public void renderByItem(ItemStack stack, ItemDisplayContext transform,
3332
}
3433
};
3534

36-
private static final IClientItemExtensions PROPS = new IClientItemExtensions() {
35+
public static final IClientItemExtensions PROPS = new IClientItemExtensions() {
3736
@Override
3837
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
3938
return ForgeBlockEntityItemRendererHelper.RENDERER;
4039
}
4140
};
42-
43-
public static void initItem(Consumer<IClientItemExtensions> consumer) {
44-
consumer.accept(PROPS);
45-
}
4641
}

‎NeoForge/src/main/java/vazkii/botania/neoforge/client/ForgeClientInitializer.java‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import net.minecraft.client.Minecraft;
66
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
7+
import net.minecraft.client.model.HumanoidModel;
78
import net.minecraft.client.particle.ParticleProvider;
89
import net.minecraft.client.particle.SpriteSet;
910
import net.minecraft.client.renderer.ItemBlockRenderTypes;
@@ -13,8 +14,15 @@
1314
import net.minecraft.client.resources.model.ModelResourceLocation;
1415
import net.minecraft.core.particles.ParticleOptions;
1516
import net.minecraft.core.particles.ParticleType;
17+
import net.minecraft.core.registries.BuiltInRegistries;
18+
import net.minecraft.resources.ResourceLocation;
1619
import net.minecraft.world.entity.Entity;
1720
import net.minecraft.world.entity.EntityType;
21+
import net.minecraft.world.entity.EquipmentSlot;
22+
import net.minecraft.world.entity.LivingEntity;
23+
import net.minecraft.world.item.Item;
24+
import net.minecraft.world.item.ItemStack;
25+
import net.minecraft.world.level.block.Block;
1826
import net.minecraft.world.level.block.entity.BlockEntity;
1927
import net.minecraft.world.level.block.entity.BlockEntityType;
2028
import net.neoforged.api.distmarker.Dist;
@@ -24,6 +32,8 @@
2432
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
2533
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
2634
import net.neoforged.neoforge.client.event.*;
35+
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
36+
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
2737
import net.neoforged.neoforge.client.gui.VanillaGuiLayers;
2838
import net.neoforged.neoforge.common.NeoForge;
2939
import net.neoforged.neoforge.event.entity.player.ItemTooltipEvent;
@@ -44,23 +54,30 @@
4454
import vazkii.botania.client.gui.box.BaubleBoxGui;
4555
import vazkii.botania.client.integration.ears.EarsIntegration;
4656
import vazkii.botania.client.model.BotaniaLayerDefinitions;
57+
import vazkii.botania.client.model.armor.ArmorModels;
4758
import vazkii.botania.client.render.BlockRenderLayers;
4859
import vazkii.botania.client.render.ColorHandler;
4960
import vazkii.botania.client.render.entity.EntityRenderers;
61+
import vazkii.botania.common.block.BotaniaBlocks;
5062
import vazkii.botania.common.block.block_entity.BotaniaBlockEntities;
5163
import vazkii.botania.common.block.block_entity.corporea.CorporeaIndexBlockEntity;
5264
import vazkii.botania.common.entity.BotaniaEntities;
5365
import vazkii.botania.common.item.BotaniaItems;
66+
import vazkii.botania.common.item.equipment.armor.manasteel.ManasteelArmorItem;
5467
import vazkii.botania.common.item.equipment.bauble.RingOfDexterousMotionItem;
68+
import vazkii.botania.common.lib.LibMisc;
5569
import vazkii.botania.xplat.ClientXplatAbstractions;
5670
import vazkii.botania.xplat.XplatAbstractions;
5771
import vazkii.patchouli.api.BookDrawScreenEvent;
5872

5973
import java.io.IOException;
6074
import java.io.UncheckedIOException;
75+
import java.util.ArrayList;
6176
import java.util.Collections;
6277
import java.util.IdentityHashMap;
78+
import java.util.List;
6379
import java.util.Map;
80+
import java.util.Objects;
6481
import java.util.function.Function;
6582
import java.util.function.Supplier;
6683
import java.util.stream.Stream;
@@ -210,6 +227,37 @@ public static void registerEntityRenderers(EntityRenderersEvent.RegisterRenderer
210227
EntityRenderers.registerEntityRenderers(evt::registerEntityRenderer);
211228
}
212229

230+
@SubscribeEvent
231+
public static void registerClientExtensions(RegisterClientExtensionsEvent event) {
232+
List<Item> armorItems = new ArrayList<>();
233+
for (var entry : BuiltInRegistries.ITEM.entrySet()) {
234+
Item item = entry.getValue();
235+
ResourceLocation id = entry.getKey().location();
236+
if (item instanceof ManasteelArmorItem armor && id.getNamespace().equals(LibMisc.MOD_ID)) {
237+
armorItems.add(armor);
238+
}
239+
}
240+
241+
event.registerItem(
242+
new IClientItemExtensions() {
243+
@Override
244+
public HumanoidModel<?> getHumanoidArmorModel(LivingEntity living, ItemStack stack, EquipmentSlot slot, HumanoidModel<?> defaultModel) {
245+
return Objects.requireNonNull(ArmorModels.get(stack));
246+
}
247+
},
248+
armorItems.toArray(Item[]::new)
249+
);
250+
251+
event.registerItem(
252+
ForgeBlockEntityItemRendererHelper.PROPS,
253+
Stream.of(
254+
BotaniaBlocks.brewery, BotaniaBlocks.manaPylon, BotaniaBlocks.naturaPylon, BotaniaBlocks.gaiaPylon,
255+
BotaniaBlocks.bellows, BotaniaBlocks.corporeaIndex, BotaniaBlocks.hourglass,
256+
BotaniaBlocks.teruTeruBozu, BotaniaBlocks.avatar
257+
).map(Block::asItem).toArray(Item[]::new)
258+
);
259+
}
260+
213261
@SubscribeEvent
214262
public static void registerParticleFactories(RegisterParticleProvidersEvent evt) {
215263
BotaniaParticles.FactoryHandler.registerFactories(new BotaniaParticles.FactoryHandler.Consumer() {

‎NeoForge/src/main/java/vazkii/botania/neoforge/mixin/client/ItemBlockWithSpecialRendererForgeMixin.java‎

Lines changed: 0 additions & 23 deletions
This file was deleted.

‎NeoForge/src/main/java/vazkii/botania/neoforge/mixin/client/ItemManasteelArmorForgeMixin.java‎

Lines changed: 0 additions & 32 deletions
This file was deleted.

‎NeoForge/src/main/resources/botania.neoforge.mixins.json‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
"BotaniaGrassBlockForgeMixin"
1010
],
1111
"client": [
12-
"client.ItemBlockWithSpecialRendererForgeMixin",
13-
"client.ItemManasteelArmorForgeMixin",
1412
"client.ModelBakeryForgeAccessor"
1513
],
1614
"server": [],

‎Xplat/src/main/java/vazkii/botania/client/model/armor/ArmorModels.java‎

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,13 @@ public static void init(EntityRendererProvider.Context ctx) {
4343
@Nullable
4444
public static ArmorModel get(ItemStack stack) {
4545
Item item = stack.getItem();
46-
if (item instanceof ManaweaveArmorItem armor) {
47-
return manaweave.get(armor.getEquipmentSlot());
48-
} else if (item instanceof ElementiumArmorItem armor) {
49-
return elementium.get(armor.getEquipmentSlot());
50-
} else if (item instanceof TerrasteelArmorItem armor) {
51-
return terrasteel.get(armor.getEquipmentSlot());
52-
} else if (item instanceof ManasteelArmorItem armor) { // manasteel must be last because the other types extend from it
53-
return manasteel.get(armor.getEquipmentSlot());
54-
}
55-
56-
return null;
46+
return switch (item) {
47+
case ManaweaveArmorItem armor -> manaweave.get(armor.getEquipmentSlot());
48+
case ElementiumArmorItem armor -> elementium.get(armor.getEquipmentSlot());
49+
case TerrasteelArmorItem armor -> terrasteel.get(armor.getEquipmentSlot());
50+
// manasteel must be last because the other types extend from it
51+
case ManasteelArmorItem armor -> manasteel.get(armor.getEquipmentSlot());
52+
default -> null;
53+
};
5754
}
5855
}

‎Xplat/src/main/java/vazkii/botania/common/block/BotaniaBlocks.java‎

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import vazkii.botania.common.brew.BotaniaMobEffects;
4545
import vazkii.botania.common.helper.ColorHelper;
4646
import vazkii.botania.common.item.BotaniaItems;
47-
import vazkii.botania.common.item.block.BlockItemWithSpecialRenderer;
4847
import vazkii.botania.common.item.block.SpecialFlowerBlockItem;
4948
import vazkii.botania.common.item.block.TinyPotatoBlockItem;
5049
import vazkii.botania.common.lib.LibBlockNames;
@@ -1756,13 +1755,13 @@ public static void registerItemBlocks(BiConsumer<Item, ResourceLocation> r) {
17561755
r.accept(new BlockItem(bifrostPerm, props), BuiltInRegistries.BLOCK.getKey(bifrostPerm));
17571756
r.accept(new BlockItem(runeAltar, props), BuiltInRegistries.BLOCK.getKey(runeAltar));
17581757
r.accept(new BlockItem(enchanter, props), BuiltInRegistries.BLOCK.getKey(enchanter));
1759-
r.accept(new BlockItemWithSpecialRenderer(brewery, props), BuiltInRegistries.BLOCK.getKey(brewery));
1758+
r.accept(new BlockItem(brewery, props), BuiltInRegistries.BLOCK.getKey(brewery));
17601759
r.accept(new BlockItem(terraPlate, props), BuiltInRegistries.BLOCK.getKey(terraPlate));
17611760
r.accept(new BlockItem(alfPortal, BotaniaItems.defaultBuilder().rarity(Rarity.UNCOMMON)), BuiltInRegistries.BLOCK.getKey(alfPortal));
17621761

1763-
r.accept(new BlockItemWithSpecialRenderer(manaPylon, props), BuiltInRegistries.BLOCK.getKey(manaPylon));
1764-
r.accept(new BlockItemWithSpecialRenderer(naturaPylon, props), BuiltInRegistries.BLOCK.getKey(naturaPylon));
1765-
r.accept(new BlockItemWithSpecialRenderer(gaiaPylon, props), BuiltInRegistries.BLOCK.getKey(gaiaPylon));
1762+
r.accept(new BlockItem(manaPylon, props), BuiltInRegistries.BLOCK.getKey(manaPylon));
1763+
r.accept(new BlockItem(naturaPylon, props), BuiltInRegistries.BLOCK.getKey(naturaPylon));
1764+
r.accept(new BlockItem(gaiaPylon, props), BuiltInRegistries.BLOCK.getKey(gaiaPylon));
17661765
r.accept(new BlockItem(distributor, props), BuiltInRegistries.BLOCK.getKey(distributor));
17671766
r.accept(new BlockItem(manaVoid, props), BuiltInRegistries.BLOCK.getKey(manaVoid));
17681767
r.accept(new BlockItem(manaDetector, props), BuiltInRegistries.BLOCK.getKey(manaDetector));
@@ -1778,7 +1777,7 @@ public static void registerItemBlocks(BiConsumer<Item, ResourceLocation> r) {
17781777
r.accept(new BlockItem(pump, props), BuiltInRegistries.BLOCK.getKey(pump));
17791778
r.accept(new BlockItem(sparkChanger, props), BuiltInRegistries.BLOCK.getKey(sparkChanger));
17801779
r.accept(new BlockItem(manaBomb, props), BuiltInRegistries.BLOCK.getKey(manaBomb));
1781-
r.accept(new BlockItemWithSpecialRenderer(bellows, props), BuiltInRegistries.BLOCK.getKey(bellows));
1780+
r.accept(new BlockItem(bellows, props), BuiltInRegistries.BLOCK.getKey(bellows));
17821781
r.accept(new BlockItem(openCrate, props), BuiltInRegistries.BLOCK.getKey(openCrate));
17831782
r.accept(new BlockItem(craftCrate, props), BuiltInRegistries.BLOCK.getKey(craftCrate));
17841783
r.accept(new BlockItem(forestEye, props), BuiltInRegistries.BLOCK.getKey(forestEye));
@@ -1795,7 +1794,7 @@ public static void registerItemBlocks(BiConsumer<Item, ResourceLocation> r) {
17951794
r.accept(new BlockItem(redStringInterceptor, props), BuiltInRegistries.BLOCK.getKey(redStringInterceptor));
17961795
r.accept(new BlockItem(corporeaFunnel, props), BuiltInRegistries.BLOCK.getKey(corporeaFunnel));
17971796
r.accept(new BlockItem(corporeaInterceptor, props), BuiltInRegistries.BLOCK.getKey(corporeaInterceptor));
1798-
r.accept(new BlockItemWithSpecialRenderer(corporeaIndex, props), BuiltInRegistries.BLOCK.getKey(corporeaIndex));
1797+
r.accept(new BlockItem(corporeaIndex, props), BuiltInRegistries.BLOCK.getKey(corporeaIndex));
17991798
r.accept(new BlockItem(corporeaCrystalCube, props), BuiltInRegistries.BLOCK.getKey(corporeaCrystalCube));
18001799
r.accept(new BlockItem(corporeaRetainer, props), BuiltInRegistries.BLOCK.getKey(corporeaRetainer));
18011800
r.accept(new BlockItem(corporeaBlock, props), BuiltInRegistries.BLOCK.getKey(corporeaBlock));
@@ -1806,7 +1805,7 @@ public static void registerItemBlocks(BiConsumer<Item, ResourceLocation> r) {
18061805
r.accept(new BlockItem(corporeaBrickSlab, props), BuiltInRegistries.BLOCK.getKey(corporeaBrickSlab));
18071806
r.accept(new BlockItem(corporeaBrickWall, props), BuiltInRegistries.BLOCK.getKey(corporeaBrickWall));
18081807
r.accept(new BlockItem(incensePlate, props), BuiltInRegistries.BLOCK.getKey(incensePlate));
1809-
r.accept(new BlockItemWithSpecialRenderer(hourglass, props), BuiltInRegistries.BLOCK.getKey(hourglass));
1808+
r.accept(new BlockItem(hourglass, props), BuiltInRegistries.BLOCK.getKey(hourglass));
18101809
r.accept(new BlockItem(ghostRail, props), BuiltInRegistries.BLOCK.getKey(ghostRail));
18111810
r.accept(new BlockItem(lightRelayDefault, props), BuiltInRegistries.BLOCK.getKey(lightRelayDefault));
18121811
r.accept(new BlockItem(lightRelayDetector, props), BuiltInRegistries.BLOCK.getKey(lightRelayDetector));
@@ -1815,8 +1814,8 @@ public static void registerItemBlocks(BiConsumer<Item, ResourceLocation> r) {
18151814
r.accept(new BlockItem(lightLauncher, props), BuiltInRegistries.BLOCK.getKey(lightLauncher));
18161815
r.accept(new BlockItem(cacophonium, props), BuiltInRegistries.BLOCK.getKey(cacophonium));
18171816
r.accept(new BlockItem(cellBlock, props), BuiltInRegistries.BLOCK.getKey(cellBlock));
1818-
r.accept(new BlockItemWithSpecialRenderer(teruTeruBozu, props), BuiltInRegistries.BLOCK.getKey(teruTeruBozu));
1819-
r.accept(new BlockItemWithSpecialRenderer(avatar, props), BuiltInRegistries.BLOCK.getKey(avatar));
1817+
r.accept(new BlockItem(teruTeruBozu, props), BuiltInRegistries.BLOCK.getKey(teruTeruBozu));
1818+
r.accept(new BlockItem(avatar, props), BuiltInRegistries.BLOCK.getKey(avatar));
18201819
r.accept(new BlockItem(root, props), BuiltInRegistries.BLOCK.getKey(root));
18211820
r.accept(new BlockItem(felPumpkin, props), BuiltInRegistries.BLOCK.getKey(felPumpkin));
18221821
r.accept(new BlockItem(cocoon, props), BuiltInRegistries.BLOCK.getKey(cocoon));

‎Xplat/src/main/java/vazkii/botania/common/item/block/BlockItemWithSpecialRenderer.java‎

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)