diff --git a/src/main/java/net/montoyo/wd/WebDisplays.java b/src/main/java/net/montoyo/wd/WebDisplays.java index 4c7bb0a..310cfe0 100644 --- a/src/main/java/net/montoyo/wd/WebDisplays.java +++ b/src/main/java/net/montoyo/wd/WebDisplays.java @@ -34,10 +34,12 @@ import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.server.ServerStoppingEvent; import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.montoyo.wd.block.BlockKeyboardRight; import net.montoyo.wd.block.BlockPeripheral; import net.montoyo.wd.block.BlockScreen; @@ -45,8 +47,12 @@ import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.config.ModConfig; import net.montoyo.wd.core.*; import net.montoyo.wd.entity.TileEntityScreen; +import net.montoyo.wd.init.BlockInit; +import net.montoyo.wd.init.ItemInit; +import net.montoyo.wd.init.TileInit; import net.montoyo.wd.item.*; import net.montoyo.wd.miniserv.server.Server; +import net.montoyo.wd.net.Messages; import net.montoyo.wd.net.client.CMessageServerInfo; import net.montoyo.wd.utilities.Log; import net.montoyo.wd.utilities.Util; @@ -73,21 +79,6 @@ public class WebDisplays { public static final Gson GSON = new Gson(); public static final ResourceLocation CAPABILITY = new ResourceLocation("webdisplays", "customdatacap"); - //Blocks - public BlockScreen blockScreen; - public BlockPeripheral blockPeripheral; - public BlockKeyboardRight blockKbRight; - - //Items - public ItemScreenConfigurator itemScreenCfg; - public ItemOwnershipThief itemOwnerThief; - public ItemLinker itemLinker; - public ItemMinePad2 itemMinePad; - public ItemUpgrade itemUpgrade; - public ItemLaserPointer itemLaserPointer; - public ItemCraftComponent itemCraftComp; - public ItemMulti itemAdvIcon; - //Sounds public SoundEvent soundTyping; public SoundEvent soundUpgradeAdd; @@ -162,40 +153,17 @@ public class WebDisplays { padResY = config.main.padHeight; padResX = padResY * PAD_RATIO; - //Init blocks - blockScreen = new BlockScreen(); - blockScreen.makeItemBlock(); - - blockPeripheral = new BlockPeripheral(); - blockPeripheral.makeItemBlock(); - - blockKbRight = new BlockKeyboardRight(); - - //Init items - itemScreenCfg = new ItemScreenConfigurator(); - itemOwnerThief = new ItemOwnershipThief(); - itemLinker = new ItemLinker(); - itemMinePad = new ItemMinePad2(); - itemUpgrade = new ItemUpgrade(); - itemLaserPointer = new ItemLaserPointer(); - itemCraftComp = new ItemCraftComponent(); - - itemAdvIcon = new ItemMulti(AdvancementIcon.class, new Item.Properties()); - itemAdvIcon.setRegistryName("advicon"); - + IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); + ItemInit.init(bus); + BlockInit.init(bus); PROXY.preInit(); MinecraftForge.EVENT_BUS.register(this); - //Register tile entities - Registry.register(Registry.BLOCK_ENTITY_TYPE, TileEntityScreen.class, new ResourceLocation("webdisplays", "screen")); - for(DefaultPeripheral dp: DefaultPeripheral.values()) { - if(dp.getTEClass() != null) - GameRegistry.registerTileEntity(dp.getTEClass(), new ResourceLocation("webdisplays", dp.getName())); - } - //Other things PROXY.init(); + TileInit.registerPeripherals(); + PROXY.postInit(); hasOC = ModList.get().isLoaded("opencomputers"); hasCC = ModList.get().isLoaded("computercraft"); @@ -218,17 +186,6 @@ public class WebDisplays { } } - @SubscribeEvent - public void onRegisterBlocks(RegistryEvent.Register ev) { - ev.getRegistry().registerAll(blockScreen, blockPeripheral, blockKbRight); - } - - @SubscribeEvent - public void onRegisterItems(RegistryEvent.Register ev) { - ev.getRegistry().registerAll(blockScreen.getItem(), blockPeripheral.getItem()); - ev.getRegistry().registerAll(itemScreenCfg, itemOwnerThief, itemLinker, itemMinePad, itemUpgrade, itemLaserPointer, itemCraftComp, itemAdvIcon); - } - @SubscribeEvent public void onRegisterSounds(RegistryEvent.Register ev) { soundTyping = registerSound(ev, "keyboardType"); @@ -298,7 +255,7 @@ public class WebDisplays { if(!ev.getEntityItem().getLevel().isClientSide) { ItemStack is = ev.getEntityItem().getItem(); - if(is.getItem() == itemMinePad) { + if(is.getItem() == ItemInit.itemMinePad.get()) { CompoundTag tag = is.getTag(); if(tag == null) { @@ -316,7 +273,7 @@ public class WebDisplays { @SubscribeEvent public void onPlayerCraft(PlayerEvent.ItemCraftedEvent ev) { - if(doHardRecipe && ev.getCrafting().getItem() == itemCraftComp && (CraftComponent.EXTENSION_CARD.makeItemStack().is(ev.getCrafting().getItem()))) { + if(doHardRecipe && ev.getCrafting().getItem() == ItemInit.itemCraftComp.get() && (CraftComponent.EXTENSION_CARD.makeItemStack().is(ev.getCrafting().getItem()))) { if((ev.getPlayer() instanceof ServerPlayer && !hasPlayerAdvancement((ServerPlayer) ev.getPlayer(), ADV_PAD_BREAK)) || PROXY.hasClientPlayerAdvancement(ADV_PAD_BREAK) != HasAdvancement.YES) { ev.getCrafting().setDamageValue(CraftComponent.BAD_EXTENSION_CARD.ordinal()); @@ -334,7 +291,7 @@ public class WebDisplays { @SubscribeEvent public void onLogIn(PlayerEvent.PlayerLoggedInEvent ev) { if(!ev.getPlayer().getLevel().isClientSide && ev.getPlayer() instanceof ServerPlayer) { - WebDisplays.NET_HANDLER.sendTo(new CMessageServerInfo(miniservPort), (ServerPlayer) ev.getPlayer()); + Messages.INSTANCE.sendTo(new CMessageServerInfo(miniservPort), (ServerPlayer) ev.getPlayer()); IWDDCapability cap = (IWDDCapability) ev.getPlayer().getCapability(WDDCapability.Provider.cap, null); if(cap == null) diff --git a/src/main/java/net/montoyo/wd/block/BlockScreen.java b/src/main/java/net/montoyo/wd/block/BlockScreen.java index 4774bad..efb7a7d 100644 --- a/src/main/java/net/montoyo/wd/block/BlockScreen.java +++ b/src/main/java/net/montoyo/wd/block/BlockScreen.java @@ -26,6 +26,8 @@ import net.minecraft.util.text.TextFormatting; import net.minecraft.world.Explosion; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraftforge.common.property.ExtendedBlockState; @@ -375,26 +377,20 @@ public class BlockScreen extends WDBlockContainer { } @Override - protected ItemPeripheral createItemBlock() { + protected BlockItem createItemBlock() { return new ItemBlockScreen(this); } - private static class ItemBlockScreen extends ItemBlock implements WDItem { + private static class ItemBlockScreen extends BlockItem implements WDItem { public ItemBlockScreen(BlockScreen screen) { - super(screen); + super(screen, new Properties()); } @Nullable @Override public String getWikiName(@Nonnull ItemStack is) { - return "Screen"; - } - - @Override - public void addInformation(@Nullable ItemStack is, @Nullable World world, @Nullable List tt, @Nullable ITooltipFlag ttFlags) { - super.addInformation(is, world, tt, ttFlags); - WDItem.addInformation(tt); + return is.getItem().getName(is).getString(); } } diff --git a/src/main/java/net/montoyo/wd/block/WDBlockContainer.java b/src/main/java/net/montoyo/wd/block/WDBlockContainer.java index 378e2e6..b5832ca 100644 --- a/src/main/java/net/montoyo/wd/block/WDBlockContainer.java +++ b/src/main/java/net/montoyo/wd/block/WDBlockContainer.java @@ -23,7 +23,7 @@ public abstract class WDBlockContainer extends BaseContainerBlockEntity { // setRegistryName(name); } - protected abstract ItemPeripheral createItemBlock(); + protected abstract BlockItem createItemBlock(); public void makeItemBlock() { if(itemBlock != null) diff --git a/src/main/java/net/montoyo/wd/init/BlockInit.java b/src/main/java/net/montoyo/wd/init/BlockInit.java new file mode 100644 index 0000000..3fcf084 --- /dev/null +++ b/src/main/java/net/montoyo/wd/init/BlockInit.java @@ -0,0 +1,40 @@ +package net.montoyo.wd.init; + +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; +import net.montoyo.wd.block.BlockKeyboardRight; +import net.montoyo.wd.block.BlockPeripheral; +import net.montoyo.wd.block.BlockScreen; +import net.montoyo.wd.core.WDCreativeTab; + +import java.util.function.Function; +import java.util.function.Supplier; + +public class BlockInit { + + public static DeferredRegister BLOCKS = DeferredRegister.create(Block.class, "webdisplays"); + + public static void init(IEventBus bus) { + BLOCKS.register(bus); + } + + private static RegistryObject registerBlock(String name, Supplier blockSupplier) { + return registerBlock(name, blockSupplier, b -> () -> new BlockItem(blockSupplier.get(), new Item.Properties().tab(WDCreativeTab.TAB_REDSTONE))); + } + + private static RegistryObject registerBlock(String name, Supplier block, Function, Supplier> item) { + var reg = BLOCKS.register(name, block); + ItemInit.ITEMS.register(name, () -> item.apply(reg).get()); + return reg; + } + + public static final RegistryObject blockScreen = registerBlock("screen_block", () -> new BlockScreen()); + + public static final RegistryObject blockPeripheral = registerBlock("peripheral_block", () -> new BlockPeripheral()); + + public static final RegistryObject blockKbRight = registerBlock("kb_right_block", () -> new BlockKeyboardRight()); +} diff --git a/src/main/java/net/montoyo/wd/init/ItemInit.java b/src/main/java/net/montoyo/wd/init/ItemInit.java new file mode 100644 index 0000000..62dd2c8 --- /dev/null +++ b/src/main/java/net/montoyo/wd/init/ItemInit.java @@ -0,0 +1,35 @@ +package net.montoyo.wd.init; + +import net.minecraft.world.item.Item; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; +import net.montoyo.wd.item.*; + +import java.util.function.Supplier; + +public class ItemInit { + + public static DeferredRegister ITEMS = DeferredRegister.create(Item.class, "webdisplays"); + + public static void init(IEventBus bus) { + ITEMS.register(bus); + } + + public static RegistryObject register(String name, Supplier item) { + return ITEMS.register(name, item); + } + + static RegistryObject register(Supplier c, String id) { + return register(id, c); + } + + public static final RegistryObject itemScreenCfg = register("itemScreenConfig", () -> new ItemScreenConfigurator(new Item.Properties())); + public static final RegistryObject itemOwnerThief = register("itemOwnerThief", () -> new ItemOwnershipThief(new Item.Properties())); + public static final RegistryObject itemLinker = register("itemLinker", () -> new ItemLinker(new Item.Properties())); + public static final RegistryObject itemMinePad = register("itemMinePad", () -> new ItemMinePad2(new Item.Properties())); + public static final RegistryObject itemUpgrade = register("itemUpgrade", ItemUpgrade::new); + public static final RegistryObject itemCraftComp = register("itemCraftComp", () -> new ItemCraftComponent(new Item.Properties())); + public static final RegistryObject itemLaserPointer = register("itemLaserPointer", () -> new ItemLaserPointer(new Item.Properties())); + +} diff --git a/src/main/java/net/montoyo/wd/init/TileInit.java b/src/main/java/net/montoyo/wd/init/TileInit.java new file mode 100644 index 0000000..9f89ce5 --- /dev/null +++ b/src/main/java/net/montoyo/wd/init/TileInit.java @@ -0,0 +1,28 @@ +package net.montoyo.wd.init; + +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.common.extensions.IForgeBlockEntity; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.montoyo.wd.core.DefaultPeripheral; +import net.montoyo.wd.entity.TileEntityScreen; + +public class TileInit { + + public static final DeferredRegister> TILE_TYPES = DeferredRegister + .create(ForgeRegistries.BLOCK_ENTITIES, "webdisplays"); + + //Register tile entities + public static final BlockEntityType SCREEN_BLOCK_ENTITY = TILE_TYPES.register("screen", () -> BlockEntityType.Builder.of(TileEntityScreen::new, BlockInit.blockScreen).build(null)); + + public static void registerPeripherals() { + for (DefaultPeripheral dp : DefaultPeripheral.values()) { + if (dp.getTEClass() != null) + TILE_TYPES.register(dp.name(), () -> BlockEntityType.Builder.of(dp.getTEClass(), BlockInit.blockPeripheral.get()).build(null)); + } + } +}