From a44e57f493479d2ddd6f9ccb16258e93b46ce1df Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 3 Jun 2025 15:57:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9B=86=E8=A3=85=E7=AE=B1?= =?UTF-8?q?=E7=89=A9=E5=93=81=E7=9A=84=E5=8D=95=E7=8B=AC=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/ClientRenderHandler.java | 7 +++ .../client/ContainerItemDecorator.java | 61 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/main/java/com/atsuishio/superbwarfare/client/ContainerItemDecorator.java diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java index 4c87e22d7..437bf133b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClientRenderHandler.java @@ -8,12 +8,14 @@ import com.atsuishio.superbwarfare.client.renderer.block.SmallContainerBlockEnti import com.atsuishio.superbwarfare.client.tooltip.*; import com.atsuishio.superbwarfare.client.tooltip.component.*; import com.atsuishio.superbwarfare.init.ModBlockEntities; +import com.atsuishio.superbwarfare.init.ModItems; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; +import net.neoforged.neoforge.client.event.RegisterItemDecorationsEvent; @EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public class ClientRenderHandler { @@ -63,4 +65,9 @@ public class ClientRenderHandler { event.registerBelowAll(AircraftOverlay.ID, new AircraftOverlay()); event.registerBelowAll(MortarInfoOverlay.ID, new MortarInfoOverlay()); } + + @SubscribeEvent + public static void registerItemDecorations(RegisterItemDecorationsEvent event) { + event.register(ModItems.CONTAINER.get(), new ContainerItemDecorator()); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ContainerItemDecorator.java b/src/main/java/com/atsuishio/superbwarfare/client/ContainerItemDecorator.java new file mode 100644 index 000000000..235e4a2e8 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/ContainerItemDecorator.java @@ -0,0 +1,61 @@ +package com.atsuishio.superbwarfare.client; + +import com.atsuishio.superbwarfare.Mod; +import com.atsuishio.superbwarfare.entity.vehicle.WheelChairEntity; +import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; +import com.atsuishio.superbwarfare.item.ContainerBlockItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.ItemStack; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.neoforge.client.IItemDecorator; + +import javax.annotation.ParametersAreNonnullByDefault; + +@OnlyIn(Dist.CLIENT) +public class ContainerItemDecorator implements IItemDecorator { + + @Override + @ParametersAreNonnullByDefault + public boolean render(GuiGraphics guiGraphics, Font font, ItemStack stack, int xOffset, int yOffset) { + if (!(stack.getItem() instanceof ContainerBlockItem)) return false; + var data = stack.get(DataComponents.BLOCK_ENTITY_DATA); + if (data == null) return false; + var tag = data.copyTag(); + + EntityType entityType = null; + if (tag.contains("EntityType")) { + entityType = EntityType.byString(tag.getString("EntityType")).orElse(null); + } + if (entityType == null) return false; + Minecraft mc = Minecraft.getInstance(); + var level = mc.level; + if (level == null) return false; + + var entity = entityType.create(level); + if (!(entity instanceof VehicleEntity vehicle)) return false; + + ResourceLocation icon = null; + + // TODO 给每一个载具加上item icon + if (vehicle instanceof WheelChairEntity) { + icon = Mod.loc("textures/item/perk/beast_bullet.png"); + } + + if (icon == null) return false; + + var pose = guiGraphics.pose(); + pose.pushPose(); + + RenderHelper.preciseBlit(guiGraphics, icon, xOffset, yOffset, 200, 0, 0, 8, 8, 8, 8); + + pose.popPose(); + + return true; + } +}