Move registry to a subclass

This commit is contained in:
DBotThePony 2021-08-11 17:24:07 +07:00
parent 30cba0ca18
commit 56e058998c
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 114 additions and 77 deletions

View File

@ -1,54 +1,30 @@
package ru.dbotthepony.mc.otm; package ru.dbotthepony.mc.otm;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.gui.ForgeIngameGui;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.INBTSerializable;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.InterModComms;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent; import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent;
import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.fmlserverevents.FMLServerStartingEvent; import net.minecraftforge.fmlserverevents.FMLServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import ru.dbotthepony.mc.otm.block.BlockAndroidStation;
import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation;
import ru.dbotthepony.mc.otm.capability.AndroidCapability; import ru.dbotthepony.mc.otm.capability.AndroidCapability;
import ru.dbotthepony.mc.otm.capability.AndroidCapabilityPlayer; import ru.dbotthepony.mc.otm.capability.AndroidCapabilityPlayer;
import ru.dbotthepony.mc.otm.capability.IAndroidCapability;
import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.client.AndroidGui; import ru.dbotthepony.mc.otm.client.AndroidGui;
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
import ru.dbotthepony.mc.otm.network.MatteryNetwork; import ru.dbotthepony.mc.otm.network.MatteryNetwork;
import ru.dbotthepony.mc.otm.screen.AndroidStationScreen;
import java.math.BigDecimal;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
// The value here should match an entry in the META-INF/mods.toml file // The value here should match an entry in the META-INF/mods.toml file
@ -58,21 +34,12 @@ public class OverdriveThatMatters {
public static final String MOD_ID = "overdrive_that_matters"; public static final String MOD_ID = "overdrive_that_matters";
public static final Logger LOGGER = LogManager.getLogger(); public static final Logger LOGGER = LogManager.getLogger();
public static Block ANDROID_STATION = new BlockAndroidStation(); public static AndroidGui ANDROID_GUI;
public static BlockEntityType.Builder<BlockEntityAndroidStation> ANDROID_STATION_BUILDER = BlockEntityType.Builder.of(BlockEntityAndroidStation::new, ANDROID_STATION);
public static BlockEntityType<BlockEntityAndroidStation> ANDROID_STATION_FACTORY = null;
public static Item ANDROID_STATION_ITEM = new BlockItem(ANDROID_STATION, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC)).setRegistryName(BlockAndroidStation.REGISTRY_NAME);
public static MenuType<AndroidStationMenu> ANDROID_STATION_MENU_TYPE = new MenuType<>(AndroidStationMenu::new);
public static AndroidGui ANDROID_GUI = new AndroidGui();
static {
ANDROID_STATION_MENU_TYPE.setRegistryName(BlockAndroidStation.REGISTRY_NAME);
}
public OverdriveThatMatters() { public OverdriveThatMatters() {
// Register the setup method for modloading // Register the setup method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupClient);
// Register the enqueueIMC method for modloading // Register the enqueueIMC method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
// Register the processIMC method for modloading // Register the processIMC method for modloading
@ -82,13 +49,23 @@ public class OverdriveThatMatters {
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(AndroidCapabilityPlayer.class); MinecraftForge.EVENT_BUS.register(AndroidCapabilityPlayer.class);
MinecraftForge.EVENT_BUS.register(AndroidCapability.class); MinecraftForge.EVENT_BUS.register(AndroidCapability.class);
MinecraftForge.EVENT_BUS.register(ANDROID_GUI);
// LOGGER.info("Registered event handlers");
} }
private void setup(final FMLCommonSetupEvent event) { private void setup(final FMLCommonSetupEvent event) {
// some preinit code // some preinit code
MatteryCapability.register(); MatteryCapability.register();
// LOGGER.info("Registered capabilities");
MatteryNetwork.register(); MatteryNetwork.register();
// LOGGER.info("Registered network");
}
private void setupClient(final FMLClientSetupEvent event) {
ANDROID_GUI = new AndroidGui();
MinecraftForge.EVENT_BUS.register(ANDROID_GUI);
Registry.Menus.registerScreens(event);
} }
private void enqueueIMC(final InterModEnqueueEvent event) { private void enqueueIMC(final InterModEnqueueEvent event) {
@ -109,31 +86,26 @@ public class OverdriveThatMatters {
// do something when the server starts // do something when the server starts
} }
// You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
// Event bus for receiving Registry Events) public static class RegistryEventSubscriber {
@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents {
@SubscribeEvent @SubscribeEvent
public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) { public static void blocks(final RegistryEvent.Register<Block> event) {
blockRegistryEvent.getRegistry().register(ANDROID_STATION); Registry.Blocks.register(event);
} }
@SubscribeEvent @SubscribeEvent
public static void onItemRegistry(final RegistryEvent.Register<Item> blockRegistryEvent) { public static void items(final RegistryEvent.Register<Item> event) {
blockRegistryEvent.getRegistry().register(ANDROID_STATION_ITEM); Registry.Items.register(event);
} }
@SubscribeEvent @SubscribeEvent
public static void onBlockEntityRegistry(final RegistryEvent.Register<BlockEntityType<?>> blockRegistryEvent) { public static void tiles(final RegistryEvent.Register<BlockEntityType<?>> event) {
ANDROID_STATION_FACTORY = ANDROID_STATION_BUILDER.build(null); Registry.BlockEntities.register(event);
ANDROID_STATION_FACTORY.setRegistryName(BlockAndroidStation.REGISTRY_NAME);
blockRegistryEvent.getRegistry().register(ANDROID_STATION_FACTORY);
} }
@SubscribeEvent @SubscribeEvent
public static void onMenuTypeRegistry(final RegistryEvent.Register<MenuType<?>> blockRegistryEvent) { public static void menus(final RegistryEvent.Register<MenuType<?>> event) {
blockRegistryEvent.getRegistry().register(ANDROID_STATION_MENU_TYPE); Registry.Menus.register(event);
MenuScreens.register(ANDROID_STATION_MENU_TYPE, AndroidStationScreen::new);
} }
} }
} }

