添加集装箱内容注册事件
This commit is contained in:
parent
31e53fa409
commit
1a7d9b467e
4 changed files with 77 additions and 24 deletions
|
@ -1,5 +1,6 @@
|
|||
package com.atsuishio.superbwarfare;
|
||||
|
||||
import com.atsuishio.superbwarfare.api.event.RegisterContainersEvent;
|
||||
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
|
||||
import com.atsuishio.superbwarfare.compat.CompatHolder;
|
||||
import com.atsuishio.superbwarfare.compat.clothconfig.ClothConfigHelper;
|
||||
|
@ -16,6 +17,7 @@ import net.neoforged.bus.api.SubscribeEvent;
|
|||
import net.neoforged.fml.ModContainer;
|
||||
import net.neoforged.fml.config.ModConfig;
|
||||
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import net.neoforged.fml.loading.FMLEnvironment;
|
||||
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||
import net.neoforged.neoforge.common.NeoForge;
|
||||
|
@ -63,6 +65,7 @@ public class Mod {
|
|||
ModAttachments.ATTACHMENT_TYPES.register(bus);
|
||||
|
||||
bus.addListener(this::onClientSetup);
|
||||
bus.addListener(FMLCommonSetupEvent.class, event -> onCommonSetup(bus));
|
||||
bus.addListener(ModItems::registerDispenserBehavior);
|
||||
|
||||
bus.addListener(NetworkRegistry::register);
|
||||
|
@ -111,6 +114,10 @@ public class Mod {
|
|||
workQueueC.removeAll(actions);
|
||||
}
|
||||
|
||||
public void onCommonSetup(IEventBus bus) {
|
||||
bus.post(new RegisterContainersEvent());
|
||||
}
|
||||
|
||||
public void onClientSetup(final FMLClientSetupEvent event) {
|
||||
MouseMovementHandler.init();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package com.atsuishio.superbwarfare.api.event;
|
||||
|
||||
import com.atsuishio.superbwarfare.item.ContainerBlockItem;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.neoforged.bus.api.Event;
|
||||
import net.neoforged.fml.event.IModBusEvent;
|
||||
import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Register Entities as a container
|
||||
*/
|
||||
@ApiStatus.AvailableSince("0.7.7")
|
||||
public class RegisterContainersEvent extends Event implements IModBusEvent {
|
||||
public static final List<ItemStack> containers = new ArrayList<>();
|
||||
|
||||
public <T extends Entity> void add(DeferredHolder<EntityType<?>, EntityType<T>> type) {
|
||||
add(type.get(), false);
|
||||
}
|
||||
|
||||
public <T extends Entity> void add(DeferredHolder<EntityType<?>, EntityType<T>> type, boolean canBePlacedAboveWater) {
|
||||
add(type.get(), canBePlacedAboveWater);
|
||||
}
|
||||
|
||||
public <T extends Entity> void add(EntityType<T> type) {
|
||||
add(type, false);
|
||||
}
|
||||
|
||||
public <T extends Entity> void add(EntityType<T> type, boolean canBePlacedAboveWater) {
|
||||
containers.add(ContainerBlockItem.createInstance(type, canBePlacedAboveWater));
|
||||
}
|
||||
|
||||
public void add(Entity entity) {
|
||||
add(entity, false);
|
||||
}
|
||||
|
||||
public void add(Entity entity, boolean canBePlacedAboveWater) {
|
||||
containers.add(ContainerBlockItem.createInstance(entity, canBePlacedAboveWater));
|
||||
}
|
||||
}
|
|
@ -1,7 +1,11 @@
|
|||
package com.atsuishio.superbwarfare.init;
|
||||
|
||||
import com.atsuishio.superbwarfare.Mod;
|
||||
import com.atsuishio.superbwarfare.item.*;
|
||||
import com.atsuishio.superbwarfare.api.event.RegisterContainersEvent;
|
||||
import com.atsuishio.superbwarfare.item.ArmorPlate;
|
||||
import com.atsuishio.superbwarfare.item.BatteryItem;
|
||||
import com.atsuishio.superbwarfare.item.C4Bomb;
|
||||
import com.atsuishio.superbwarfare.item.SmallContainerBlockItem;
|
||||
import net.minecraft.core.HolderLookup;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
@ -100,7 +104,7 @@ public class ModTabs {
|
|||
.withTabsBefore(ITEM_TAB.getKey())
|
||||
.displayItems((param, output) -> ModItems.BLOCKS.getEntries().forEach(registryObject -> {
|
||||
if (registryObject.get() == ModItems.CONTAINER.get()) {
|
||||
ContainerBlockItem.CONTAINER_ENTITIES.stream().map(Supplier::get).forEach(output::accept);
|
||||
RegisterContainersEvent.containers.forEach(output::accept);
|
||||
} else if (registryObject.get() == ModItems.SMALL_CONTAINER.get()) {
|
||||
output.accept(registryObject.get());
|
||||
SmallContainerBlockItem.SMALL_CONTAINER_LOOT_TABLES.stream().map(Supplier::get).forEach(output::accept);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.item;
|
||||
|
||||
import com.atsuishio.superbwarfare.Mod;
|
||||
import com.atsuishio.superbwarfare.api.event.RegisterContainersEvent;
|
||||
import com.atsuishio.superbwarfare.client.renderer.item.ContainerBlockItemRenderer;
|
||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
||||
import com.atsuishio.superbwarfare.init.ModBlocks;
|
||||
|
@ -24,6 +25,7 @@ import net.minecraft.world.level.ClipContext;
|
|||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
import net.neoforged.bus.api.EventPriority;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
|
||||
|
@ -37,31 +39,26 @@ import software.bernie.geckolib.animation.AnimationState;
|
|||
import software.bernie.geckolib.animation.PlayState;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@EventBusSubscriber(modid = Mod.MODID, bus = EventBusSubscriber.Bus.MOD)
|
||||
public class ContainerBlockItem extends BlockItem implements GeoItem {
|
||||
|
||||
/**
|
||||
* 集装箱可用实体列表
|
||||
*/
|
||||
public static final List<Supplier<ItemStack>> CONTAINER_ENTITIES = List.of(
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.MK_42.get()),
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.MLE_1934.get()),
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.HPJ_11.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.PRISM_TANK.get(), true),
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.YX_100.get()),
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.WHEEL_CHAIR.get()),
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.TOM_6.get()),
|
||||
() -> ContainerBlockItem.createInstance(ModEntities.A_10A.get())
|
||||
);
|
||||
@SubscribeEvent(priority = EventPriority.HIGH)
|
||||
public static void registerContainers(RegisterContainersEvent event) {
|
||||
event.add(ModEntities.MK_42);
|
||||
event.add(ModEntities.MLE_1934);
|
||||
event.add(ModEntities.HPJ_11);
|
||||
event.add(ModEntities.ANNIHILATOR);
|
||||
event.add(ModEntities.LASER_TOWER);
|
||||
event.add(ModEntities.SPEEDBOAT, true);
|
||||
event.add(ModEntities.AH_6);
|
||||
event.add(ModEntities.LAV_150, true);
|
||||
event.add(ModEntities.BMP_2, true);
|
||||
event.add(ModEntities.PRISM_TANK);
|
||||
event.add(ModEntities.YX_100);
|
||||
event.add(ModEntities.WHEEL_CHAIR);
|
||||
event.add(ModEntities.TOM_6);
|
||||
event.add(ModEntities.A_10A);
|
||||
}
|
||||
|
||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue