From 3869cd084b9231c18394b14e9201609ac3c38134 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sun, 23 Feb 2025 03:17:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E9=9B=86=E8=A3=85=E7=AE=B1=E5=9C=A8JE?= =?UTF-8?q?I=E9=87=8C=E6=AD=A3=E7=A1=AE=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compat/jei/SbwJEIPlugin.java | 6 ++++++ .../atsuishio/superbwarfare/init/ModTabs.java | 16 +++++----------- .../item/ContainerBlockItem.java | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/compat/jei/SbwJEIPlugin.java b/src/main/java/com/atsuishio/superbwarfare/compat/jei/SbwJEIPlugin.java index 1b0317573..3ddb31d93 100644 --- a/src/main/java/com/atsuishio/superbwarfare/compat/jei/SbwJEIPlugin.java +++ b/src/main/java/com/atsuishio/superbwarfare/compat/jei/SbwJEIPlugin.java @@ -38,6 +38,12 @@ public class SbwJEIPlugin implements IModPlugin { @Override public void registerItemSubtypes(ISubtypeRegistration registration) { + registration.registerSubtypeInterpreter(ModItems.CONTAINER.get(), (ingredient, context) -> { + assert ingredient.getTag() != null; + return ingredient.getTag().getCompound("BlockEntityTag").getString("EntityType"); + } + ); + registration.registerSubtypeInterpreter(ModItems.POTION_MORTAR_SHELL.get(), (stack, context) -> { if (!stack.hasTag()) { return IIngredientSubtypeInterpreter.NONE; diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java index baee6bbd5..b4e13c724 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.item.ArmorPlate; -import com.atsuishio.superbwarfare.item.ContainerBlockItem; import com.atsuishio.superbwarfare.item.gun.handgun.*; import com.atsuishio.superbwarfare.item.gun.launcher.JavelinItem; import com.atsuishio.superbwarfare.item.gun.launcher.M79Item; @@ -36,6 +35,10 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; +import java.util.function.Supplier; + +import static com.atsuishio.superbwarfare.item.ContainerBlockItem.CONTAINER_ENTITIES; + @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class ModTabs { @@ -117,16 +120,7 @@ public class ModTabs { .withTabsBefore(AMMO_TAB.getKey()) .displayItems((param, output) -> ModItems.ITEMS.getEntries().forEach(registryObject -> { if (registryObject.get() == ModItems.CONTAINER.get()) { - output.accept(ContainerBlockItem.createInstance(ModEntities.MK_42.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.MLE_1934.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.ANNIHILATOR.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.LASER_TOWER.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.SPEEDBOAT.get(), true)); - output.accept(ContainerBlockItem.createInstance(ModEntities.AH_6.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.LAV_150.get(), true)); - output.accept(ContainerBlockItem.createInstance(ModEntities.BMP_2.get(), true)); - output.accept(ContainerBlockItem.createInstance(ModEntities.WHEEL_CHAIR.get())); - output.accept(ContainerBlockItem.createInstance(ModEntities.TOM_6.get())); + CONTAINER_ENTITIES.stream().map(Supplier::get).forEach(output::accept); } else { output.accept(registryObject.get()); if (registryObject.get() == ModItems.ARMOR_PLATE.get()) { diff --git a/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java b/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java index d5031358f..5e75dd03a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/ContainerBlockItem.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.item; import com.atsuishio.superbwarfare.client.renderer.block.ContainerBlockItemRenderer; import com.atsuishio.superbwarfare.init.ModBlockEntities; import com.atsuishio.superbwarfare.init.ModBlocks; +import com.atsuishio.superbwarfare.init.ModEntities; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; @@ -29,10 +30,28 @@ import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; +import java.util.List; import java.util.function.Consumer; +import java.util.function.Supplier; public class ContainerBlockItem extends BlockItem implements GeoItem { + /** + * 集装箱可用实体列表 + */ + public static final List> CONTAINER_ENTITIES = List.of( + () -> ContainerBlockItem.createInstance(ModEntities.MK_42.get()), + () -> ContainerBlockItem.createInstance(ModEntities.MLE_1934.get()), + () -> ContainerBlockItem.createInstance(ModEntities.ANNIHILATOR.get()), + () -> ContainerBlockItem.createInstance(ModEntities.LASER_TOWER.get()), + () -> ContainerBlockItem.createInstance(ModEntities.SPEEDBOAT.get(), true), + () -> ContainerBlockItem.createInstance(ModEntities.AH_6.get()), + () -> ContainerBlockItem.createInstance(ModEntities.LAV_150.get(), true), + () -> ContainerBlockItem.createInstance(ModEntities.BMP_2.get(), true), + () -> ContainerBlockItem.createInstance(ModEntities.WHEEL_CHAIR.get()), + () -> ContainerBlockItem.createInstance(ModEntities.TOM_6.get()) + ); + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public ContainerBlockItem() {