View File

@ -0,0 +1,81 @@
package ru.dbotthepony.mc.otm;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import ru.dbotthepony.mc.otm.block.BlockAndroidStation;
import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation;
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
import ru.dbotthepony.mc.otm.screen.AndroidStationScreen;
public class Registry {
public static class Names {
public static final ResourceLocation ANDROID_STATION = new ResourceLocation(OverdriveThatMatters.MOD_ID, "android_station");
}
public static class Blocks {
public static final Block ANDROID_STATION = new BlockAndroidStation();
public static void register(final RegistryEvent.Register<Block> event) {
event.getRegistry().register(ANDROID_STATION);
// OverdriveThatMatters.LOGGER.info("Registered blocks");
}
}
public static class Items {
public static Item ANDROID_STATION = new BlockItem(Blocks.ANDROID_STATION, new Item.Properties().stacksTo(64).tab(CreativeModeTab.TAB_MISC)).setRegistryName(Names.ANDROID_STATION);
public static void register(final RegistryEvent.Register<Item> event) {
event.getRegistry().register(ANDROID_STATION);
// OverdriveThatMatters.LOGGER.info("Registered items");
}
}
public static class BlockEntities {
public static BlockEntityType.Builder<BlockEntityAndroidStation> ANDROID_STATION_BUILDER = BlockEntityType.Builder.of(BlockEntityAndroidStation::new, Blocks.ANDROID_STATION);
public static BlockEntityType<BlockEntityAndroidStation> ANDROID_STATION = ANDROID_STATION_BUILDER.build(null);
static {
ANDROID_STATION.setRegistryName(Names.ANDROID_STATION);
}
public static void register(final RegistryEvent.Register<BlockEntityType<?>> event) {
event.getRegistry().register(ANDROID_STATION);
// OverdriveThatMatters.LOGGER.info("Registered block entities");
}
}
public static class Menus {
public static final MenuType<AndroidStationMenu> ANDROID_STATION = new net.minecraft.world.inventory.MenuType<>(AndroidStationMenu::new);
static {
ANDROID_STATION.setRegistryName(Names.ANDROID_STATION);
}
public static void register(final RegistryEvent.Register<MenuType<?>> event) {
event.getRegistry().register(ANDROID_STATION);
// OverdriveThatMatters.LOGGER.info("Registered menus");
}
public static void registerScreens(final FMLClientSetupEvent event) {
MenuScreens.register(ANDROID_STATION, AndroidStationScreen::new);
// OverdriveThatMatters.LOGGER.info("Registered screens");
}
}
}

View File

