添加集装箱物品的单独渲染
This commit is contained in:
parent
cea8b3f3dd
commit
a44e57f493
2 changed files with 68 additions and 0 deletions
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue