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;
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.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.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.gui.ForgeIngameGui;
import net.minecraftforge.api.distmarker.Dist;
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.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.fml.InterModComms;
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.InterModEnqueueEvent;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent;
import net.minecraftforge.fml.loading.FMLEnvironment;
import net.minecraftforge.fmlserverevents.FMLServerStartingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
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.AndroidCapabilityPlayer;
import ru.dbotthepony.mc.otm.capability.IAndroidCapability;
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
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.screen.AndroidStationScreen;
import java.math.BigDecimal;
import java.util.Optional;
import java.util.stream.Collectors;
// 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 Logger LOGGER = LogManager.getLogger();
public static Block ANDROID_STATION = new BlockAndroidStation();
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 static AndroidGui ANDROID_GUI;
public OverdriveThatMatters() {
// Register the setup method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupClient);
// Register the enqueueIMC method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueIMC);
// Register the processIMC method for modloading
@ -82,13 +49,23 @@ public class OverdriveThatMatters {
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(AndroidCapabilityPlayer.class);
MinecraftForge.EVENT_BUS.register(AndroidCapability.class);
MinecraftForge.EVENT_BUS.register(ANDROID_GUI);
// LOGGER.info("Registered event handlers");
}
private void setup(final FMLCommonSetupEvent event) {
// some preinit code
MatteryCapability.register();
// LOGGER.info("Registered capabilities");
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) {
@ -109,31 +86,26 @@ public class OverdriveThatMatters {
// do something when the server starts
}
// You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
// Event bus for receiving Registry Events)
@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents {
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEventSubscriber {
@SubscribeEvent
public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
blockRegistryEvent.getRegistry().register(ANDROID_STATION);
public static void blocks(final RegistryEvent.Register<Block> event) {
Registry.Blocks.register(event);
}
@SubscribeEvent
public static void onItemRegistry(final RegistryEvent.Register<Item> blockRegistryEvent) {
blockRegistryEvent.getRegistry().register(ANDROID_STATION_ITEM);
public static void items(final RegistryEvent.Register<Item> event) {
Registry.Items.register(event);
}
@SubscribeEvent
public static void onBlockEntityRegistry(final RegistryEvent.Register<BlockEntityType<?>> blockRegistryEvent) {
ANDROID_STATION_FACTORY = ANDROID_STATION_BUILDER.build(null);
ANDROID_STATION_FACTORY.setRegistryName(BlockAndroidStation.REGISTRY_NAME);
blockRegistryEvent.getRegistry().register(ANDROID_STATION_FACTORY);
public static void tiles(final RegistryEvent.Register<BlockEntityType<?>> event) {
Registry.BlockEntities.register(event);
}
@SubscribeEvent
public static void onMenuTypeRegistry(final RegistryEvent.Register<MenuType<?>> blockRegistryEvent) {
blockRegistryEvent.getRegistry().register(ANDROID_STATION_MENU_TYPE);
MenuScreens.register(ANDROID_STATION_MENU_TYPE, AndroidStationScreen::new);
public static void menus(final RegistryEvent.Register<MenuType<?>> event) {
Registry.Menus.register(event);
}
}
}

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;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
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.Shapes;
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 javax.annotation.Nullable;
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);
public BlockAndroidStation() {
super();
this.setRegistryName(REGISTRY_NAME);
this.setRegistryName(Registry.Names.ANDROID_STATION);
}
@Override
@ -40,6 +38,6 @@ public class BlockAndroidStation extends BlockMatteryMachineBase implements Enti
@Nullable
@Override
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;
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.entity.LivingEntity;
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.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.energy.CapabilityEnergy;
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
import ru.dbotthepony.mc.otm.Registry;
import ru.dbotthepony.mc.otm.capability.IAndroidCapability;
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
import ru.dbotthepony.mc.otm.capability.MatteryMachineEnergyStorage;
import ru.dbotthepony.mc.otm.menu.AndroidStationMenu;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.math.BigDecimal;
import java.util.List;
@ -36,7 +29,7 @@ public class BlockEntityAndroidStation extends BlockEntityMatteryPoweredMachine
}
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_resolver = LazyOptional.of(() -> energy);
}

View File

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