@ -1,7 +1,6 @@
package ru.dbotthepony.mc.otm.block; package ru.dbotthepony.mc.otm.block;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.EntityBlock;
@ -12,18 +11,17 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.dbotthepony.mc.otm.OverdriveThatMatters; import ru.dbotthepony.mc.otm.Registry;
import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation; import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class BlockAndroidStation extends BlockMatteryMachineBase implements EntityBlock { public class BlockAndroidStation extends BlockMatteryMachineBase implements EntityBlock {
public static final ResourceLocation REGISTRY_NAME = new ResourceLocation(OverdriveThatMatters.MOD_ID, "android_station");
private final VoxelShape SHAPE = Shapes.box(0, 0, 0, 1, 0.5, 1); private final VoxelShape SHAPE = Shapes.box(0, 0, 0, 1, 0.5, 1);
public BlockAndroidStation() { public BlockAndroidStation() {
super(); super();
this.setRegistryName(REGISTRY_NAME); this.setRegistryName(Registry.Names.ANDROID_STATION);
} }
@Override @Override
@ -40,6 +38,6 @@ public class BlockAndroidStation extends BlockMatteryMachineBase implements Enti
@Nullable @Nullable
@Override @Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) { public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
return level.isClientSide || type != OverdriveThatMatters.ANDROID_STATION_FACTORY ? null : BlockEntityAndroidStation::tick; return level.isClientSide || type != Registry.BlockEntities.ANDROID_STATION ? null : BlockEntityAndroidStation::tick;
} }
} }

View File

@ -1,10 +1,6 @@
package ru.dbotthepony.mc.otm.block.entity; package ru.dbotthepony.mc.otm.block.entity;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.MenuProvider; import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
@ -14,16 +10,13 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.CapabilityEnergy; import ru.dbotthepony.mc.otm.Registry;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.capability.IAndroidCapability; import ru.dbotthepony.mc.otm.capability.IAndroidCapability;
import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.capability.MatteryMachineEnergyStorage; import ru.dbotthepony.mc.otm.capability.MatteryMachineEnergyStorage;
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu; import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -36,7 +29,7 @@ public class BlockEntityAndroidStation extends BlockEntityMatteryPoweredMachine
} }
public BlockEntityAndroidStation(BlockPos p_155229_, BlockState p_155230_) { public BlockEntityAndroidStation(BlockPos p_155229_, BlockState p_155230_) {
super(OverdriveThatMatters.ANDROID_STATION_FACTORY, p_155229_, p_155230_); super(Registry.BlockEntities.ANDROID_STATION, p_155229_, p_155230_);
energy = new MatteryMachineEnergyStorage(MatteryMachineEnergyStorage.MachineType.WORKER, new BigDecimal(128_000), new BigDecimal(4096), new BigDecimal(256)); energy = new MatteryMachineEnergyStorage(MatteryMachineEnergyStorage.MachineType.WORKER, new BigDecimal(128_000), new BigDecimal(4096), new BigDecimal(256));
energy_resolver = LazyOptional.of(() -> energy); energy_resolver = LazyOptional.of(() -> energy);
} }

View File

@ -1,22 +1,15 @@
package ru.dbotthepony.mc.otm.menu; package ru.dbotthepony.mc.otm.menu;
import net.minecraft.core.BlockPos;
import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer; import net.minecraft.world.SimpleContainer;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.Slot; import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.CapabilityEnergy; import ru.dbotthepony.mc.otm.Registry;
import net.minecraftforge.energy.IEnergyStorage;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation; import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation;
import ru.dbotthepony.mc.otm.capability.IAndroidCapability; import ru.dbotthepony.mc.otm.capability.IAndroidCapability;
import ru.dbotthepony.mc.otm.capability.IMatteryEnergyStorage;
import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.menu.data.BigDecimalDataContainer;
import ru.dbotthepony.mc.otm.menu.slot.BatterySlot; import ru.dbotthepony.mc.otm.menu.slot.BatterySlot;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -68,7 +61,7 @@ public class AndroidStationMenu extends PoweredMachineMenu {
@Nullable BlockEntityAndroidStation tile @Nullable BlockEntityAndroidStation tile
) { ) {
super( super(
OverdriveThatMatters.ANDROID_STATION_MENU_TYPE, Registry.Menus.ANDROID_STATION,
containerID, containerID,
inventory, inventory,
tile); tile);