From 613a28a5af7177c1f67ca0acf33afbb5ff297349 Mon Sep 17 00:00:00 2001 From: SquidDev Date: Sat, 27 Jun 2020 10:23:45 +0100 Subject: [PATCH] Switch to Forge's DeferredRegister Well, mostly. We currently don't do recipe serializers as I'm a little too lazy. For items, blocks and TE types this does make registration nicer - we've some helper functions which help reduce duplication. Some types (containers, TEs, etc..) are a little less nice, as we now must define the registry object (i.e. the WhateverType) in a separate class to the class it constructs. However, it's probably a worthwhile price to pay. --- .../dan200/computercraft/ComputerCraft.java | 67 +-- .../api/pocket/AbstractPocketUpgrade.java | 64 ++- .../api/turtle/AbstractTurtleUpgrade.java | 69 +++- .../computercraft/client/ClientRegistry.java | 11 +- .../proxy/ComputerCraftProxyClient.java | 40 +- .../client/render/CableHighlightRenderer.java | 3 +- .../dan200/computercraft/data/LootTables.java | 32 +- .../dan200/computercraft/data/Recipes.java | 45 +- .../java/dan200/computercraft/data/Tags.java | 15 +- .../dan200/computercraft/shared/Config.java | 2 +- .../dan200/computercraft/shared/Registry.java | 387 +++++++++--------- .../shared/common/BlockGeneric.java | 9 +- .../shared/common/ContainerHeldItem.java | 8 +- .../shared/computer/blocks/BlockComputer.java | 5 +- .../computer/blocks/BlockComputerBase.java | 19 +- .../computer/blocks/TileCommandComputer.java | 7 - .../shared/computer/blocks/TileComputer.java | 12 - .../computer/blocks/TileComputerBase.java | 4 +- .../computer/inventory/ContainerComputer.java | 11 +- .../inventory/ContainerComputerBase.java | 2 +- .../inventory/ContainerViewComputer.java | 9 +- .../computer/items/ComputerItemFactory.java | 8 +- .../integration/jei/JEIComputerCraft.java | 11 +- .../shared/media/items/ItemDisk.java | 7 +- .../shared/media/items/ItemPrintout.java | 14 +- .../shared/media/items/ItemTreasureDisk.java | 6 +- .../peripheral/diskdrive/BlockDiskDrive.java | 7 +- .../diskdrive/ContainerDiskDrive.java | 10 +- .../peripheral/diskdrive/TileDiskDrive.java | 20 +- .../peripheral/modem/wired/BlockCable.java | 28 +- .../modem/wired/BlockWiredModemFull.java | 3 +- .../modem/wired/ItemBlockCable.java | 8 +- .../peripheral/modem/wired/TileCable.java | 20 +- .../modem/wired/TileWiredModemFull.java | 17 +- .../wired/WiredModemLocalPeripheral.java | 4 +- .../modem/wireless/BlockWirelessModem.java | 11 +- .../modem/wireless/TileWirelessModem.java | 13 - .../peripheral/monitor/BlockMonitor.java | 9 +- .../peripheral/monitor/TileMonitor.java | 14 +- .../peripheral/printer/BlockPrinter.java | 7 +- .../peripheral/printer/ContainerPrinter.java | 10 +- .../peripheral/printer/TilePrinter.java | 15 +- .../peripheral/speaker/BlockSpeaker.java | 3 +- .../peripheral/speaker/TileSpeaker.java | 13 +- .../inventory/ContainerPocketComputer.java | 12 +- .../pocket/items/ItemPocketComputer.java | 4 +- .../items/PocketComputerItemFactory.java | 6 +- .../pocket/peripherals/PocketModem.java | 6 +- .../pocket/peripherals/PocketSpeaker.java | 4 +- .../shared/turtle/blocks/BlockTurtle.java | 15 +- .../shared/turtle/blocks/TileTurtle.java | 14 +- .../shared/turtle/core/TurtlePlayer.java | 28 +- .../turtle/inventory/ContainerTurtle.java | 11 +- .../turtle/items/TurtleItemFactory.java | 6 +- .../upgrades/TurtleInventoryCrafting.java | 2 +- .../shared/turtle/upgrades/TurtleModem.java | 8 +- .../shared/turtle/upgrades/TurtleSpeaker.java | 4 +- .../shared/util/CreativeTabMain.java | 3 +- .../shared/util/FakeNetHandler.java | 64 +-- .../shared/util/FixedPointTileEntityType.java | 60 +++ .../shared/util/ImpostorRecipe.java | 2 +- .../shared/util/ImpostorShapelessRecipe.java | 4 +- .../shared/util/InventoryDelegate.java | 2 +- .../shared/util/NamedTileEntityType.java | 75 ---- .../shared/util/ValidatingSlot.java | 4 +- .../computercraft/shared/util/WorldUtil.java | 2 +- 66 files changed, 670 insertions(+), 745 deletions(-) create mode 100644 src/main/java/dan200/computercraft/shared/util/FixedPointTileEntityType.java delete mode 100644 src/main/java/dan200/computercraft/shared/util/NamedTileEntityType.java diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 22c039874..f5e540126 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -9,27 +9,12 @@ import dan200.computercraft.core.apis.http.options.Action; import dan200.computercraft.core.apis.http.options.AddressRule; import dan200.computercraft.shared.Config; -import dan200.computercraft.shared.computer.blocks.BlockComputer; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.core.ClientComputerRegistry; import dan200.computercraft.shared.computer.core.ServerComputerRegistry; -import dan200.computercraft.shared.computer.items.ItemComputer; -import dan200.computercraft.shared.media.items.ItemDisk; -import dan200.computercraft.shared.media.items.ItemPrintout; -import dan200.computercraft.shared.media.items.ItemTreasureDisk; -import dan200.computercraft.shared.peripheral.diskdrive.BlockDiskDrive; -import dan200.computercraft.shared.peripheral.modem.wired.BlockCable; -import dan200.computercraft.shared.peripheral.modem.wired.BlockWiredModemFull; -import dan200.computercraft.shared.peripheral.modem.wired.ItemBlockCable; -import dan200.computercraft.shared.peripheral.modem.wireless.BlockWirelessModem; -import dan200.computercraft.shared.peripheral.monitor.BlockMonitor; import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer; -import dan200.computercraft.shared.peripheral.printer.BlockPrinter; -import dan200.computercraft.shared.peripheral.speaker.BlockSpeaker; -import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import dan200.computercraft.shared.pocket.peripherals.PocketModem; import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker; -import dan200.computercraft.shared.turtle.blocks.BlockTurtle; -import dan200.computercraft.shared.turtle.items.ItemTurtle; import dan200.computercraft.shared.turtle.upgrades.*; import net.minecraft.resources.IReloadableResourceManager; import net.minecraft.util.ResourceLocation; @@ -117,53 +102,6 @@ public final class ComputerCraft public static final int terminalWidth_pocketComputer = 26; public static final int terminalHeight_pocketComputer = 20; - // Blocks and Items - public static final class Blocks - { - public static BlockComputer computerNormal; - public static BlockComputer computerAdvanced; - public static BlockComputer computerCommand; - - public static BlockTurtle turtleNormal; - public static BlockTurtle turtleAdvanced; - - public static BlockSpeaker speaker; - public static BlockDiskDrive diskDrive; - public static BlockPrinter printer; - - public static BlockMonitor monitorNormal; - public static BlockMonitor monitorAdvanced; - - public static BlockWirelessModem wirelessModemNormal; - public static BlockWirelessModem wirelessModemAdvanced; - - public static BlockWiredModemFull wiredModemFull; - public static BlockCable cable; - } - - public static final class Items - { - public static ItemComputer computerNormal; - public static ItemComputer computerAdvanced; - public static ItemComputer computerCommand; - - public static ItemPocketComputer pocketComputerNormal; - public static ItemPocketComputer pocketComputerAdvanced; - - public static ItemTurtle turtleNormal; - public static ItemTurtle turtleAdvanced; - - public static ItemDisk disk; - public static ItemTreasureDisk treasureDisk; - - public static ItemPrintout printedPage; - public static ItemPrintout printedPages; - public static ItemPrintout printedBook; - - public static ItemBlockCable.Cable cable; - public static ItemBlockCable.WiredModem wiredModem; - } - public static final class TurtleUpgrades { public static TurtleModem wirelessModemNormal; @@ -194,7 +132,8 @@ public static final class PocketUpgrades public ComputerCraft() { - Config.load(); + Config.setup(); + Registry.setup(); } public static InputStream getResourceFile( String domain, String subPath ) diff --git a/src/main/java/dan200/computercraft/api/pocket/AbstractPocketUpgrade.java b/src/main/java/dan200/computercraft/api/pocket/AbstractPocketUpgrade.java index 12dff18c6..33d756866 100644 --- a/src/main/java/dan200/computercraft/api/pocket/AbstractPocketUpgrade.java +++ b/src/main/java/dan200/computercraft/api/pocket/AbstractPocketUpgrade.java @@ -5,12 +5,15 @@ */ package dan200.computercraft.api.pocket; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Util; +import net.minecraftforge.common.util.NonNullSupplier; import javax.annotation.Nonnull; +import java.util.function.Supplier; /** * A base class for {@link IPocketUpgrade}s. @@ -21,23 +24,48 @@ public abstract class AbstractPocketUpgrade implements IPocketUpgrade { private final ResourceLocation id; private final String adjective; - private final ItemStack stack; + private final NonNullSupplier stack; - protected AbstractPocketUpgrade( ResourceLocation id, String adjective, ItemStack stack ) + protected AbstractPocketUpgrade( ResourceLocation id, String adjective, NonNullSupplier stack ) { this.id = id; this.adjective = adjective; this.stack = stack; } + protected AbstractPocketUpgrade( ResourceLocation id, NonNullSupplier item ) + { + this( id, Util.makeTranslationKey( "upgrade", id ) + ".adjective", item ); + } + + protected AbstractPocketUpgrade( ResourceLocation id, String adjective, ItemStack stack ) + { + this( id, adjective, () -> stack ); + } + + protected AbstractPocketUpgrade( ResourceLocation id, ItemStack stack ) + { + this( id, () -> stack ); + } + protected AbstractPocketUpgrade( ResourceLocation id, String adjective, IItemProvider item ) { - this( id, adjective, new ItemStack( item ) ); + this( id, adjective, new CachedStack( () -> item ) ); } protected AbstractPocketUpgrade( ResourceLocation id, IItemProvider item ) { - this( id, Util.makeTranslationKey( "upgrade", id ) + ".adjective", new ItemStack( item ) ); + this( id, new CachedStack( () -> item ) ); + } + + protected AbstractPocketUpgrade( ResourceLocation id, String adjective, Supplier item ) + { + this( id, adjective, new CachedStack( item ) ); + } + + protected AbstractPocketUpgrade( ResourceLocation id, Supplier item ) + { + this( id, new CachedStack( item ) ); } @Nonnull @@ -58,6 +86,32 @@ public final String getUnlocalisedAdjective() @Override public final ItemStack getCraftingItem() { - return stack; + return stack.get(); + } + + /** + * Caches the construction of an item stack. + * + * @see dan200.computercraft.api.turtle.AbstractTurtleUpgrade For explanation of this class. + */ + private static final class CachedStack implements NonNullSupplier + { + private final Supplier provider; + private Item item; + private ItemStack stack; + + CachedStack( Supplier provider ) + { + this.provider = provider; + } + + @Nonnull + @Override + public ItemStack get() + { + Item item = provider.get().asItem(); + if( item == this.item && stack != null ) return stack; + return stack = new ItemStack( this.item = item ); + } } } diff --git a/src/main/java/dan200/computercraft/api/turtle/AbstractTurtleUpgrade.java b/src/main/java/dan200/computercraft/api/turtle/AbstractTurtleUpgrade.java index 15bb43832..b3c92271c 100644 --- a/src/main/java/dan200/computercraft/api/turtle/AbstractTurtleUpgrade.java +++ b/src/main/java/dan200/computercraft/api/turtle/AbstractTurtleUpgrade.java @@ -5,12 +5,15 @@ */ package dan200.computercraft.api.turtle; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IItemProvider; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Util; +import net.minecraftforge.common.util.NonNullSupplier; import javax.annotation.Nonnull; +import java.util.function.Supplier; /** * A base class for {@link ITurtleUpgrade}s. @@ -22,9 +25,9 @@ public abstract class AbstractTurtleUpgrade implements ITurtleUpgrade private final ResourceLocation id; private final TurtleUpgradeType type; private final String adjective; - private final ItemStack stack; + private final NonNullSupplier stack; - protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, String adjective, ItemStack stack ) + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, String adjective, NonNullSupplier stack ) { this.id = id; this.type = type; @@ -32,19 +35,39 @@ protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, St this.stack = stack; } - protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, String adjective, IItemProvider item ) - { - this( id, type, adjective, new ItemStack( item ) ); - } - - protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, ItemStack stack ) + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, NonNullSupplier stack ) { this( id, type, Util.makeTranslationKey( "upgrade", id ) + ".adjective", stack ); } + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, String adjective, ItemStack stack ) + { + this( id, type, adjective, () -> stack ); + } + + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, ItemStack stack ) + { + this( id, type, () -> stack ); + } + + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, String adjective, IItemProvider item ) + { + this( id, type, adjective, new CachedStack( () -> item ) ); + } + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, IItemProvider item ) { - this( id, type, new ItemStack( item ) ); + this( id, type, new CachedStack( () -> item ) ); + } + + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, String adjective, Supplier item ) + { + this( id, type, adjective, new CachedStack( item ) ); + } + + protected AbstractTurtleUpgrade( ResourceLocation id, TurtleUpgradeType type, Supplier item ) + { + this( id, type, new CachedStack( item ) ); } @Nonnull @@ -72,6 +95,32 @@ public final TurtleUpgradeType getType() @Override public final ItemStack getCraftingItem() { - return stack; + return stack.get(); + } + + /** + * A supplier which converts an item into an item stack. + * + * Constructing item stacks is somewhat expensive due to attaching capabilities. We cache it if given a consistent item. + */ + private static final class CachedStack implements NonNullSupplier + { + private final Supplier provider; + private Item item; + private ItemStack stack; + + CachedStack( Supplier provider ) + { + this.provider = provider; + } + + @Nonnull + @Override + public ItemStack get() + { + Item item = provider.get().asItem(); + if( item == this.item && stack != null ) return stack; + return stack = new ItemStack( this.item = item ); + } } } diff --git a/src/main/java/dan200/computercraft/client/ClientRegistry.java b/src/main/java/dan200/computercraft/client/ClientRegistry.java index 67f9f776a..57359e00c 100644 --- a/src/main/java/dan200/computercraft/client/ClientRegistry.java +++ b/src/main/java/dan200/computercraft/client/ClientRegistry.java @@ -7,6 +7,7 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.client.render.TurtleModelLoader; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.media.items.ItemDisk; import dan200.computercraft.shared.media.items.ItemTreasureDisk; @@ -109,7 +110,7 @@ public static void onModelBakeEvent( ModelBakeEvent event ) @SubscribeEvent public static void onItemColours( ColorHandlerEvent.Item event ) { - if( ComputerCraft.Items.disk == null || ComputerCraft.Blocks.turtleNormal == null ) + if( Registry.ModItems.DISK == null || Registry.ModBlocks.TURTLE_NORMAL == null ) { ComputerCraft.log.warn( "Block/item registration has failed. Skipping registration of item colours." ); return; @@ -117,12 +118,12 @@ public static void onItemColours( ColorHandlerEvent.Item event ) event.getItemColors().register( ( stack, layer ) -> layer == 1 ? ((ItemDisk) stack.getItem()).getColour( stack ) : 0xFFFFFF, - ComputerCraft.Items.disk + Registry.ModItems.DISK.get() ); event.getItemColors().register( ( stack, layer ) -> layer == 1 ? ItemTreasureDisk.getColour( stack ) : 0xFFFFFF, - ComputerCraft.Items.treasureDisk + Registry.ModItems.TREASURE_DISK.get() ); event.getItemColors().register( ( stack, layer ) -> { @@ -139,12 +140,12 @@ public static void onItemColours( ColorHandlerEvent.Item event ) return light == -1 ? Colour.BLACK.getHex() : light; } } - }, ComputerCraft.Items.pocketComputerNormal, ComputerCraft.Items.pocketComputerAdvanced ); + }, Registry.ModItems.POCKET_COMPUTER_NORMAL.get(), Registry.ModItems.POCKET_COMPUTER_ADVANCED.get() ); // Setup turtle colours event.getItemColors().register( ( stack, tintIndex ) -> tintIndex == 0 ? ((IColouredItem) stack.getItem()).getColour( stack ) : 0xFFFFFF, - ComputerCraft.Blocks.turtleNormal, ComputerCraft.Blocks.turtleAdvanced + Registry.ModBlocks.TURTLE_NORMAL.get(), Registry.ModBlocks.TURTLE_ADVANCED.get() ); } } diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 57911646b..70147c4c6 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -10,17 +10,11 @@ import dan200.computercraft.client.render.TileEntityMonitorRenderer; import dan200.computercraft.client.render.TileEntityTurtleRenderer; import dan200.computercraft.client.render.TurtlePlayerRenderer; -import dan200.computercraft.shared.common.ContainerHeldItem; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.inventory.ContainerComputer; import dan200.computercraft.shared.computer.inventory.ContainerViewComputer; -import dan200.computercraft.shared.peripheral.diskdrive.ContainerDiskDrive; import dan200.computercraft.shared.peripheral.monitor.ClientMonitor; -import dan200.computercraft.shared.peripheral.monitor.TileMonitor; -import dan200.computercraft.shared.peripheral.printer.ContainerPrinter; import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; -import dan200.computercraft.shared.turtle.blocks.TileTurtle; -import dan200.computercraft.shared.turtle.core.TurtlePlayer; -import dan200.computercraft.shared.turtle.inventory.ContainerTurtle; import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderTypeLookup; @@ -41,36 +35,36 @@ public static void setupClient( FMLClientSetupEvent event ) registerContainers(); // While turtles themselves are not transparent, their upgrades may be. - RenderTypeLookup.setRenderLayer( ComputerCraft.Blocks.turtleNormal, RenderType.getTranslucent() ); - RenderTypeLookup.setRenderLayer( ComputerCraft.Blocks.turtleAdvanced, RenderType.getTranslucent() ); + RenderTypeLookup.setRenderLayer( Registry.ModBlocks.TURTLE_NORMAL.get(), RenderType.getTranslucent() ); + RenderTypeLookup.setRenderLayer( Registry.ModBlocks.TURTLE_ADVANCED.get(), RenderType.getTranslucent() ); // Monitors' textures have transparent fronts and so count as cutouts. - RenderTypeLookup.setRenderLayer( ComputerCraft.Blocks.monitorNormal, RenderType.getCutout() ); - RenderTypeLookup.setRenderLayer( ComputerCraft.Blocks.monitorAdvanced, RenderType.getCutout() ); + RenderTypeLookup.setRenderLayer( Registry.ModBlocks.MONITOR_NORMAL.get(), RenderType.getCutout() ); + RenderTypeLookup.setRenderLayer( Registry.ModBlocks.MONITOR_ADVANCED.get(), RenderType.getCutout() ); // Setup TESRs - ClientRegistry.bindTileEntityRenderer( TileMonitor.FACTORY_NORMAL, TileEntityMonitorRenderer::new ); - ClientRegistry.bindTileEntityRenderer( TileMonitor.FACTORY_ADVANCED, TileEntityMonitorRenderer::new ); - ClientRegistry.bindTileEntityRenderer( TileTurtle.FACTORY_NORMAL, TileEntityTurtleRenderer::new ); - ClientRegistry.bindTileEntityRenderer( TileTurtle.FACTORY_ADVANCED, TileEntityTurtleRenderer::new ); + ClientRegistry.bindTileEntityRenderer( Registry.ModTiles.MONITOR_NORMAL.get(), TileEntityMonitorRenderer::new ); + ClientRegistry.bindTileEntityRenderer( Registry.ModTiles.MONITOR_ADVANCED.get(), TileEntityMonitorRenderer::new ); + ClientRegistry.bindTileEntityRenderer( Registry.ModTiles.TURTLE_NORMAL.get(), TileEntityTurtleRenderer::new ); + ClientRegistry.bindTileEntityRenderer( Registry.ModTiles.TURTLE_ADVANCED.get(), TileEntityTurtleRenderer::new ); // TODO: ClientRegistry.bindTileEntityRenderer( TileCable.FACTORY, x -> new TileEntityCableRenderer() ); - RenderingRegistry.registerEntityRenderingHandler( TurtlePlayer.TYPE, TurtlePlayerRenderer::new ); + RenderingRegistry.registerEntityRenderingHandler( Registry.ModEntities.TURTLE_PLAYER.get(), TurtlePlayerRenderer::new ); } private static void registerContainers() { // My IDE doesn't think so, but we do actually need these generics. - ScreenManager.>registerFactory( ContainerComputer.TYPE, GuiComputer::create ); - ScreenManager.>registerFactory( ContainerPocketComputer.TYPE, GuiComputer::createPocket ); - ScreenManager.registerFactory( ContainerTurtle.TYPE, GuiTurtle::new ); + ScreenManager.>registerFactory( Registry.ModContainers.COMPUTER.get(), GuiComputer::create ); + ScreenManager.>registerFactory( Registry.ModContainers.POCKET_COMPUTER.get(), GuiComputer::createPocket ); + ScreenManager.registerFactory( Registry.ModContainers.TURTLE.get(), GuiTurtle::new ); - ScreenManager.registerFactory( ContainerPrinter.TYPE, GuiPrinter::new ); - ScreenManager.registerFactory( ContainerDiskDrive.TYPE, GuiDiskDrive::new ); - ScreenManager.registerFactory( ContainerHeldItem.PRINTOUT_TYPE, GuiPrintout::new ); + ScreenManager.registerFactory( Registry.ModContainers.PRINTER.get(), GuiPrinter::new ); + ScreenManager.registerFactory( Registry.ModContainers.DISK_DRIVE.get(), GuiDiskDrive::new ); + ScreenManager.registerFactory( Registry.ModContainers.PRINTOUT.get(), GuiPrintout::new ); - ScreenManager.>registerFactory( ContainerViewComputer.TYPE, GuiComputer::createView ); + ScreenManager.>registerFactory( Registry.ModContainers.VIEW_COMPUTER.get(), GuiComputer::createView ); } @Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID, value = Dist.CLIENT ) diff --git a/src/main/java/dan200/computercraft/client/render/CableHighlightRenderer.java b/src/main/java/dan200/computercraft/client/render/CableHighlightRenderer.java index 42b6c90c3..f88700b98 100644 --- a/src/main/java/dan200/computercraft/client/render/CableHighlightRenderer.java +++ b/src/main/java/dan200/computercraft/client/render/CableHighlightRenderer.java @@ -8,6 +8,7 @@ import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.vertex.IVertexBuilder; import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.peripheral.modem.wired.BlockCable; import dan200.computercraft.shared.peripheral.modem.wired.CableShapes; import dan200.computercraft.shared.util.WorldUtil; @@ -51,7 +52,7 @@ public static void drawHighlight( DrawHighlightEvent.HighlightBlock event ) BlockState state = world.getBlockState( pos ); // We only care about instances with both cable and modem. - if( state.getBlock() != ComputerCraft.Blocks.cable || state.get( BlockCable.MODEM ).getFacing() == null || !state.get( BlockCable.CABLE ) ) + if( state.getBlock() != Registry.ModBlocks.CABLE.get() || state.get( BlockCable.MODEM ).getFacing() == null || !state.get( BlockCable.CABLE ) ) { return; } diff --git a/src/main/java/dan200/computercraft/data/LootTables.java b/src/main/java/dan200/computercraft/data/LootTables.java index 416516b1b..b85f0dea1 100644 --- a/src/main/java/dan200/computercraft/data/LootTables.java +++ b/src/main/java/dan200/computercraft/data/LootTables.java @@ -7,6 +7,7 @@ package dan200.computercraft.data; import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.data.BlockNamedEntityLootCondition; import dan200.computercraft.shared.data.HasComputerIdLootCondition; import dan200.computercraft.shared.data.PlayerCreativeLootCondition; @@ -17,6 +18,7 @@ import net.minecraft.world.storage.loot.*; import net.minecraft.world.storage.loot.conditions.Alternative; import net.minecraft.world.storage.loot.conditions.SurvivesExplosion; +import net.minecraftforge.fml.RegistryObject; import java.util.function.BiConsumer; @@ -30,19 +32,19 @@ public LootTables( DataGenerator generator ) @Override protected void registerLoot( BiConsumer add ) { - basicDrop( add, ComputerCraft.Blocks.diskDrive ); - basicDrop( add, ComputerCraft.Blocks.monitorNormal ); - basicDrop( add, ComputerCraft.Blocks.monitorAdvanced ); - basicDrop( add, ComputerCraft.Blocks.printer ); - basicDrop( add, ComputerCraft.Blocks.speaker ); - basicDrop( add, ComputerCraft.Blocks.wiredModemFull ); - basicDrop( add, ComputerCraft.Blocks.wirelessModemNormal ); - basicDrop( add, ComputerCraft.Blocks.wirelessModemAdvanced ); + basicDrop( add, Registry.ModBlocks.DISK_DRIVE ); + basicDrop( add, Registry.ModBlocks.MONITOR_NORMAL ); + basicDrop( add, Registry.ModBlocks.MONITOR_ADVANCED ); + basicDrop( add, Registry.ModBlocks.PRINTER ); + basicDrop( add, Registry.ModBlocks.SPEAKER ); + basicDrop( add, Registry.ModBlocks.WIRED_MODEM_FULL ); + basicDrop( add, Registry.ModBlocks.WIRELESS_MODEM_NORMAL ); + basicDrop( add, Registry.ModBlocks.WIRELESS_MODEM_ADVANCED ); - computerDrop( add, ComputerCraft.Blocks.computerNormal ); - computerDrop( add, ComputerCraft.Blocks.computerAdvanced ); - computerDrop( add, ComputerCraft.Blocks.turtleNormal ); - computerDrop( add, ComputerCraft.Blocks.turtleAdvanced ); + computerDrop( add, Registry.ModBlocks.COMPUTER_NORMAL ); + computerDrop( add, Registry.ModBlocks.COMPUTER_ADVANCED ); + computerDrop( add, Registry.ModBlocks.TURTLE_NORMAL ); + computerDrop( add, Registry.ModBlocks.TURTLE_ADVANCED ); add.accept( ComputerCraftProxyCommon.ForgeHandlers.LOOT_TREASURE_DISK, LootTable .builder() @@ -50,8 +52,9 @@ protected void registerLoot( BiConsumer add ) .build() ); } - private static void basicDrop( BiConsumer add, Block block ) + private static void basicDrop( BiConsumer add, RegistryObject wrapper ) { + Block block = wrapper.get(); add.accept( block.getLootTable(), LootTable .builder() .setParameterSet( LootParameterSets.BLOCK ) @@ -63,8 +66,9 @@ private static void basicDrop( BiConsumer add, Bloc ).build() ); } - private static void computerDrop( BiConsumer add, Block block ) + private static void computerDrop( BiConsumer add, RegistryObject wrapper ) { + Block block = wrapper.get(); add.accept( block.getLootTable(), LootTable .builder() .setParameterSet( LootParameterSets.BLOCK ) diff --git a/src/main/java/dan200/computercraft/data/Recipes.java b/src/main/java/dan200/computercraft/data/Recipes.java index 9523d80ac..a86ac212e 100644 --- a/src/main/java/dan200/computercraft/data/Recipes.java +++ b/src/main/java/dan200/computercraft/data/Recipes.java @@ -8,6 +8,7 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.data.Tags.CCTags; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.TurtleUpgrades; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; @@ -55,12 +56,12 @@ private void diskColours( @Nonnull Consumer add ) for( Colour colour : Colour.VALUES ) { ShapelessRecipeBuilder - .shapelessRecipe( ComputerCraft.Items.disk ) + .shapelessRecipe( Registry.ModItems.DISK.get() ) .addIngredient( Tags.Items.DUSTS_REDSTONE ) .addIngredient( Items.PAPER ) .addIngredient( DyeItem.getItem( ofColour( colour ) ) ) .setGroup( "computercraft:disk" ) - .addCriterion( "has_drive", inventoryChange( ComputerCraft.Blocks.diskDrive ) ) + .addCriterion( "has_drive", inventoryChange( Registry.ModBlocks.DISK_DRIVE.get() ) ) .build( RecipeWrapper.wrap( ImpostorShapelessRecipe.SERIALIZER, add, x -> x.putInt( "color", colour.getHex() ) @@ -140,7 +141,7 @@ private void pocketUpgrades( @Nonnull Consumer add ) private void basicRecipes( @Nonnull Consumer add ) { ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Items.cable, 6 ) + .shapedRecipe( Registry.ModItems.CABLE.get(), 6 ) .patternLine( " # " ) .patternLine( "#R#" ) .patternLine( " # " ) @@ -151,7 +152,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.computerNormal ) + .shapedRecipe( Registry.ModBlocks.COMPUTER_NORMAL.get() ) .patternLine( "###" ) .patternLine( "#R#" ) .patternLine( "#G#" ) @@ -162,7 +163,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.computerAdvanced ) + .shapedRecipe( Registry.ModBlocks.COMPUTER_ADVANCED.get() ) .patternLine( "###" ) .patternLine( "#R#" ) .patternLine( "#G#" ) @@ -173,7 +174,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.computerCommand ) + .shapedRecipe( Registry.ModBlocks.COMPUTER_COMMAND.get() ) .patternLine( "###" ) .patternLine( "#R#" ) .patternLine( "#G#" ) @@ -184,7 +185,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.diskDrive ) + .shapedRecipe( Registry.ModBlocks.DISK_DRIVE.get() ) .patternLine( "###" ) .patternLine( "#R#" ) .patternLine( "#R#" ) @@ -194,7 +195,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.monitorNormal ) + .shapedRecipe( Registry.ModBlocks.MONITOR_NORMAL.get() ) .patternLine( "###" ) .patternLine( "#G#" ) .patternLine( "###" ) @@ -204,7 +205,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.monitorAdvanced, 4 ) + .shapedRecipe( Registry.ModBlocks.MONITOR_ADVANCED.get(), 4 ) .patternLine( "###" ) .patternLine( "#G#" ) .patternLine( "###" ) @@ -214,7 +215,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Items.pocketComputerNormal ) + .shapedRecipe( Registry.ModItems.POCKET_COMPUTER_NORMAL.get() ) .patternLine( "###" ) .patternLine( "#A#" ) .patternLine( "#G#" ) @@ -226,7 +227,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Items.pocketComputerAdvanced ) + .shapedRecipe( Registry.ModItems.POCKET_COMPUTER_ADVANCED.get() ) .patternLine( "###" ) .patternLine( "#A#" ) .patternLine( "#G#" ) @@ -238,7 +239,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.printer ) + .shapedRecipe( Registry.ModBlocks.PRINTER.get() ) .patternLine( "###" ) .patternLine( "#R#" ) .patternLine( "#D#" ) @@ -249,7 +250,7 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.speaker ) + .shapedRecipe( Registry.ModBlocks.SPEAKER.get() ) .patternLine( "###" ) .patternLine( "#N#" ) .patternLine( "#R#" ) @@ -260,29 +261,29 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Items.wiredModem ) + .shapedRecipe( Registry.ModItems.WIRED_MODEM.get() ) .patternLine( "###" ) .patternLine( "#R#" ) .patternLine( "###" ) .key( '#', Tags.Items.STONE ) .key( 'R', Tags.Items.DUSTS_REDSTONE ) .addCriterion( "has_computer", inventoryChange( CCTags.COMPUTER ) ) - .addCriterion( "has_cable", inventoryChange( ComputerCraft.Items.cable ) ) + .addCriterion( "has_cable", inventoryChange( Registry.ModItems.CABLE.get() ) ) .build( add ); ShapelessRecipeBuilder - .shapelessRecipe( ComputerCraft.Blocks.wiredModemFull ) - .addIngredient( ComputerCraft.Items.wiredModem ) + .shapelessRecipe( Registry.ModBlocks.WIRED_MODEM_FULL.get() ) + .addIngredient( Registry.ModItems.WIRED_MODEM.get() ) .addCriterion( "has_modem", inventoryChange( CCTags.WIRED_MODEM ) ) .build( add, new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full_from" ) ); ShapelessRecipeBuilder - .shapelessRecipe( ComputerCraft.Items.wiredModem ) - .addIngredient( ComputerCraft.Blocks.wiredModemFull ) + .shapelessRecipe( Registry.ModItems.WIRED_MODEM.get() ) + .addIngredient( Registry.ModBlocks.WIRED_MODEM_FULL.get() ) .addCriterion( "has_modem", inventoryChange( CCTags.WIRED_MODEM ) ) .build( add, new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full_to" ) ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.wirelessModemNormal ) + .shapedRecipe( Registry.ModBlocks.WIRELESS_MODEM_NORMAL.get() ) .patternLine( "###" ) .patternLine( "#E#" ) .patternLine( "###" ) @@ -292,14 +293,14 @@ private void basicRecipes( @Nonnull Consumer add ) .build( add ); ShapedRecipeBuilder - .shapedRecipe( ComputerCraft.Blocks.wirelessModemAdvanced ) + .shapedRecipe( Registry.ModBlocks.WIRELESS_MODEM_ADVANCED.get() ) .patternLine( "###" ) .patternLine( "#E#" ) .patternLine( "###" ) .key( '#', Tags.Items.INGOTS_GOLD ) .key( 'E', Items.ENDER_EYE ) .addCriterion( "has_computer", inventoryChange( CCTags.COMPUTER ) ) - .addCriterion( "has_wireless", inventoryChange( ComputerCraft.Blocks.wirelessModemNormal ) ) + .addCriterion( "has_wireless", inventoryChange( Registry.ModBlocks.WIRELESS_MODEM_NORMAL.get() ) ) .build( add ); } diff --git a/src/main/java/dan200/computercraft/data/Tags.java b/src/main/java/dan200/computercraft/data/Tags.java index bc78e3e7b..d822d6150 100644 --- a/src/main/java/dan200/computercraft/data/Tags.java +++ b/src/main/java/dan200/computercraft/data/Tags.java @@ -7,6 +7,7 @@ package dan200.computercraft.data; import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import net.minecraft.data.DataGenerator; import net.minecraft.data.ItemTagsProvider; import net.minecraft.item.Item; @@ -35,14 +36,14 @@ public Tags( DataGenerator generator ) protected void registerTags() { getBuilder( COMPUTER ) - .add( ComputerCraft.Items.computerNormal ) - .add( ComputerCraft.Items.computerAdvanced ) - .add( ComputerCraft.Items.computerCommand ); - getBuilder( TURTLE ).add( ComputerCraft.Items.turtleNormal, ComputerCraft.Items.turtleAdvanced ); - getBuilder( WIRED_MODEM ).add( ComputerCraft.Items.wiredModem, ComputerCraft.Blocks.wiredModemFull.asItem() ); + .add( Registry.ModItems.COMPUTER_NORMAL.get() ) + .add( Registry.ModItems.COMPUTER_ADVANCED.get() ) + .add( Registry.ModItems.COMPUTER_COMMAND.get() ); + getBuilder( TURTLE ).add( Registry.ModItems.TURTLE_NORMAL.get(), Registry.ModItems.TURTLE_ADVANCED.get() ); + getBuilder( WIRED_MODEM ).add( Registry.ModItems.WIRED_MODEM.get(), Registry.ModItems.WIRED_MODEM_FULL.get() ); getBuilder( MONITOR ) - .add( ComputerCraft.Blocks.monitorNormal.asItem() ) - .add( ComputerCraft.Blocks.monitorAdvanced.asItem() ); + .add( Registry.ModItems.MONITOR_NORMAL.get() ) + .add( Registry.ModItems.MONITOR_ADVANCED.get() ); } private static Tag item( String name ) diff --git a/src/main/java/dan200/computercraft/shared/Config.java b/src/main/java/dan200/computercraft/shared/Config.java index 567f2dba3..7ccb2b99d 100644 --- a/src/main/java/dan200/computercraft/shared/Config.java +++ b/src/main/java/dan200/computercraft/shared/Config.java @@ -270,7 +270,7 @@ private Config() {} clientSpec = clientBuilder.build(); } - public static void load() + public static void setup() { ModLoadingContext.get().registerConfig( ModConfig.Type.SERVER, serverSpec ); ModLoadingContext.get().registerConfig( ModConfig.Type.CLIENT, clientSpec ); diff --git a/src/main/java/dan200/computercraft/shared/Registry.java b/src/main/java/dan200/computercraft/shared/Registry.java index e76c03b21..fe8a2d448 100644 --- a/src/main/java/dan200/computercraft/shared/Registry.java +++ b/src/main/java/dan200/computercraft/shared/Registry.java @@ -22,6 +22,10 @@ import dan200.computercraft.shared.media.items.ItemTreasureDisk; import dan200.computercraft.shared.media.recipes.DiskRecipe; import dan200.computercraft.shared.media.recipes.PrintoutRecipe; +import dan200.computercraft.shared.network.container.ComputerContainerData; +import dan200.computercraft.shared.network.container.ContainerData; +import dan200.computercraft.shared.network.container.HeldItemContainerData; +import dan200.computercraft.shared.network.container.ViewComputerContainerData; import dan200.computercraft.shared.peripheral.diskdrive.BlockDiskDrive; import dan200.computercraft.shared.peripheral.diskdrive.ContainerDiskDrive; import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive; @@ -49,10 +53,12 @@ import dan200.computercraft.shared.turtle.recipes.TurtleUpgradeRecipe; import dan200.computercraft.shared.turtle.upgrades.*; import dan200.computercraft.shared.util.CreativeTabMain; +import dan200.computercraft.shared.util.FixedPointTileEntityType; import dan200.computercraft.shared.util.ImpostorRecipe; import dan200.computercraft.shared.util.ImpostorShapelessRecipe; import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.BlockItem; @@ -60,12 +66,20 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.Items; import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; + +import java.util.function.BiFunction; +import java.util.function.Function; @Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD ) public final class Registry @@ -76,211 +90,153 @@ private Registry() { } - @SubscribeEvent - public static void registerBlocks( RegistryEvent.Register event ) + public static final class ModBlocks { - IForgeRegistry registry = event.getRegistry(); + static final DeferredRegister BLOCKS = new DeferredRegister<>( ForgeRegistries.BLOCKS, ComputerCraft.MOD_ID ); - // Computers - ComputerCraft.Blocks.computerNormal = new BlockComputer( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2.0f ), - ComputerFamily.NORMAL, TileComputer.FACTORY_NORMAL - ); + private static Block.Properties properties() + { + return Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ); + } - ComputerCraft.Blocks.computerAdvanced = new BlockComputer( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2.0f ), - ComputerFamily.ADVANCED, TileComputer.FACTORY_ADVANCED - ); + private static Block.Properties turtleProperties() + { + return Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2.5f ); + } - ComputerCraft.Blocks.computerCommand = new BlockComputer( + private static Block.Properties modemProperties() + { + return Block.Properties.create( Material.ROCK ).hardnessAndResistance( 1.5f ); + } + + public static final RegistryObject COMPUTER_NORMAL = BLOCKS.register( "computer_normal", + () -> new BlockComputer( properties(), ComputerFamily.NORMAL, ModTiles.COMPUTER_NORMAL ) ); + public static final RegistryObject COMPUTER_ADVANCED = BLOCKS.register( "computer_advanced", + () -> new BlockComputer( properties(), ComputerFamily.ADVANCED, ModTiles.COMPUTER_ADVANCED ) ); + + public static final RegistryObject COMPUTER_COMMAND = BLOCKS.register( "computer_command", () -> new BlockComputer( Block.Properties.create( Material.ROCK ).hardnessAndResistance( -1, 6000000.0F ), - ComputerFamily.COMMAND, TileCommandComputer.FACTORY - ); + ComputerFamily.COMMAND, ModTiles.COMPUTER_COMMAND + ) ); - registry.registerAll( - ComputerCraft.Blocks.computerNormal.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer_normal" ) ), - ComputerCraft.Blocks.computerAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer_advanced" ) ), - ComputerCraft.Blocks.computerCommand.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer_command" ) ) - ); + public static final RegistryObject TURTLE_NORMAL = BLOCKS.register( "turtle_normal", + () -> new BlockTurtle( turtleProperties(), ComputerFamily.NORMAL, ModTiles.TURTLE_NORMAL ) ); + public static final RegistryObject TURTLE_ADVANCED = BLOCKS.register( "turtle_advanced", + () -> new BlockTurtle( turtleProperties(), ComputerFamily.ADVANCED, ModTiles.TURTLE_ADVANCED ) ); - // Turtles - ComputerCraft.Blocks.turtleNormal = new BlockTurtle( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2.5f ), - ComputerFamily.NORMAL, TileTurtle.FACTORY_NORMAL - ); + public static final RegistryObject SPEAKER = BLOCKS.register( "speaker", () -> new BlockSpeaker( properties() ) ); + public static final RegistryObject DISK_DRIVE = BLOCKS.register( "disk_drive", () -> new BlockDiskDrive( properties() ) ); + public static final RegistryObject PRINTER = BLOCKS.register( "printer", () -> new BlockPrinter( properties() ) ); - ComputerCraft.Blocks.turtleAdvanced = new BlockTurtle( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2.5f ), - ComputerFamily.ADVANCED, TileTurtle.FACTORY_ADVANCED - ); + public static final RegistryObject MONITOR_NORMAL = BLOCKS.register( "monitor_normal", + () -> new BlockMonitor( properties(), ModTiles.MONITOR_NORMAL ) ); + public static final RegistryObject MONITOR_ADVANCED = BLOCKS.register( "monitor_advanced", + () -> new BlockMonitor( properties(), ModTiles.MONITOR_ADVANCED ) ); - registry.registerAll( - ComputerCraft.Blocks.turtleNormal.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_normal" ) ), - ComputerCraft.Blocks.turtleAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ) ) - ); + public static final RegistryObject WIRELESS_MODEM_NORMAL = BLOCKS.register( "wireless_modem_normal", + () -> new BlockWirelessModem( properties(), ModTiles.WIRELESS_MODEM_NORMAL ) ); + public static final RegistryObject WIRELESS_MODEM_ADVANCED = BLOCKS.register( "wireless_modem_advanced", + () -> new BlockWirelessModem( properties(), ModTiles.WIRELESS_MODEM_ADVANCED ) ); - // Peripherals - ComputerCraft.Blocks.speaker = new BlockSpeaker( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ) - ); - - ComputerCraft.Blocks.diskDrive = new BlockDiskDrive( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ) - ); - - ComputerCraft.Blocks.monitorNormal = new BlockMonitor( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ), - TileMonitor.FACTORY_NORMAL - ); - - ComputerCraft.Blocks.monitorAdvanced = new BlockMonitor( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ), - TileMonitor.FACTORY_ADVANCED - ); - - ComputerCraft.Blocks.printer = new BlockPrinter( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ) - ); - - ComputerCraft.Blocks.wirelessModemNormal = new BlockWirelessModem( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ), - TileWirelessModem.FACTORY_NORMAL - ); - - ComputerCraft.Blocks.wirelessModemAdvanced = new BlockWirelessModem( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 2 ), - TileWirelessModem.FACTORY_ADVANCED - ); - - ComputerCraft.Blocks.wiredModemFull = new BlockWiredModemFull( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 1.5f ) - ); - - ComputerCraft.Blocks.cable = new BlockCable( - Block.Properties.create( Material.ROCK ).hardnessAndResistance( 1.5f ) - ); - - registry.registerAll( - ComputerCraft.Blocks.speaker.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "speaker" ) ), - ComputerCraft.Blocks.diskDrive.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk_drive" ) ), - ComputerCraft.Blocks.monitorNormal.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "monitor_normal" ) ), - ComputerCraft.Blocks.monitorAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "monitor_advanced" ) ), - ComputerCraft.Blocks.printer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printer" ) ), - ComputerCraft.Blocks.wirelessModemNormal.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wireless_modem_normal" ) ), - ComputerCraft.Blocks.wirelessModemAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wireless_modem_advanced" ) ), - ComputerCraft.Blocks.wiredModemFull.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ), - ComputerCraft.Blocks.cable.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "cable" ) ) - ); + public static final RegistryObject WIRED_MODEM_FULL = BLOCKS.register( "wired_modem_full", + () -> new BlockWiredModemFull( modemProperties() ) ); + public static final RegistryObject CABLE = BLOCKS.register( "cable", () -> new BlockCable( modemProperties() ) ); } - @SubscribeEvent - public static void registerTileEntities( RegistryEvent.Register> event ) + public static class ModTiles { - IForgeRegistry> registry = event.getRegistry(); + static final DeferredRegister> TILES = new DeferredRegister<>( ForgeRegistries.TILE_ENTITIES, ComputerCraft.MOD_ID ); - // Computers - registry.registerAll( TileComputer.FACTORY_NORMAL, TileComputer.FACTORY_ADVANCED, TileCommandComputer.FACTORY ); + private static RegistryObject> ofBlock( RegistryObject block, Function, T> factory ) + { + return TILES.register( block.getId().getPath(), () -> FixedPointTileEntityType.create( block, factory ) ); + } - // Turtles - registry.registerAll( TileTurtle.FACTORY_NORMAL, TileTurtle.FACTORY_ADVANCED ); + public static final RegistryObject> MONITOR_NORMAL = + ofBlock( ModBlocks.MONITOR_NORMAL, f -> new TileMonitor( f, false ) ); + public static final RegistryObject> MONITOR_ADVANCED = + ofBlock( ModBlocks.MONITOR_ADVANCED, f -> new TileMonitor( f, true ) ); - // Peripherals - registry.registerAll( - TileSpeaker.FACTORY, - TileDiskDrive.FACTORY, - TileMonitor.FACTORY_NORMAL, - TileMonitor.FACTORY_ADVANCED, - TilePrinter.FACTORY, - TileWirelessModem.FACTORY_NORMAL, - TileWirelessModem.FACTORY_ADVANCED, - TileWiredModemFull.FACTORY, - TileCable.FACTORY - ); + public static final RegistryObject> COMPUTER_NORMAL = + ofBlock( ModBlocks.COMPUTER_NORMAL, f -> new TileComputer( ComputerFamily.NORMAL, f ) ); + public static final RegistryObject> COMPUTER_ADVANCED = + ofBlock( ModBlocks.COMPUTER_ADVANCED, f -> new TileComputer( ComputerFamily.ADVANCED, f ) ); + public static final RegistryObject> COMPUTER_COMMAND = + ofBlock( ModBlocks.COMPUTER_COMMAND, f -> new TileCommandComputer( ComputerFamily.COMMAND, f ) ); + + public static final RegistryObject> TURTLE_NORMAL = + ofBlock( ModBlocks.TURTLE_NORMAL, f -> new TileTurtle( f, ComputerFamily.NORMAL ) ); + public static final RegistryObject> TURTLE_ADVANCED = + ofBlock( ModBlocks.TURTLE_ADVANCED, f -> new TileTurtle( f, ComputerFamily.ADVANCED ) ); + + public static final RegistryObject> SPEAKER = ofBlock( ModBlocks.SPEAKER, TileSpeaker::new ); + public static final RegistryObject> DISK_DRIVE = ofBlock( ModBlocks.DISK_DRIVE, TileDiskDrive::new ); + public static final RegistryObject> PRINTER = ofBlock( ModBlocks.PRINTER, TilePrinter::new ); + public static final RegistryObject> WIRED_MODEM_FULL = ofBlock( ModBlocks.WIRED_MODEM_FULL, TileWiredModemFull::new ); + public static final RegistryObject> CABLE = ofBlock( ModBlocks.CABLE, TileCable::new ); + + public static final RegistryObject> WIRELESS_MODEM_NORMAL = + ofBlock( ModBlocks.WIRELESS_MODEM_NORMAL, f -> new TileWirelessModem( f, false ) ); + public static final RegistryObject> WIRELESS_MODEM_ADVANCED = + ofBlock( ModBlocks.WIRELESS_MODEM_ADVANCED, f -> new TileWirelessModem( f, true ) ); } - private static T setupItemBlock( T item ) + public static final class ModItems { - item.setRegistryName( item.getBlock().getRegistryName() ); - return item; - } + static final DeferredRegister ITEMS = new DeferredRegister<>( ForgeRegistries.ITEMS, ComputerCraft.MOD_ID ); - private static Item.Properties defaultItem() - { - return new Item.Properties().group( mainItemGroup ); + private static Item.Properties properties() + { + return new Item.Properties().group( mainItemGroup ); + } + + private static RegistryObject ofBlock( RegistryObject parent, BiFunction supplier ) + { + return ITEMS.register( parent.getId().getPath(), () -> supplier.apply( parent.get(), properties() ) ); + } + + public static final RegistryObject COMPUTER_NORMAL = ofBlock( ModBlocks.COMPUTER_NORMAL, ItemComputer::new ); + public static final RegistryObject COMPUTER_ADVANCED = ofBlock( ModBlocks.COMPUTER_ADVANCED, ItemComputer::new ); + public static final RegistryObject COMPUTER_COMMAND = ofBlock( ModBlocks.COMPUTER_COMMAND, ItemComputer::new ); + + public static final RegistryObject POCKET_COMPUTER_NORMAL = ITEMS.register( "pocket_computer_normal", + () -> new ItemPocketComputer( properties().maxStackSize( 1 ), ComputerFamily.NORMAL ) ); + public static final RegistryObject POCKET_COMPUTER_ADVANCED = ITEMS.register( "pocket_computer_advanced", + () -> new ItemPocketComputer( properties().maxStackSize( 1 ), ComputerFamily.ADVANCED ) ); + + public static final RegistryObject TURTLE_NORMAL = ofBlock( ModBlocks.TURTLE_NORMAL, ItemTurtle::new ); + public static final RegistryObject TURTLE_ADVANCED = ofBlock( ModBlocks.TURTLE_ADVANCED, ItemTurtle::new ); + + public static final RegistryObject DISK = + ITEMS.register( "disk", () -> new ItemDisk( properties().maxStackSize( 1 ) ) ); + public static final RegistryObject TREASURE_DISK = + ITEMS.register( "treasure_disk", () -> new ItemTreasureDisk( properties().maxStackSize( 1 ) ) ); + + public static final RegistryObject PRINTED_PAGE = ITEMS.register( "printed_page", + () -> new ItemPrintout( properties().maxStackSize( 1 ), ItemPrintout.Type.PAGE ) ); + public static final RegistryObject PRINTED_PAGES = ITEMS.register( "printed_pages", + () -> new ItemPrintout( properties().maxStackSize( 1 ), ItemPrintout.Type.PAGES ) ); + public static final RegistryObject PRINTED_BOOK = ITEMS.register( "printed_book", + () -> new ItemPrintout( properties().maxStackSize( 1 ), ItemPrintout.Type.BOOK ) ); + + public static final RegistryObject SPEAKER = ofBlock( ModBlocks.SPEAKER, BlockItem::new ); + public static final RegistryObject DISK_DRIVE = ofBlock( ModBlocks.DISK_DRIVE, BlockItem::new ); + public static final RegistryObject PRINTER = ofBlock( ModBlocks.PRINTER, BlockItem::new ); + public static final RegistryObject MONITOR_NORMAL = ofBlock( ModBlocks.MONITOR_NORMAL, BlockItem::new ); + public static final RegistryObject MONITOR_ADVANCED = ofBlock( ModBlocks.MONITOR_ADVANCED, BlockItem::new ); + public static final RegistryObject WIRELESS_MODEM_NORMAL = ofBlock( ModBlocks.WIRELESS_MODEM_NORMAL, BlockItem::new ); + public static final RegistryObject WIRELESS_MODEM_ADVANCED = ofBlock( ModBlocks.WIRELESS_MODEM_ADVANCED, BlockItem::new ); + public static final RegistryObject WIRED_MODEM_FULL = ofBlock( ModBlocks.WIRED_MODEM_FULL, BlockItem::new ); + + public static final RegistryObject CABLE = ITEMS.register( "cable", + () -> new ItemBlockCable.Cable( ModBlocks.CABLE.get(), properties() ) ); + public static final RegistryObject WIRED_MODEM = ITEMS.register( "wired_modem", + () -> new ItemBlockCable.WiredModem( ModBlocks.CABLE.get(), properties() ) ); } @SubscribeEvent public static void registerItems( RegistryEvent.Register event ) { - IForgeRegistry registry = event.getRegistry(); - - // Computer - ComputerCraft.Items.computerNormal = new ItemComputer( ComputerCraft.Blocks.computerNormal, defaultItem() ); - ComputerCraft.Items.computerAdvanced = new ItemComputer( ComputerCraft.Blocks.computerAdvanced, defaultItem() ); - ComputerCraft.Items.computerCommand = new ItemComputer( ComputerCraft.Blocks.computerCommand, defaultItem() ); - - registry.registerAll( - setupItemBlock( ComputerCraft.Items.computerNormal ), - setupItemBlock( ComputerCraft.Items.computerAdvanced ), - setupItemBlock( ComputerCraft.Items.computerCommand ) - ); - - // Turtle - ComputerCraft.Items.turtleNormal = new ItemTurtle( ComputerCraft.Blocks.turtleNormal, defaultItem() ); - ComputerCraft.Items.turtleAdvanced = new ItemTurtle( ComputerCraft.Blocks.turtleAdvanced, defaultItem() ); - registry.registerAll( - setupItemBlock( ComputerCraft.Items.turtleNormal ), - setupItemBlock( ComputerCraft.Items.turtleAdvanced ) - ); - - // Pocket computer - ComputerCraft.Items.pocketComputerNormal = new ItemPocketComputer( defaultItem().maxStackSize( 1 ), ComputerFamily.NORMAL ); - ComputerCraft.Items.pocketComputerAdvanced = new ItemPocketComputer( defaultItem().maxStackSize( 1 ), ComputerFamily.ADVANCED ); - - registry.registerAll( - ComputerCraft.Items.pocketComputerNormal.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocket_computer_normal" ) ), - ComputerCraft.Items.pocketComputerAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocket_computer_advanced" ) ) - ); - - // Floppy disk - ComputerCraft.Items.disk = new ItemDisk( defaultItem().maxStackSize( 1 ) ); - ComputerCraft.Items.treasureDisk = new ItemTreasureDisk( defaultItem().maxStackSize( 1 ) ); - - registry.registerAll( - ComputerCraft.Items.disk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk" ) ), - ComputerCraft.Items.treasureDisk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "treasure_disk" ) ) - ); - - // Printouts - ComputerCraft.Items.printedPage = new ItemPrintout( defaultItem().maxStackSize( 1 ), ItemPrintout.Type.PAGE ); - ComputerCraft.Items.printedPages = new ItemPrintout( defaultItem().maxStackSize( 1 ), ItemPrintout.Type.PAGES ); - ComputerCraft.Items.printedBook = new ItemPrintout( defaultItem().maxStackSize( 1 ), ItemPrintout.Type.BOOK ); - - registry.registerAll( - ComputerCraft.Items.printedPage.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printed_page" ) ), - ComputerCraft.Items.printedPages.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printed_pages" ) ), - ComputerCraft.Items.printedBook.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printed_book" ) ) - ); - - // Peripherals - registry.registerAll( - setupItemBlock( new BlockItem( ComputerCraft.Blocks.speaker, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.diskDrive, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.printer, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.monitorNormal, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.monitorAdvanced, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.wirelessModemNormal, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.wirelessModemAdvanced, defaultItem() ) ), - setupItemBlock( new BlockItem( ComputerCraft.Blocks.wiredModemFull, defaultItem() ) ) - ); - - ComputerCraft.Items.cable = new ItemBlockCable.Cable( ComputerCraft.Blocks.cable, defaultItem() ); - ComputerCraft.Items.wiredModem = new ItemBlockCable.WiredModem( ComputerCraft.Blocks.cable, defaultItem() ); - registry.registerAll( - ComputerCraft.Items.cable.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "cable" ) ), - ComputerCraft.Items.wiredModem.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem" ) ) - ); - registerTurtleUpgrades(); registerPocketUpgrades(); } @@ -303,7 +259,7 @@ private static void registerTurtleUpgrades() ComputerCraft.TurtleUpgrades.diamondSword = new TurtleSword( new ResourceLocation( "minecraft", "diamond_sword" ), Items.DIAMOND_SWORD ); ComputerCraftAPI.registerTurtleUpgrade( ComputerCraft.TurtleUpgrades.diamondSword ); - ComputerCraft.TurtleUpgrades.diamondShovel = new TurtleShovel( new ResourceLocation( "minecraft", "diamond_shovel" ), net.minecraft.item.Items.DIAMOND_SHOVEL ); + ComputerCraft.TurtleUpgrades.diamondShovel = new TurtleShovel( new ResourceLocation( "minecraft", "diamond_shovel" ), Items.DIAMOND_SHOVEL ); ComputerCraftAPI.registerTurtleUpgrade( ComputerCraft.TurtleUpgrades.diamondShovel ); ComputerCraft.TurtleUpgrades.diamondPickaxe = new TurtleTool( new ResourceLocation( "minecraft", "diamond_pickaxe" ), Items.DIAMOND_PICKAXE ); @@ -323,32 +279,47 @@ private static void registerPocketUpgrades() ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.speaker = new PocketSpeaker() ); } - @SubscribeEvent - public static void registerEntities( RegistryEvent.Register> registry ) + public static class ModEntities { - registry.getRegistry().register( TurtlePlayer.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_player" ) ) ); + static final DeferredRegister> ENTITIES = new DeferredRegister<>( ForgeRegistries.ENTITIES, ComputerCraft.MOD_ID ); + + public static final RegistryObject> TURTLE_PLAYER = ENTITIES.register( "turtle_player", () -> + EntityType.Builder.create( EntityClassification.MISC ) + .disableSerialization() + .disableSummoning() + .size( 0, 0 ) + .build( ComputerCraft.MOD_ID + ":turtle_player" ) ); + } + + public static class ModContainers + { + static final DeferredRegister> CONTAINERS = new DeferredRegister<>( ForgeRegistries.CONTAINERS, ComputerCraft.MOD_ID ); + + public static final RegistryObject> COMPUTER = CONTAINERS.register( "computer", + () -> ContainerData.toType( ComputerContainerData::new, ContainerComputer::new ) ); + + public static final RegistryObject> POCKET_COMPUTER = CONTAINERS.register( "pocket_computer", + () -> ContainerData.toType( ComputerContainerData::new, ContainerPocketComputer::new ) ); + + public static final RegistryObject> TURTLE = CONTAINERS.register( "turtle", + () -> ContainerData.toType( ComputerContainerData::new, ContainerTurtle::new ) ); + + public static final RegistryObject> DISK_DRIVE = CONTAINERS.register( "disk_drive", + () -> new ContainerType<>( ContainerDiskDrive::new ) ); + + public static final RegistryObject> PRINTER = CONTAINERS.register( "printer", + () -> new ContainerType<>( ContainerPrinter::new ) ); + + public static final RegistryObject> PRINTOUT = CONTAINERS.register( "printout", + () -> ContainerData.toType( HeldItemContainerData::new, ContainerHeldItem::createPrintout ) ); + + public static final RegistryObject> VIEW_COMPUTER = CONTAINERS.register( "view_computer", + () -> ContainerData.toType( ViewComputerContainerData::new, ContainerViewComputer::new ) ); } @SubscribeEvent - public static void registerContainers( RegistryEvent.Register> event ) + public static void registerRecipeSerializers( RegistryEvent.Register> event ) { - event.getRegistry().registerAll( - ContainerComputer.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ), - ContainerPocketComputer.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocket_computer" ) ), - ContainerTurtle.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ), - - ContainerDiskDrive.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk_drive" ) ), - ContainerPrinter.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printer" ) ), - ContainerHeldItem.PRINTOUT_TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printout" ) ), - - ContainerViewComputer.TYPE.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "view_computer" ) ) - ); - } - - @SubscribeEvent - public static void regsterRecipeSerializers( RegistryEvent.Register> event ) - { - event.getRegistry().registerAll( ColourableRecipe.SERIALIZER.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "colour" ) ), ComputerUpgradeRecipe.SERIALIZER.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer_upgrade" ) ), @@ -361,4 +332,14 @@ public static void regsterRecipeSerializers( RegistryEvent.Register type; + private final RegistryObject> type; - public BlockGeneric( Properties settings, NamedTileEntityType type ) + public BlockGeneric( Properties settings, RegistryObject> type ) { super( settings ); this.type = type; - type.setBlock( this ); } @Override @@ -89,7 +88,7 @@ public boolean hasTileEntity( BlockState state ) @Override public TileEntity createTileEntity( @Nonnull BlockState state, @Nonnull IBlockReader world ) { - return type.create(); + return type.get().create(); } @Override diff --git a/src/main/java/dan200/computercraft/shared/common/ContainerHeldItem.java b/src/main/java/dan200/computercraft/shared/common/ContainerHeldItem.java index 6300cc0d7..8514a9133 100644 --- a/src/main/java/dan200/computercraft/shared/common/ContainerHeldItem.java +++ b/src/main/java/dan200/computercraft/shared/common/ContainerHeldItem.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.shared.common; -import dan200.computercraft.shared.network.container.ContainerData; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.network.container.HeldItemContainerData; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; @@ -21,8 +21,6 @@ public class ContainerHeldItem extends Container { - public static final ContainerType PRINTOUT_TYPE = ContainerData.toType( HeldItemContainerData::new, ContainerHeldItem::createPrintout ); - private final ItemStack stack; private final Hand hand; @@ -34,9 +32,9 @@ public ContainerHeldItem( ContainerType type, int i stack = player.getHeldItem( hand ).copy(); } - private static ContainerHeldItem createPrintout( int id, PlayerInventory inventory, HeldItemContainerData data ) + public static ContainerHeldItem createPrintout( int id, PlayerInventory inventory, HeldItemContainerData data ) { - return new ContainerHeldItem( PRINTOUT_TYPE, id, inventory.player, data.getHand() ); + return new ContainerHeldItem( Registry.ModContainers.PRINTOUT.get(), id, inventory.player, data.getHand() ); } @Nonnull diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java index 06b0c0339..e2386f667 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputer.java @@ -8,7 +8,6 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ComputerState; import dan200.computercraft.shared.computer.items.ComputerItemFactory; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.item.BlockItemUseContext; @@ -17,7 +16,9 @@ import net.minecraft.state.EnumProperty; import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; +import net.minecraftforge.fml.RegistryObject; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -27,7 +28,7 @@ public class BlockComputer extends BlockComputerBase public static final EnumProperty STATE = EnumProperty.create( "state", ComputerState.class ); public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; - public BlockComputer( Properties settings, ComputerFamily family, NamedTileEntityType type ) + public BlockComputer( Properties settings, ComputerFamily family, RegistryObject> type ) { super( settings, family, type ); setDefaultState( getDefaultState() diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java index 6f768dbbc..0bf82c8e2 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/BlockComputerBase.java @@ -12,13 +12,13 @@ import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ServerComputer; import dan200.computercraft.shared.computer.items.IComputerItem; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.block.BlockState; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.stats.Stats; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; @@ -28,6 +28,7 @@ import net.minecraft.world.server.ServerWorld; import net.minecraft.world.storage.loot.LootContext; import net.minecraft.world.storage.loot.LootParameters; +import net.minecraftforge.fml.RegistryObject; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -38,7 +39,7 @@ public abstract class BlockComputerBase extends Bloc private final ComputerFamily family; - protected BlockComputerBase( Properties settings, ComputerFamily family, NamedTileEntityType type ) + protected BlockComputerBase( Properties settings, ComputerFamily family, RegistryObject> type ) { super( settings, type ); this.family = family; @@ -46,7 +47,7 @@ protected BlockComputerBase( Properties settings, ComputerFamily family, NamedTi @Override @Deprecated - public void onBlockAdded( BlockState state, World world, BlockPos pos, BlockState oldState, boolean isMoving ) + public void onBlockAdded( @Nonnull BlockState state, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState oldState, boolean isMoving ) { super.onBlockAdded( state, world, pos, oldState, isMoving ); @@ -56,14 +57,14 @@ public void onBlockAdded( BlockState state, World world, BlockPos pos, BlockStat @Override @Deprecated - public boolean canProvidePower( BlockState state ) + public boolean canProvidePower( @Nonnull BlockState state ) { return true; } @Override @Deprecated - public int getStrongPower( BlockState state, IBlockReader world, BlockPos pos, Direction incomingSide ) + public int getStrongPower( @Nonnull BlockState state, IBlockReader world, @Nonnull BlockPos pos, @Nonnull Direction incomingSide ) { TileEntity entity = world.getTileEntity( pos ); if( !(entity instanceof TileComputerBase) ) return 0; @@ -86,7 +87,7 @@ public ComputerFamily getFamily() @Override @Deprecated - public int getWeakPower( BlockState state, IBlockReader world, BlockPos pos, Direction incomingSide ) + public int getWeakPower( @Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull Direction incomingSide ) { return getStrongPower( state, world, pos, incomingSide ); } @@ -126,7 +127,7 @@ public ItemStack getPickBlock( BlockState state, RayTraceResult target, IBlockRe } @Override - public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull BlockPos pos, BlockState state, @Nullable TileEntity tile, @Nonnull ItemStack tool ) + public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nullable TileEntity tile, @Nonnull ItemStack tool ) { // Don't drop blocks here - see onBlockHarvested. player.addStat( Stats.BLOCK_MINED.get( this ) ); @@ -134,7 +135,7 @@ public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull Bl } @Override - public void onBlockHarvested( World world, @Nonnull BlockPos pos, BlockState state, @Nonnull PlayerEntity player ) + public void onBlockHarvested( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nonnull PlayerEntity player ) { if( !(world instanceof ServerWorld) ) return; @@ -162,7 +163,7 @@ public void onBlockHarvested( World world, @Nonnull BlockPos pos, BlockState sta } @Override - public void onBlockPlacedBy( World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack ) + public void onBlockPlacedBy( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, LivingEntity placer, @Nonnull ItemStack stack ) { super.onBlockPlacedBy( world, pos, state, placer, stack ); diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java index bfd7bfd52..20d542463 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileCommandComputer.java @@ -9,13 +9,11 @@ import dan200.computercraft.shared.computer.apis.CommandAPI; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.ServerComputer; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.command.CommandSource; import net.minecraft.command.ICommandSource; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.Vec2f; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; @@ -30,11 +28,6 @@ public class TileCommandComputer extends TileComputer { - public static final NamedTileEntityType FACTORY = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ), - f -> new TileCommandComputer( ComputerFamily.COMMAND, f ) - ); - public class CommandReceiver implements ICommandSource { private final Map output = new HashMap<>(); diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java index 34a768af3..82d10dea2 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputer.java @@ -13,14 +13,12 @@ import dan200.computercraft.shared.computer.core.ServerComputer; import dan200.computercraft.shared.computer.inventory.ContainerComputer; import dan200.computercraft.shared.util.CapabilityUtil; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; @@ -31,16 +29,6 @@ public class TileComputer extends TileComputerBase { - public static final NamedTileEntityType FACTORY_NORMAL = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "computer_normal" ), - f -> new TileComputer( ComputerFamily.NORMAL, f ) - ); - - public static final NamedTileEntityType FACTORY_ADVANCED = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "computer_advanced" ), - f -> new TileComputer( ComputerFamily.ADVANCED, f ) - ); - private ComputerProxy proxy; private LazyOptional peripheral; diff --git a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java index 9bf2df439..b384810b9 100644 --- a/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/blocks/TileComputerBase.java @@ -178,7 +178,7 @@ public void tick() @Nonnull @Override - public CompoundNBT write( CompoundNBT nbt ) + public CompoundNBT write( @Nonnull CompoundNBT nbt ) { // Save ID, label and power state if( m_computerID >= 0 ) nbt.putInt( NBT_ID, m_computerID ); @@ -189,7 +189,7 @@ public CompoundNBT write( CompoundNBT nbt ) } @Override - public void read( CompoundNBT nbt ) + public void read( @Nonnull CompoundNBT nbt ) { super.read( nbt ); diff --git a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java index 83bb7aff8..9ce948931 100644 --- a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputer.java @@ -5,23 +5,20 @@ */ package dan200.computercraft.shared.computer.inventory; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.blocks.TileComputer; import dan200.computercraft.shared.network.container.ComputerContainerData; -import dan200.computercraft.shared.network.container.ContainerData; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; public class ContainerComputer extends ContainerComputerBase { - public static final ContainerType TYPE = ContainerData.toType( ComputerContainerData::new, ContainerComputer::new ); - public ContainerComputer( int id, TileComputer tile ) { - super( TYPE, id, tile::isUsableByPlayer, tile.createServerComputer(), tile.getFamily() ); + super( Registry.ModContainers.COMPUTER.get(), id, tile::isUsableByPlayer, tile.createServerComputer(), tile.getFamily() ); } - private ContainerComputer( int id, PlayerInventory player, ComputerContainerData data ) + public ContainerComputer( int id, PlayerInventory player, ComputerContainerData data ) { - super( TYPE, id, player, data ); + super( Registry.ModContainers.COMPUTER.get(), id, player, data ); } } diff --git a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java index 52e532550..699474012 100644 --- a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java +++ b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerComputerBase.java @@ -74,7 +74,7 @@ public InputState getInput() } @Override - public void onContainerClosed( PlayerEntity player ) + public void onContainerClosed( @Nonnull PlayerEntity player ) { super.onContainerClosed( player ); input.close(); diff --git a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerViewComputer.java b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerViewComputer.java index ef8595d11..ccc8b24d9 100644 --- a/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerViewComputer.java +++ b/src/main/java/dan200/computercraft/shared/computer/inventory/ContainerViewComputer.java @@ -6,34 +6,31 @@ package dan200.computercraft.shared.computer.inventory; import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.IContainerComputer; import dan200.computercraft.shared.computer.core.ServerComputer; -import dan200.computercraft.shared.network.container.ContainerData; import dan200.computercraft.shared.network.container.ViewComputerContainerData; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.container.ContainerType; import javax.annotation.Nonnull; public class ContainerViewComputer extends ContainerComputerBase implements IContainerComputer { - public static final ContainerType TYPE = ContainerData.toType( ViewComputerContainerData::new, ContainerViewComputer::new ); - private final int width; private final int height; public ContainerViewComputer( int id, ServerComputer computer ) { - super( TYPE, id, player -> canInteractWith( computer, player ), computer, computer.getFamily() ); + super( Registry.ModContainers.VIEW_COMPUTER.get(), id, player -> canInteractWith( computer, player ), computer, computer.getFamily() ); this.width = this.height = 0; } public ContainerViewComputer( int id, PlayerInventory player, ViewComputerContainerData data ) { - super( TYPE, id, player, data ); + super( Registry.ModContainers.VIEW_COMPUTER.get(), id, player, data ); this.width = data.getWidth(); this.height = data.getHeight(); } diff --git a/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java b/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java index 9cf4465e7..3be415994 100644 --- a/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/computer/items/ComputerItemFactory.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.shared.computer.items; -import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.blocks.TileComputer; import dan200.computercraft.shared.computer.core.ComputerFamily; import net.minecraft.item.ItemStack; @@ -28,11 +28,11 @@ public static ItemStack create( int id, String label, ComputerFamily family ) switch( family ) { case NORMAL: - return ComputerCraft.Items.computerNormal.create( id, label ); + return Registry.ModItems.COMPUTER_NORMAL.get().create( id, label ); case ADVANCED: - return ComputerCraft.Items.computerAdvanced.create( id, label ); + return Registry.ModItems.COMPUTER_ADVANCED.get().create( id, label ); case COMMAND: - return ComputerCraft.Items.computerCommand.create( id, label ); + return Registry.ModItems.COMPUTER_COMMAND.get().create( id, label ); default: return ItemStack.EMPTY; } diff --git a/src/main/java/dan200/computercraft/shared/integration/jei/JEIComputerCraft.java b/src/main/java/dan200/computercraft/shared/integration/jei/JEIComputerCraft.java index d368ed7b9..c7d99cebb 100644 --- a/src/main/java/dan200/computercraft/shared/integration/jei/JEIComputerCraft.java +++ b/src/main/java/dan200/computercraft/shared/integration/jei/JEIComputerCraft.java @@ -10,6 +10,7 @@ import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.shared.PocketUpgrades; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.TurtleUpgrades; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.media.items.ItemDisk; @@ -51,13 +52,13 @@ public ResourceLocation getPluginUid() @Override public void registerItemSubtypes( ISubtypeRegistration subtypeRegistry ) { - subtypeRegistry.registerSubtypeInterpreter( ComputerCraft.Items.turtleNormal, turtleSubtype ); - subtypeRegistry.registerSubtypeInterpreter( ComputerCraft.Items.turtleAdvanced, turtleSubtype ); + subtypeRegistry.registerSubtypeInterpreter( Registry.ModItems.TURTLE_NORMAL.get(), turtleSubtype ); + subtypeRegistry.registerSubtypeInterpreter( Registry.ModItems.TURTLE_ADVANCED.get(), turtleSubtype ); - subtypeRegistry.registerSubtypeInterpreter( ComputerCraft.Items.pocketComputerNormal, pocketSubtype ); - subtypeRegistry.registerSubtypeInterpreter( ComputerCraft.Items.pocketComputerAdvanced, pocketSubtype ); + subtypeRegistry.registerSubtypeInterpreter( Registry.ModItems.POCKET_COMPUTER_NORMAL.get(), pocketSubtype ); + subtypeRegistry.registerSubtypeInterpreter( Registry.ModItems.POCKET_COMPUTER_ADVANCED.get(), pocketSubtype ); - subtypeRegistry.registerSubtypeInterpreter( ComputerCraft.Items.disk, diskSubtype ); + subtypeRegistry.registerSubtypeInterpreter( Registry.ModItems.DISK.get(), diskSubtype ); } @Override diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemDisk.java b/src/main/java/dan200/computercraft/shared/media/items/ItemDisk.java index 0c670ed81..6ef877402 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemDisk.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemDisk.java @@ -9,6 +9,7 @@ import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.media.IMedia; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.IColouredItem; import dan200.computercraft.shared.util.Colour; import net.minecraft.client.util.ITooltipFlag; @@ -42,9 +43,9 @@ public ItemDisk( Properties settings ) @Nonnull public static ItemStack createFromIDAndColour( int id, String label, int colour ) { - ItemStack stack = new ItemStack( ComputerCraft.Items.disk ); + ItemStack stack = new ItemStack( Registry.ModItems.DISK.get() ); setDiskID( stack, id ); - ComputerCraft.Items.disk.setLabel( stack, label ); + Registry.ModItems.DISK.get().setLabel( stack, label ); IColouredItem.setColourBasic( stack, colour ); return stack; } @@ -60,7 +61,7 @@ public void fillItemGroup( @Nonnull ItemGroup tabs, @Nonnull NonNullList list, ITooltipFlag options ) + public void addInformation( @Nonnull ItemStack stack, @Nullable World world, @Nonnull List list, ITooltipFlag options ) { if( options.isAdvanced() ) { diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java b/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java index ad3a64874..d34d4a897 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemPrintout.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.shared.media.items; -import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.ContainerHeldItem; import dan200.computercraft.shared.network.container.HeldItemContainerData; import net.minecraft.client.util.ITooltipFlag; @@ -50,7 +50,7 @@ public ItemPrintout( Properties settings, Type type ) } @Override - public void addInformation( @Nonnull ItemStack stack, World world, List list, ITooltipFlag options ) + public void addInformation( @Nonnull ItemStack stack, World world, @Nonnull List list, @Nonnull ITooltipFlag options ) { String title = getTitle( stack ); if( title != null && !title.isEmpty() ) list.add( new StringTextComponent( title ) ); @@ -58,12 +58,12 @@ public void addInformation( @Nonnull ItemStack stack, World world, List onItemRightClick( World world, PlayerEntity player, @Nonnull Hand hand ) + public ActionResult onItemRightClick( World world, @Nonnull PlayerEntity player, @Nonnull Hand hand ) { if( !world.isRemote ) { new HeldItemContainerData( hand ) - .open( player, new ContainerHeldItem.Factory( ContainerHeldItem.PRINTOUT_TYPE, player.getHeldItem( hand ), hand ) ); + .open( player, new ContainerHeldItem.Factory( Registry.ModContainers.PRINTOUT.get(), player.getHeldItem( hand ), hand ) ); } return new ActionResult<>( ActionResultType.SUCCESS, player.getHeldItem( hand ) ); } @@ -100,19 +100,19 @@ private ItemStack createFromTitleAndText( String title, String[] text, String[] @Nonnull public static ItemStack createSingleFromTitleAndText( String title, String[] text, String[] colours ) { - return ComputerCraft.Items.printedPage.createFromTitleAndText( title, text, colours ); + return Registry.ModItems.PRINTED_PAGE.get().createFromTitleAndText( title, text, colours ); } @Nonnull public static ItemStack createMultipleFromTitleAndText( String title, String[] text, String[] colours ) { - return ComputerCraft.Items.printedPages.createFromTitleAndText( title, text, colours ); + return Registry.ModItems.PRINTED_PAGES.get().createFromTitleAndText( title, text, colours ); } @Nonnull public static ItemStack createBookFromTitleAndText( String title, String[] text, String[] colours ) { - return ComputerCraft.Items.printedBook.createFromTitleAndText( title, text, colours ); + return Registry.ModItems.PRINTED_BOOK.get().createFromTitleAndText( title, text, colours ); } public Type getType() diff --git a/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java b/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java index c284e7fff..345f36e68 100644 --- a/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java +++ b/src/main/java/dan200/computercraft/shared/media/items/ItemTreasureDisk.java @@ -5,11 +5,11 @@ */ package dan200.computercraft.shared.media.items; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.media.IMedia; import dan200.computercraft.core.filesystem.SubMount; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.util.Colour; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; @@ -46,7 +46,7 @@ public void fillItemGroup( @Nonnull ItemGroup group, @Nonnull NonNullList list, ITooltipFlag tooltipOptions ) + public void addInformation( @Nonnull ItemStack stack, @Nullable World world, @Nonnull List list, @Nonnull ITooltipFlag tooltipOptions ) { String label = getTitle( stack ); if( !label.isEmpty() ) list.add( new StringTextComponent( label ) ); @@ -92,7 +92,7 @@ else if( rootTreasure.exists( "deprecated/" + subPath ) ) public static ItemStack create( String subPath, int colourIndex ) { - ItemStack result = new ItemStack( ComputerCraft.Items.treasureDisk ); + ItemStack result = new ItemStack( Registry.ModItems.TREASURE_DISK.get() ); CompoundNBT nbt = result.getOrCreateTag(); nbt.putString( NBT_SUB_PATH, subPath ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/BlockDiskDrive.java b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/BlockDiskDrive.java index c87d1ba50..17104f9ec 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/BlockDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/BlockDiskDrive.java @@ -5,6 +5,7 @@ */ package dan200.computercraft.shared.peripheral.diskdrive; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.BlockGeneric; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -33,7 +34,7 @@ public class BlockDiskDrive extends BlockGeneric public BlockDiskDrive( Properties settings ) { - super( settings, TileDiskDrive.FACTORY ); + super( settings, Registry.ModTiles.DISK_DRIVE ); setDefaultState( getStateContainer().getBaseState() .with( FACING, Direction.NORTH ) .with( STATE, DiskDriveState.EMPTY ) ); @@ -54,7 +55,7 @@ public BlockState getStateForPlacement( BlockItemUseContext placement ) } @Override - public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nullable TileEntity te, ItemStack stack ) + public void harvestBlock( @Nonnull World world, @Nonnull PlayerEntity player, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nullable TileEntity te, @Nonnull ItemStack stack ) { if( te instanceof INameable && ((INameable) te).hasCustomName() ) { @@ -72,7 +73,7 @@ public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull Bl } @Override - public void onBlockPlacedBy( World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack ) + public void onBlockPlacedBy( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, LivingEntity placer, ItemStack stack ) { if( stack.hasDisplayName() ) { diff --git a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java index ee43ebb4f..88725bdfa 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/ContainerDiskDrive.java @@ -5,12 +5,12 @@ */ package dan200.computercraft.shared.peripheral.diskdrive; +import dan200.computercraft.shared.Registry; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Inventory; import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; @@ -18,13 +18,11 @@ public class ContainerDiskDrive extends Container { - public static final ContainerType TYPE = new ContainerType<>( ContainerDiskDrive::new ); - private final IInventory inventory; public ContainerDiskDrive( int id, PlayerInventory player, IInventory inventory ) { - super( TYPE, id ); + super( Registry.ModContainers.DISK_DRIVE.get(), id ); this.inventory = inventory; @@ -44,7 +42,7 @@ public ContainerDiskDrive( int id, PlayerInventory player, IInventory inventory } } - private ContainerDiskDrive( int id, PlayerInventory player ) + public ContainerDiskDrive( int id, PlayerInventory player ) { this( id, player, new Inventory( 1 ) ); } @@ -57,7 +55,7 @@ public boolean canInteractWith( @Nonnull PlayerEntity player ) @Nonnull @Override - public ItemStack transferStackInSlot( PlayerEntity player, int slotIndex ) + public ItemStack transferStackInSlot( @Nonnull PlayerEntity player, int slotIndex ) { Slot slot = inventorySlots.get( slotIndex ); if( slot == null || !slot.getHasStack() ) return ItemStack.EMPTY; diff --git a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java index fbbfc4bef..8e53b02b4 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/diskdrive/TileDiskDrive.java @@ -5,7 +5,6 @@ */ package dan200.computercraft.shared.peripheral.diskdrive; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.filesystem.IMount; import dan200.computercraft.api.filesystem.IWritableMount; import dan200.computercraft.api.media.IMedia; @@ -13,7 +12,10 @@ import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.shared.MediaProviders; import dan200.computercraft.shared.common.TileGeneric; -import dan200.computercraft.shared.util.*; +import dan200.computercraft.shared.util.CapabilityUtil; +import dan200.computercraft.shared.util.DefaultInventory; +import dan200.computercraft.shared.util.InventoryUtil; +import dan200.computercraft.shared.util.RecordUtil; import net.minecraft.block.BlockState; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; @@ -24,6 +26,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; @@ -49,11 +52,6 @@ public final class TileDiskDrive extends TileGeneric implements DefaultInventory private static final String NBT_NAME = "CustomName"; private static final String NBT_ITEM = "Item"; - public static final NamedTileEntityType FACTORY = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "disk_drive" ), - TileDiskDrive::new - ); - private static class MountInfo { String mountPath; @@ -74,9 +72,9 @@ private static class MountInfo private boolean m_restartRecord = false; private boolean m_ejectQueued; - private TileDiskDrive() + public TileDiskDrive( TileEntityType type ) { - super( FACTORY ); + super( type ); } @Override @@ -124,7 +122,7 @@ public Direction getDirection() } @Override - public void read( CompoundNBT nbt ) + public void read( @Nonnull CompoundNBT nbt ) { super.read( nbt ); customName = nbt.contains( NBT_NAME ) ? ITextComponent.Serializer.fromJson( nbt.getString( NBT_NAME ) ) : null; @@ -138,7 +136,7 @@ public void read( CompoundNBT nbt ) @Nonnull @Override - public CompoundNBT write( CompoundNBT nbt ) + public CompoundNBT write( @Nonnull CompoundNBT nbt ) { if( customName != null ) nbt.putString( NBT_NAME, ITextComponent.Serializer.toJson( customName ) ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockCable.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockCable.java index 530b81bda..3bdbfee7a 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockCable.java @@ -6,8 +6,8 @@ package dan200.computercraft.shared.peripheral.modem.wired; import com.google.common.collect.ImmutableMap; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.BlockGeneric; import dan200.computercraft.shared.util.WorldUtil; import net.minecraft.block.Block; @@ -61,7 +61,7 @@ public class BlockCable extends BlockGeneric implements IWaterLoggable public BlockCable( Properties settings ) { - super( settings, TileCable.FACTORY ); + super( settings, Registry.ModTiles.CABLE ); setDefaultState( getStateContainer().getBaseState() .with( MODEM, CableModemVariant.None ) @@ -94,7 +94,7 @@ public static boolean doesConnectVisually( BlockState state, IBlockReader world, @Nonnull @Override @Deprecated - public VoxelShape getShape( BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context ) + public VoxelShape getShape( @Nonnull BlockState state, @Nonnull IBlockReader world, @Nonnull BlockPos pos, @Nonnull ISelectionContext context ) { return CableShapes.getShape( state ); } @@ -121,12 +121,12 @@ public boolean removedByPlayer( BlockState state, World world, BlockPos pos, Pla if( WorldUtil.isVecInside( CableShapes.getModemShape( state ), hit.getHitVec().subtract( pos.getX(), pos.getY(), pos.getZ() ) ) ) { newState = state.with( MODEM, CableModemVariant.None ); - item = new ItemStack( ComputerCraft.Items.wiredModem ); + item = new ItemStack( Registry.ModItems.WIRED_MODEM.get() ); } else { newState = state.with( CABLE, false ); - item = new ItemStack( ComputerCraft.Items.cable ); + item = new ItemStack( Registry.ModItems.CABLE.get() ); } world.setBlockState( pos, correctConnections( world, pos, newState ), 3 ); @@ -154,18 +154,18 @@ public ItemStack getPickBlock( BlockState state, RayTraceResult hit, IBlockReade boolean cable = state.get( CABLE ); // If we've only got one, just use that. - if( !cable ) return new ItemStack( ComputerCraft.Items.wiredModem ); - if( modem == null ) return new ItemStack( ComputerCraft.Items.cable ); + if( !cable ) return new ItemStack( Registry.ModItems.WIRED_MODEM.get() ); + if( modem == null ) return new ItemStack( Registry.ModItems.CABLE.get() ); // We've a modem and cable, so try to work out which one we're interacting with return hit != null && WorldUtil.isVecInside( CableShapes.getModemShape( state ), hit.getHitVec().subtract( pos.getX(), pos.getY(), pos.getZ() ) ) - ? new ItemStack( ComputerCraft.Items.wiredModem ) - : new ItemStack( ComputerCraft.Items.cable ); + ? new ItemStack( Registry.ModItems.WIRED_MODEM.get() ) + : new ItemStack( Registry.ModItems.CABLE.get() ); } @Override - public void onBlockPlacedBy( World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack ) + public void onBlockPlacedBy( World world, @Nonnull BlockPos pos, @Nonnull BlockState state, LivingEntity placer, @Nonnull ItemStack stack ) { TileEntity tile = world.getTileEntity( pos ); if( tile instanceof TileCable ) @@ -180,7 +180,7 @@ public void onBlockPlacedBy( World world, BlockPos pos, BlockState state, Living @Nonnull @Override @Deprecated - public IFluidState getFluidState( BlockState state ) + public IFluidState getFluidState( @Nonnull BlockState state ) { return getWaterloggedFluidState( state ); } @@ -188,7 +188,7 @@ public IFluidState getFluidState( BlockState state ) @Nonnull @Override @Deprecated - public BlockState updatePostPlacement( @Nonnull BlockState state, Direction side, BlockState otherState, IWorld world, BlockPos pos, BlockPos otherPos ) + public BlockState updatePostPlacement( @Nonnull BlockState state, @Nonnull Direction side, @Nonnull BlockState otherState, @Nonnull IWorld world, @Nonnull BlockPos pos, @Nonnull BlockPos otherPos ) { updateWaterloggedPostPlacement( state, world, pos ); // Should never happen, but handle the case where we've no modem or cable. @@ -202,7 +202,7 @@ public BlockState updatePostPlacement( @Nonnull BlockState state, Direction side @Override @Deprecated - public boolean isValidPosition( BlockState state, IWorldReader world, BlockPos pos ) + public boolean isValidPosition( BlockState state, @Nonnull IWorldReader world, @Nonnull BlockPos pos ) { Direction facing = state.get( MODEM ).getFacing(); if( facing == null ) return true; @@ -214,7 +214,7 @@ public boolean isValidPosition( BlockState state, IWorldReader world, BlockPos p @Nullable @Override - public BlockState getStateForPlacement( BlockItemUseContext context ) + public BlockState getStateForPlacement( @Nonnull BlockItemUseContext context ) { BlockState state = getDefaultState() .with( WATERLOGGED, getWaterloggedStateForPlacement( context ) ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockWiredModemFull.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockWiredModemFull.java index 6b8407e25..63408e7d6 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockWiredModemFull.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/BlockWiredModemFull.java @@ -5,6 +5,7 @@ */ package dan200.computercraft.shared.peripheral.modem.wired; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.BlockGeneric; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -18,7 +19,7 @@ public class BlockWiredModemFull extends BlockGeneric public BlockWiredModemFull( Properties settings ) { - super( settings, TileWiredModemFull.FACTORY ); + super( settings, Registry.ModTiles.WIRED_MODEM_FULL ); setDefaultState( getStateContainer().getBaseState() .with( MODEM_ON, false ) .with( PERIPHERAL_ON, false ) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/ItemBlockCable.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/ItemBlockCable.java index c8c985e96..d1591bd18 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/ItemBlockCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/ItemBlockCable.java @@ -5,7 +5,7 @@ */ package dan200.computercraft.shared.peripheral.modem.wired; -import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import net.minecraft.block.BlockState; import net.minecraft.block.SoundType; import net.minecraft.entity.player.PlayerEntity; @@ -93,7 +93,7 @@ public ActionResultType tryPlace( BlockItemUseContext context ) BlockState existingState = world.getBlockState( pos ); // Try to add a modem to a cable - if( existingState.getBlock() == ComputerCraft.Blocks.cable && existingState.get( MODEM ) == CableModemVariant.None ) + if( existingState.getBlock() == Registry.ModBlocks.CABLE.get() && existingState.get( MODEM ) == CableModemVariant.None ) { Direction side = context.getFace().getOpposite(); BlockState newState = existingState @@ -130,7 +130,7 @@ public ActionResultType tryPlace( BlockItemUseContext context ) // Try to add a cable to a modem inside the block we're clicking on. BlockPos insidePos = pos.offset( context.getFace().getOpposite() ); BlockState insideState = world.getBlockState( insidePos ); - if( insideState.getBlock() == ComputerCraft.Blocks.cable && !insideState.get( BlockCable.CABLE ) + if( insideState.getBlock() == Registry.ModBlocks.CABLE.get() && !insideState.get( BlockCable.CABLE ) && placeAtCorrected( world, insidePos, insideState.with( BlockCable.CABLE, true ) ) ) { stack.shrink( 1 ); @@ -139,7 +139,7 @@ && placeAtCorrected( world, insidePos, insideState.with( BlockCable.CABLE, true // Try to add a cable to a modem adjacent to this block BlockState existingState = world.getBlockState( pos ); - if( existingState.getBlock() == ComputerCraft.Blocks.cable && !existingState.get( BlockCable.CABLE ) + if( existingState.getBlock() == Registry.ModBlocks.CABLE.get() && !existingState.get( BlockCable.CABLE ) && placeAtCorrected( world, pos, existingState.with( BlockCable.CABLE, true ) ) ) { stack.shrink( 1 ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileCable.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileCable.java index 1844bb405..7d548ec5a 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileCable.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileCable.java @@ -6,27 +6,26 @@ package dan200.computercraft.shared.peripheral.modem.wired; import com.google.common.base.Objects; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.network.wired.IWiredElement; import dan200.computercraft.api.network.wired.IWiredNode; import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.command.CommandCopy; import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.peripheral.modem.ModemState; import dan200.computercraft.shared.util.CapabilityUtil; import dan200.computercraft.shared.util.DirectionUtil; -import dan200.computercraft.shared.util.NamedTileEntityType; import dan200.computercraft.shared.util.TickScheduler; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; @@ -46,11 +45,6 @@ public class TileCable extends TileGeneric { - public static final NamedTileEntityType FACTORY = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "cable" ), - TileCable::new - ); - private static final String NBT_PERIPHERAL_ENABLED = "PeirpheralAccess"; private class CableElement extends WiredModemElement @@ -126,9 +120,9 @@ public Object getTarget() private final NonNullConsumer> connectedNodeChanged = x -> connectionsChanged(); - public TileCable() + public TileCable( TileEntityType type ) { - super( FACTORY ); + super( type ); } private void onRemove() @@ -219,7 +213,7 @@ public void onNeighbourChange( @Nonnull BlockPos neighbour ) if( hasCable() ) { // Drop the modem and convert to cable - Block.spawnAsEntity( getWorld(), getPos(), new ItemStack( ComputerCraft.Items.wiredModem ) ); + Block.spawnAsEntity( getWorld(), getPos(), new ItemStack( Registry.ModItems.WIRED_MODEM.get() ) ); getWorld().setBlockState( getPos(), getBlockState().with( BlockCable.MODEM, CableModemVariant.None ) ); modemChanged(); connectionsChanged(); @@ -227,7 +221,7 @@ public void onNeighbourChange( @Nonnull BlockPos neighbour ) else { // Drop everything and remove block - Block.spawnAsEntity( getWorld(), getPos(), new ItemStack( ComputerCraft.Items.wiredModem ) ); + Block.spawnAsEntity( getWorld(), getPos(), new ItemStack( Registry.ModItems.WIRED_MODEM.get() ) ); getWorld().removeBlock( getPos(), false ); // This'll call #destroy(), so we don't need to reset the network here. } @@ -287,7 +281,7 @@ public ActionResultType onActivate( PlayerEntity player, Hand hand, BlockRayTrac } @Override - public void read( CompoundNBT nbt ) + public void read( @Nonnull CompoundNBT nbt ) { super.read( nbt ); m_peripheralAccessAllowed = nbt.getBoolean( NBT_PERIPHERAL_ENABLED ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileWiredModemFull.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileWiredModemFull.java index 054da8aad..349cb6d28 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileWiredModemFull.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/TileWiredModemFull.java @@ -6,7 +6,6 @@ package dan200.computercraft.shared.peripheral.modem.wired; import com.google.common.base.Objects; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; import dan200.computercraft.api.network.wired.IWiredElement; import dan200.computercraft.api.network.wired.IWiredNode; @@ -14,14 +13,17 @@ import dan200.computercraft.shared.command.CommandCopy; import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.peripheral.modem.ModemState; -import dan200.computercraft.shared.util.*; +import dan200.computercraft.shared.util.CapabilityUtil; +import dan200.computercraft.shared.util.DirectionUtil; +import dan200.computercraft.shared.util.SidedCaps; +import dan200.computercraft.shared.util.TickScheduler; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; @@ -43,11 +45,6 @@ public class TileWiredModemFull extends TileGeneric { - public static final NamedTileEntityType FACTORY = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ), - TileWiredModemFull::new - ); - private static final String NBT_PERIPHERAL_ENABLED = "PeripheralAccess"; private static final class FullElement extends WiredModemElement @@ -111,9 +108,9 @@ public Vec3d getPosition() private final NonNullConsumer> connectedNodeChanged = x -> connectionsChanged(); - public TileWiredModemFull() + public TileWiredModemFull( TileEntityType type ) { - super( FACTORY ); + super( type ); for( int i = 0; i < m_peripherals.length; i++ ) { Direction facing = Direction.byIndex( i ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemLocalPeripheral.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemLocalPeripheral.java index 9314c4d74..94e5c7ade 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemLocalPeripheral.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemLocalPeripheral.java @@ -5,9 +5,9 @@ */ package dan200.computercraft.shared.peripheral.modem.wired; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.shared.Peripherals; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.util.IDAssigner; import net.minecraft.block.Block; import net.minecraft.nbt.CompoundNBT; @@ -144,7 +144,7 @@ private IPeripheral getPeripheralFrom( World world, BlockPos pos, Direction dire BlockPos offset = pos.offset( direction ); Block block = world.getBlockState( offset ).getBlock(); - if( block == ComputerCraft.Blocks.wiredModemFull || block == ComputerCraft.Blocks.cable ) return null; + if( block == Registry.ModBlocks.WIRED_MODEM_FULL.get() || block == Registry.ModBlocks.CABLE.get() ) return null; IPeripheral peripheral = Peripherals.getPeripheral( world, offset, direction.getOpposite(), invalidate ); return peripheral instanceof WiredModemPeripheral ? null : peripheral; diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/BlockWirelessModem.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/BlockWirelessModem.java index 33d0619ac..f95066025 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/BlockWirelessModem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/BlockWirelessModem.java @@ -7,7 +7,6 @@ import dan200.computercraft.shared.common.BlockGeneric; import dan200.computercraft.shared.peripheral.modem.ModemShapes; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.IWaterLoggable; @@ -17,6 +16,7 @@ import net.minecraft.state.DirectionProperty; import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; @@ -24,6 +24,7 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; +import net.minecraftforge.fml.RegistryObject; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -35,7 +36,7 @@ public class BlockWirelessModem extends BlockGeneric implements IWaterLoggable public static final DirectionProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty ON = BooleanProperty.create( "on" ); - public BlockWirelessModem( Properties settings, NamedTileEntityType type ) + public BlockWirelessModem( Properties settings, RegistryObject> type ) { super( settings, type ); setDefaultState( getStateContainer().getBaseState() @@ -53,7 +54,7 @@ protected void fillStateContainer( StateContainer.Builder bui @Nonnull @Override @Deprecated - public VoxelShape getShape( BlockState blockState, IBlockReader blockView, BlockPos blockPos, ISelectionContext context ) + public VoxelShape getShape( BlockState blockState, @Nonnull IBlockReader blockView, @Nonnull BlockPos blockPos, @Nonnull ISelectionContext context ) { return ModemShapes.getBounds( blockState.get( FACING ) ); } @@ -61,7 +62,7 @@ public VoxelShape getShape( BlockState blockState, IBlockReader blockView, Block @Nonnull @Override @Deprecated - public IFluidState getFluidState( BlockState state ) + public IFluidState getFluidState( @Nonnull BlockState state ) { return getWaterloggedFluidState( state ); } @@ -69,7 +70,7 @@ public IFluidState getFluidState( BlockState state ) @Nonnull @Override @Deprecated - public BlockState updatePostPlacement( @Nonnull BlockState state, Direction side, BlockState otherState, IWorld world, BlockPos pos, BlockPos otherPos ) + public BlockState updatePostPlacement( @Nonnull BlockState state, @Nonnull Direction side, @Nonnull BlockState otherState, @Nonnull IWorld world, @Nonnull BlockPos pos, @Nonnull BlockPos otherPos ) { updateWaterloggedPostPlacement( state, world, pos ); return side == state.get( FACING ) && !state.isValidPosition( world, pos ) diff --git a/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/TileWirelessModem.java b/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/TileWirelessModem.java index 620c86e5b..d13915afc 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/TileWirelessModem.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/modem/wireless/TileWirelessModem.java @@ -5,18 +5,15 @@ */ package dan200.computercraft.shared.peripheral.modem.wireless; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.peripheral.modem.ModemPeripheral; import dan200.computercraft.shared.peripheral.modem.ModemState; import dan200.computercraft.shared.util.CapabilityUtil; -import dan200.computercraft.shared.util.NamedTileEntityType; import dan200.computercraft.shared.util.TickScheduler; import net.minecraft.block.BlockState; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -30,16 +27,6 @@ public class TileWirelessModem extends TileGeneric { - public static final NamedTileEntityType FACTORY_NORMAL = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "wireless_modem_normal" ), - f -> new TileWirelessModem( f, false ) - ); - - public static final NamedTileEntityType FACTORY_ADVANCED = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "wireless_modem_advanced" ), - f -> new TileWirelessModem( f, true ) - ); - private static class Peripheral extends WirelessModemPeripheral { private final TileWirelessModem entity; diff --git a/src/main/java/dan200/computercraft/shared/peripheral/monitor/BlockMonitor.java b/src/main/java/dan200/computercraft/shared/peripheral/monitor/BlockMonitor.java index c1e5d0ed4..a6df660e4 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/monitor/BlockMonitor.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/monitor/BlockMonitor.java @@ -6,8 +6,6 @@ package dan200.computercraft.shared.peripheral.monitor; import dan200.computercraft.shared.common.BlockGeneric; -import dan200.computercraft.shared.common.TileGeneric; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.LivingEntity; @@ -18,10 +16,13 @@ import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.fml.RegistryObject; +import javax.annotation.Nonnull; import javax.annotation.Nullable; public class BlockMonitor extends BlockGeneric @@ -33,7 +34,7 @@ public class BlockMonitor extends BlockGeneric static final EnumProperty STATE = EnumProperty.create( "state", MonitorEdgeState.class ); - public BlockMonitor( Properties settings, NamedTileEntityType type ) + public BlockMonitor( Properties settings, RegistryObject> type ) { super( settings, type ); // TODO: Test underwater - do we need isSolid at all? @@ -76,7 +77,7 @@ else if( pitch < -66.5f ) } @Override - public void onBlockPlacedBy( World world, BlockPos pos, BlockState blockState, @Nullable LivingEntity livingEntity, ItemStack itemStack ) + public void onBlockPlacedBy( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState blockState, @Nullable LivingEntity livingEntity, @Nonnull ItemStack itemStack ) { super.onBlockPlacedBy( world, pos, blockState, livingEntity, itemStack ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java b/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java index b51277910..92603cae8 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/monitor/TileMonitor.java @@ -13,7 +13,6 @@ import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.network.client.TerminalState; import dan200.computercraft.shared.util.CapabilityUtil; -import dan200.computercraft.shared.util.NamedTileEntityType; import dan200.computercraft.shared.util.TickScheduler; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundNBT; @@ -22,7 +21,6 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; @@ -39,16 +37,6 @@ public class TileMonitor extends TileGeneric { - public static final NamedTileEntityType FACTORY_NORMAL = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "monitor_normal" ), - f -> new TileMonitor( f, false ) - ); - - public static final NamedTileEntityType FACTORY_ADVANCED = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "monitor_advanced" ), - f -> new TileMonitor( f, true ) - ); - public static final double RENDER_BORDER = 2.0 / 16.0; public static final double RENDER_MARGIN = 0.5 / 16.0; public static final double RENDER_PIXEL_SCALE = 1.0 / 64.0; @@ -149,7 +137,7 @@ public CompoundNBT write( CompoundNBT tag ) } @Override - public void read( CompoundNBT tag ) + public void read( @Nonnull CompoundNBT tag ) { super.read( tag ); m_xIndex = tag.getInt( NBT_X ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/printer/BlockPrinter.java b/src/main/java/dan200/computercraft/shared/peripheral/printer/BlockPrinter.java index ce6f7fd92..27bb47348 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/BlockPrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/BlockPrinter.java @@ -5,6 +5,7 @@ */ package dan200.computercraft.shared.peripheral.printer; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.BlockGeneric; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -34,7 +35,7 @@ public class BlockPrinter extends BlockGeneric public BlockPrinter( Properties settings ) { - super( settings, TilePrinter.FACTORY ); + super( settings, Registry.ModTiles.PRINTER ); setDefaultState( getStateContainer().getBaseState() .with( FACING, Direction.NORTH ) .with( TOP, false ) @@ -55,7 +56,7 @@ public BlockState getStateForPlacement( BlockItemUseContext placement ) } @Override - public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nullable TileEntity te, ItemStack stack ) + public void harvestBlock( @Nonnull World world, @Nonnull PlayerEntity player, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nullable TileEntity te, @Nonnull ItemStack stack ) { if( te instanceof INameable && ((INameable) te).hasCustomName() ) { @@ -73,7 +74,7 @@ public void harvestBlock( @Nonnull World world, PlayerEntity player, @Nonnull Bl } @Override - public void onBlockPlacedBy( World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack ) + public void onBlockPlacedBy( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, LivingEntity placer, ItemStack stack ) { if( stack.hasDisplayName() ) { diff --git a/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java b/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java index e4466a8ed..9f0666645 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/ContainerPrinter.java @@ -5,13 +5,13 @@ */ package dan200.computercraft.shared.peripheral.printer; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.util.SingleIntArray; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Inventory; import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.DyeItem; import net.minecraft.item.ItemStack; @@ -22,14 +22,12 @@ public class ContainerPrinter extends Container { - public static final ContainerType TYPE = new ContainerType<>( ContainerPrinter::new ); - private final IInventory inventory; private final IIntArray properties; private ContainerPrinter( int id, PlayerInventory player, IInventory inventory, IIntArray properties ) { - super( TYPE, id ); + super( Registry.ModContainers.PRINTER.get(), id ); this.properties = properties; this.inventory = inventory; @@ -60,7 +58,7 @@ private ContainerPrinter( int id, PlayerInventory player, IInventory inventory, } } - private ContainerPrinter( int id, PlayerInventory player ) + public ContainerPrinter( int id, PlayerInventory player ) { this( id, player, new Inventory( TilePrinter.SLOTS ), new IntArray( 1 ) ); } @@ -83,7 +81,7 @@ public boolean canInteractWith( @Nonnull PlayerEntity player ) @Nonnull @Override - public ItemStack transferStackInSlot( PlayerEntity player, int index ) + public ItemStack transferStackInSlot( @Nonnull PlayerEntity player, int index ) { Slot slot = inventorySlots.get( index ); if( slot == null || !slot.getHasStack() ) return ItemStack.EMPTY; diff --git a/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java b/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java index 65513f569..ac560c8b4 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/printer/TilePrinter.java @@ -5,7 +5,6 @@ */ package dan200.computercraft.shared.peripheral.printer; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.core.terminal.Terminal; import dan200.computercraft.shared.common.TileGeneric; @@ -20,6 +19,7 @@ import net.minecraft.inventory.container.INamedContainerProvider; import net.minecraft.item.*; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.*; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; @@ -40,11 +40,6 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInventory, INameable, INamedContainerProvider { - public static final NamedTileEntityType FACTORY = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "printer" ), - TilePrinter::new - ); - private static final String NBT_NAME = "CustomName"; private static final String NBT_PRINTING = "Printing"; private static final String NBT_PAGE_TITLE = "PageTitle"; @@ -66,9 +61,9 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInvent private String m_pageTitle = ""; private boolean m_printing = false; - private TilePrinter() + public TilePrinter( TileEntityType type ) { - super( FACTORY ); + super( type ); } @Override @@ -96,7 +91,7 @@ public ActionResultType onActivate( PlayerEntity player, Hand hand, BlockRayTrac } @Override - public void read( CompoundNBT nbt ) + public void read( @Nonnull CompoundNBT nbt ) { super.read( nbt ); @@ -116,7 +111,7 @@ public void read( CompoundNBT nbt ) @Nonnull @Override - public CompoundNBT write( CompoundNBT nbt ) + public CompoundNBT write( @Nonnull CompoundNBT nbt ) { if( customName != null ) nbt.putString( NBT_NAME, ITextComponent.Serializer.toJson( customName ) ); diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/BlockSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/BlockSpeaker.java index 902e4de47..bcc2b5149 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/BlockSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/BlockSpeaker.java @@ -5,6 +5,7 @@ */ package dan200.computercraft.shared.peripheral.speaker; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.common.BlockGeneric; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -22,7 +23,7 @@ public class BlockSpeaker extends BlockGeneric public BlockSpeaker( Properties settings ) { - super( settings, TileSpeaker.FACTORY ); + super( settings, Registry.ModTiles.SPEAKER ); setDefaultState( getStateContainer().getBaseState() .with( FACING, Direction.NORTH ) ); } diff --git a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java index 16fb6e5c2..793ef4aad 100644 --- a/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/peripheral/speaker/TileSpeaker.java @@ -5,14 +5,12 @@ */ package dan200.computercraft.shared.peripheral.speaker; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.shared.common.TileGeneric; import dan200.computercraft.shared.util.CapabilityUtil; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -28,17 +26,12 @@ public class TileSpeaker extends TileGeneric implements ITickableTileEntity { public static final int MIN_TICKS_BETWEEN_SOUNDS = 1; - public static final NamedTileEntityType FACTORY = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "speaker" ), - TileSpeaker::new - ); - private final SpeakerPeripheral peripheral; private LazyOptional peripheralCap; - public TileSpeaker() + public TileSpeaker( TileEntityType type ) { - super( FACTORY ); + super( type ); peripheral = new Peripheral( this ); } diff --git a/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java index 5de391f62..25f0151d8 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/inventory/ContainerPocketComputer.java @@ -5,15 +5,14 @@ */ package dan200.computercraft.shared.pocket.inventory; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.core.ServerComputer; import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import dan200.computercraft.shared.network.container.ComputerContainerData; -import dan200.computercraft.shared.network.container.ContainerData; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.INamedContainerProvider; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; @@ -24,24 +23,21 @@ public final class ContainerPocketComputer extends ContainerComputerBase { - public static final ContainerType TYPE = ContainerData.toType( ComputerContainerData::new, ContainerPocketComputer::new ); - private ContainerPocketComputer( int id, ServerComputer computer, ItemPocketComputer item, Hand hand ) { - super( TYPE, id, p -> { + super( Registry.ModContainers.POCKET_COMPUTER.get(), id, p -> { ItemStack stack = p.getHeldItem( hand ); return stack.getItem() == item && ItemPocketComputer.getServerComputer( stack ) == computer; }, computer, item.getFamily() ); } - private ContainerPocketComputer( int id, PlayerInventory player, ComputerContainerData data ) + public ContainerPocketComputer( int id, PlayerInventory player, ComputerContainerData data ) { - super( TYPE, id, player, data ); + super( Registry.ModContainers.POCKET_COMPUTER.get(), id, player, data ); } public static class Factory implements INamedContainerProvider { - private final ServerComputer computer; private final ITextComponent name; private final ItemPocketComputer item; diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java index bdc5318ed..a6258216a 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -86,7 +86,7 @@ public void fillItemGroup( @Nonnull ItemGroup group, @Nonnull NonNullList list, ITooltipFlag flag ) + public void addInformation( @Nonnull ItemStack stack, @Nullable World world, @Nonnull List list, ITooltipFlag flag ) { if( flag.isAdvanced() || getLabel( stack ) == null ) { diff --git a/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java b/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java index 5789b09c3..25b2210d1 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItemFactory.java @@ -5,8 +5,8 @@ */ package dan200.computercraft.shared.pocket.items; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.pocket.IPocketUpgrade; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.core.ComputerFamily; import net.minecraft.item.ItemStack; @@ -22,9 +22,9 @@ public static ItemStack create( int id, String label, int colour, ComputerFamily switch( family ) { case NORMAL: - return ComputerCraft.Items.pocketComputerNormal.create( id, label, colour, upgrade ); + return Registry.ModItems.POCKET_COMPUTER_NORMAL.get().create( id, label, colour, upgrade ); case ADVANCED: - return ComputerCraft.Items.pocketComputerAdvanced.create( id, label, colour, upgrade ); + return Registry.ModItems.POCKET_COMPUTER_ADVANCED.get().create( id, label, colour, upgrade ); default: return ItemStack.EMPTY; } diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java index 4d508a361..d8b626198 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketModem.java @@ -5,10 +5,10 @@ */ package dan200.computercraft.shared.pocket.peripherals; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.pocket.AbstractPocketUpgrade; import dan200.computercraft.api.pocket.IPocketAccess; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.peripheral.modem.ModemState; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -25,8 +25,8 @@ public PocketModem( boolean advanced ) super( new ResourceLocation( "computercraft", advanced ? "wireless_modem_advanced" : "wireless_modem_normal" ), advanced - ? ComputerCraft.Blocks.wirelessModemAdvanced - : ComputerCraft.Blocks.wirelessModemNormal + ? Registry.ModBlocks.WIRELESS_MODEM_ADVANCED + : Registry.ModBlocks.WIRELESS_MODEM_NORMAL ); this.advanced = advanced; } diff --git a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java index 4a3ea0dc8..84ed6d85d 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/pocket/peripherals/PocketSpeaker.java @@ -5,10 +5,10 @@ */ package dan200.computercraft.shared.pocket.peripherals; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.pocket.AbstractPocketUpgrade; import dan200.computercraft.api.pocket.IPocketAccess; +import dan200.computercraft.shared.Registry; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; @@ -19,7 +19,7 @@ public class PocketSpeaker extends AbstractPocketUpgrade { public PocketSpeaker() { - super( new ResourceLocation( "computercraft", "speaker" ), ComputerCraft.Blocks.speaker ); + super( new ResourceLocation( "computercraft", "speaker" ), Registry.ModBlocks.SPEAKER ); } @Nullable diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java index 4db44703d..6c1eb4871 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/BlockTurtle.java @@ -12,7 +12,6 @@ import dan200.computercraft.shared.turtle.core.TurtleBrain; import dan200.computercraft.shared.turtle.items.ITurtleItem; import dan200.computercraft.shared.turtle.items.TurtleItemFactory; -import dan200.computercraft.shared.util.NamedTileEntityType; import net.minecraft.block.Block; import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; @@ -28,6 +27,7 @@ import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; @@ -36,6 +36,7 @@ import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.world.*; +import net.minecraftforge.fml.RegistryObject; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -52,7 +53,7 @@ public class BlockTurtle extends BlockComputerBase implements IWater 0.875, 0.875, 0.875 ); - public BlockTurtle( Properties settings, ComputerFamily family, NamedTileEntityType type ) + public BlockTurtle( Properties settings, ComputerFamily family, RegistryObject> type ) { super( settings, family, type ); setDefaultState( getStateContainer().getBaseState() @@ -70,7 +71,7 @@ protected void fillStateContainer( StateContainer.Builder bui @Nonnull @Override @Deprecated - public BlockRenderType getRenderType( BlockState state ) + public BlockRenderType getRenderType( @Nonnull BlockState state ) { return BlockRenderType.ENTITYBLOCK_ANIMATED; } @@ -78,7 +79,7 @@ public BlockRenderType getRenderType( BlockState state ) @Nonnull @Override @Deprecated - public VoxelShape getShape( BlockState state, IBlockReader world, BlockPos pos, ISelectionContext context ) + public VoxelShape getShape( @Nonnull BlockState state, IBlockReader world, @Nonnull BlockPos pos, @Nonnull ISelectionContext context ) { TileEntity tile = world.getTileEntity( pos ); Vec3d offset = tile instanceof TileTurtle ? ((TileTurtle) tile).getRenderOffset( 1.0f ) : Vec3d.ZERO; @@ -97,7 +98,7 @@ public BlockState getStateForPlacement( BlockItemUseContext placement ) @Nonnull @Override @Deprecated - public IFluidState getFluidState( BlockState state ) + public IFluidState getFluidState( @Nonnull BlockState state ) { return getWaterloggedFluidState( state ); } @@ -105,14 +106,14 @@ public IFluidState getFluidState( BlockState state ) @Nonnull @Override @Deprecated - public BlockState updatePostPlacement( @Nonnull BlockState state, Direction side, BlockState otherState, IWorld world, BlockPos pos, BlockPos otherPos ) + public BlockState updatePostPlacement( @Nonnull BlockState state, @Nonnull Direction side, @Nonnull BlockState otherState, @Nonnull IWorld world, @Nonnull BlockPos pos, @Nonnull BlockPos otherPos ) { updateWaterloggedPostPlacement( state, world, pos ); return state; } @Override - public void onBlockPlacedBy( World world, BlockPos pos, BlockState state, @Nullable LivingEntity player, @Nonnull ItemStack stack ) + public void onBlockPlacedBy( @Nonnull World world, @Nonnull BlockPos pos, @Nonnull BlockState state, @Nullable LivingEntity player, @Nonnull ItemStack stack ) { super.onBlockPlacedBy( world, pos, state, player, stack ); diff --git a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java index 7954d83c2..bb7feed4a 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/blocks/TileTurtle.java @@ -56,16 +56,6 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default public static final int INVENTORY_WIDTH = 4; public static final int INVENTORY_HEIGHT = 4; - public static final NamedTileEntityType FACTORY_NORMAL = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "turtle_normal" ), - type -> new TileTurtle( type, ComputerFamily.NORMAL ) - ); - - public static final NamedTileEntityType FACTORY_ADVANCED = NamedTileEntityType.create( - new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ), - type -> new TileTurtle( type, ComputerFamily.ADVANCED ) - ); - enum MoveState { NOT_MOVED, @@ -266,7 +256,7 @@ public void notifyMoveEnd() } @Override - public void read( CompoundNBT nbt ) + public void read( @Nonnull CompoundNBT nbt ) { super.read( nbt ); @@ -291,7 +281,7 @@ public void read( CompoundNBT nbt ) @Nonnull @Override - public CompoundNBT write( CompoundNBT nbt ) + public CompoundNBT write( @Nonnull CompoundNBT nbt ) { // Write inventory ListNBT nbttaglist = new ListNBT(); diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java index 082a5b1c0..a9480bc40 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtlePlayer.java @@ -8,10 +8,14 @@ import com.mojang.authlib.GameProfile; import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleAccess; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.util.FakeNetHandler; import dan200.computercraft.shared.util.InventoryUtil; import dan200.computercraft.shared.util.WorldUtil; -import net.minecraft.entity.*; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntitySize; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.Pose; import net.minecraft.entity.passive.horse.AbstractHorseEntity; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.container.INamedContainerProvider; @@ -37,12 +41,6 @@ public final class TurtlePlayer extends FakePlayer "[ComputerCraft]" ); - public static final EntityType TYPE = EntityType.Builder.create( EntityClassification.MISC ) - .disableSerialization() - .disableSummoning() - .size( 0, 0 ) - .build( ComputerCraft.MOD_ID + ":turtle_player" ); - private TurtlePlayer( ITurtleAccess turtle ) { super( (ServerWorld) turtle.getWorld(), getProfile( turtle.getOwningPlayer() ) ); @@ -129,7 +127,7 @@ public ItemStack unloadInventory( ITurtleAccess turtle ) @Override public EntityType getType() { - return TYPE; + return Registry.ModEntities.TURTLE_PLAYER.get(); } @Override @@ -145,7 +143,7 @@ public float getEyeHeight( @Nonnull Pose pose ) } @Override - public float getStandingEyeHeight( Pose pose, EntitySize size ) + public float getStandingEyeHeight( @Nonnull Pose pose, @Nonnull EntitySize size ) { return 0; } @@ -180,17 +178,17 @@ public void stopRiding() } @Override - public void openSignEditor( SignTileEntity signTile ) + public void openSignEditor( @Nonnull SignTileEntity signTile ) { } @Override - public void openHorseInventory( AbstractHorseEntity horse, IInventory inventory ) + public void openHorseInventory( @Nonnull AbstractHorseEntity horse, @Nonnull IInventory inventory ) { } @Override - public void openBook( ItemStack stack, @Nonnull Hand hand ) + public void openBook( @Nonnull ItemStack stack, @Nonnull Hand hand ) { } @@ -205,17 +203,17 @@ public void updateHeldItem() } @Override - protected void onNewPotionEffect( EffectInstance id ) + protected void onNewPotionEffect( @Nonnull EffectInstance id ) { } @Override - protected void onChangedPotionEffect( EffectInstance id, boolean apply ) + protected void onChangedPotionEffect( @Nonnull EffectInstance id, boolean apply ) { } @Override - protected void onFinishedPotionEffect( EffectInstance effect ) + protected void onFinishedPotionEffect( @Nonnull EffectInstance effect ) { } //endregion diff --git a/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java b/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java index e33a59707..f5d2c7054 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java +++ b/src/main/java/dan200/computercraft/shared/turtle/inventory/ContainerTurtle.java @@ -5,11 +5,11 @@ */ package dan200.computercraft.shared.turtle.inventory; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.computer.core.IComputer; import dan200.computercraft.shared.computer.inventory.ContainerComputerBase; import dan200.computercraft.shared.network.container.ComputerContainerData; -import dan200.computercraft.shared.network.container.ContainerData; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.core.TurtleBrain; import dan200.computercraft.shared.util.SingleIntArray; @@ -17,7 +17,6 @@ import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.IIntArray; @@ -28,8 +27,6 @@ public class ContainerTurtle extends ContainerComputerBase { - public static final ContainerType TYPE = ContainerData.toType( ComputerContainerData::new, ContainerTurtle::new ); - public static final int PLAYER_START_Y = 134; public static final int TURTLE_START_X = 175; @@ -40,7 +37,7 @@ private ContainerTurtle( PlayerInventory playerInventory, IInventory inventory, IIntArray properties ) { - super( TYPE, id, canUse, computer, family ); + super( Registry.ModContainers.TURTLE.get(), id, canUse, computer, family ); this.properties = properties; trackIntArray( properties ); @@ -78,7 +75,7 @@ public ContainerTurtle( int id, PlayerInventory player, TurtleBrain turtle ) ); } - private ContainerTurtle( int id, PlayerInventory player, ComputerContainerData data ) + public ContainerTurtle( int id, PlayerInventory player, ComputerContainerData data ) { this( id, x -> true, getComputer( player, data ), data.getFamily(), @@ -128,7 +125,7 @@ private ItemStack tryItemMerge( PlayerEntity player, int slotNum, int firstSlot, @Nonnull @Override - public ItemStack transferStackInSlot( PlayerEntity player, int slotNum ) + public ItemStack transferStackInSlot( @Nonnull PlayerEntity player, int slotNum ) { if( slotNum >= 0 && slotNum < 16 ) { diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java b/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java index 8370e7066..cb472937e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/TurtleItemFactory.java @@ -5,10 +5,10 @@ */ package dan200.computercraft.shared.turtle.items; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.turtle.ITurtleAccess; import dan200.computercraft.api.turtle.ITurtleUpgrade; import dan200.computercraft.api.turtle.TurtleSide; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.computer.core.ComputerFamily; import dan200.computercraft.shared.turtle.blocks.ITurtleTile; import net.minecraft.item.ItemStack; @@ -38,9 +38,9 @@ public static ItemStack create( int id, String label, int colour, ComputerFamily switch( family ) { case NORMAL: - return ComputerCraft.Items.turtleNormal.create( id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay ); + return Registry.ModItems.TURTLE_NORMAL.get().create( id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay ); case ADVANCED: - return ComputerCraft.Items.turtleAdvanced.create( id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay ); + return Registry.ModItems.TURTLE_ADVANCED.get().create( id, label, colour, leftUpgrade, rightUpgrade, fuelLevel, overlay ); default: return ItemStack.EMPTY; } diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java index 3acee621c..8e01c80b2 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java @@ -206,7 +206,7 @@ public void markDirty() } @Override - public boolean isUsableByPlayer( PlayerEntity player ) + public boolean isUsableByPlayer( @Nonnull PlayerEntity player ) { return true; } diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java index 15aae7ceb..4632d5db9 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleModem.java @@ -5,10 +5,10 @@ */ package dan200.computercraft.shared.turtle.upgrades; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.client.TransformedModel; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.turtle.*; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.peripheral.modem.ModemState; import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemPeripheral; import net.minecraft.client.renderer.model.ModelResourceLocation; @@ -61,7 +61,7 @@ public boolean equals( IPeripheral other ) } } - private boolean advanced; + private final boolean advanced; @OnlyIn( Dist.CLIENT ) private ModelResourceLocation m_leftOffModel; @@ -80,8 +80,8 @@ public TurtleModem( boolean advanced, ResourceLocation id ) super( id, TurtleUpgradeType.PERIPHERAL, advanced - ? ComputerCraft.Blocks.wirelessModemAdvanced - : ComputerCraft.Blocks.wirelessModemNormal + ? Registry.ModBlocks.WIRELESS_MODEM_ADVANCED + : Registry.ModBlocks.WIRELESS_MODEM_NORMAL ); this.advanced = advanced; } diff --git a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java index 35bd70886..0a605660e 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java +++ b/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleSpeaker.java @@ -6,13 +6,13 @@ package dan200.computercraft.shared.turtle.upgrades; -import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.client.TransformedModel; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.turtle.AbstractTurtleUpgrade; import dan200.computercraft.api.turtle.ITurtleAccess; import dan200.computercraft.api.turtle.TurtleSide; import dan200.computercraft.api.turtle.TurtleUpgradeType; +import dan200.computercraft.shared.Registry; import dan200.computercraft.shared.peripheral.speaker.SpeakerPeripheral; import net.minecraft.client.renderer.model.ModelResourceLocation; import net.minecraft.util.ResourceLocation; @@ -63,7 +63,7 @@ public boolean equals( IPeripheral other ) public TurtleSpeaker( ResourceLocation id ) { - super( id, TurtleUpgradeType.PERIPHERAL, ComputerCraft.Blocks.speaker ); + super( id, TurtleUpgradeType.PERIPHERAL, Registry.ModBlocks.SPEAKER ); } @Override diff --git a/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java b/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java index c28a2d5ce..19da95ff5 100644 --- a/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java +++ b/src/main/java/dan200/computercraft/shared/util/CreativeTabMain.java @@ -6,6 +6,7 @@ package dan200.computercraft.shared.util; import dan200.computercraft.ComputerCraft; +import dan200.computercraft.shared.Registry; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; @@ -25,6 +26,6 @@ public CreativeTabMain() @OnlyIn( Dist.CLIENT ) public ItemStack createIcon() { - return new ItemStack( ComputerCraft.Blocks.computerNormal ); + return new ItemStack( Registry.ModBlocks.COMPUTER_NORMAL.get() ); } } diff --git a/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java b/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java index 130152587..02fae31ab 100644 --- a/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java +++ b/src/main/java/dan200/computercraft/shared/util/FakeNetHandler.java @@ -36,7 +36,7 @@ public void disconnect( @Nonnull ITextComponent reason ) } @Override - public void onDisconnect( ITextComponent reason ) + public void onDisconnect( @Nonnull ITextComponent reason ) { } @@ -51,32 +51,32 @@ public void sendPacket( @Nonnull IPacket packet, @Nullable GenericFutureListe } @Override - public void processInput( CInputPacket packet ) + public void processInput( @Nonnull CInputPacket packet ) { } @Override - public void processVehicleMove( CMoveVehiclePacket packet ) + public void processVehicleMove( @Nonnull CMoveVehiclePacket packet ) { } @Override - public void processConfirmTeleport( CConfirmTeleportPacket packet ) + public void processConfirmTeleport( @Nonnull CConfirmTeleportPacket packet ) { } @Override - public void handleRecipeBookUpdate( CRecipeInfoPacket packet ) + public void handleRecipeBookUpdate( @Nonnull CRecipeInfoPacket packet ) { } @Override - public void handleSeenAdvancements( CSeenAdvancementsPacket packet ) + public void handleSeenAdvancements( @Nonnull CSeenAdvancementsPacket packet ) { } @Override - public void processTabComplete( CTabCompletePacket packet ) + public void processTabComplete( @Nonnull CTabCompletePacket packet ) { } @@ -91,7 +91,7 @@ public void processUpdateCommandMinecart( @Nonnull CUpdateMinecartCommandBlockPa } @Override - public void processPickItem( CPickItemPacket packet ) + public void processPickItem( @Nonnull CPickItemPacket packet ) { } @@ -116,12 +116,12 @@ public void func_217262_a( @Nonnull CUpdateJigsawBlockPacket packet ) } @Override - public void processSelectTrade( CSelectTradePacket packet ) + public void processSelectTrade( @Nonnull CSelectTradePacket packet ) { } @Override - public void processEditBook( CEditBookPacket packet ) + public void processEditBook( @Nonnull CEditBookPacket packet ) { } @@ -136,22 +136,22 @@ public void processNBTQueryBlockEntity( @Nonnull CQueryTileEntityNBTPacket packe } @Override - public void processPlayer( CPlayerPacket packet ) + public void processPlayer( @Nonnull CPlayerPacket packet ) { } @Override - public void processPlayerDigging( CPlayerDiggingPacket packet ) + public void processPlayerDigging( @Nonnull CPlayerDiggingPacket packet ) { } @Override - public void processTryUseItemOnBlock( CPlayerTryUseItemOnBlockPacket packet ) + public void processTryUseItemOnBlock( @Nonnull CPlayerTryUseItemOnBlockPacket packet ) { } @Override - public void processTryUseItem( CPlayerTryUseItemPacket packet ) + public void processTryUseItem( @Nonnull CPlayerTryUseItemPacket packet ) { } @@ -161,7 +161,7 @@ public void handleSpectate( @Nonnull CSpectatePacket packet ) } @Override - public void handleResourcePackStatus( CResourcePackStatusPacket packet ) + public void handleResourcePackStatus( @Nonnull CResourcePackStatusPacket packet ) { } @@ -171,7 +171,7 @@ public void processSteerBoat( @Nonnull CSteerBoatPacket packet ) } @Override - public void processHeldItemChange( CHeldItemChangePacket packet ) + public void processHeldItemChange( @Nonnull CHeldItemChangePacket packet ) { } @@ -181,22 +181,22 @@ public void processChatMessage( @Nonnull CChatMessagePacket packet ) } @Override - public void handleAnimation( CAnimateHandPacket packet ) + public void handleAnimation( @Nonnull CAnimateHandPacket packet ) { } @Override - public void processEntityAction( CEntityActionPacket packet ) + public void processEntityAction( @Nonnull CEntityActionPacket packet ) { } @Override - public void processUseEntity( CUseEntityPacket packet ) + public void processUseEntity( @Nonnull CUseEntityPacket packet ) { } @Override - public void processClientStatus( CClientStatusPacket packet ) + public void processClientStatus( @Nonnull CClientStatusPacket packet ) { } @@ -206,7 +206,7 @@ public void processCloseWindow( @Nonnull CCloseWindowPacket packet ) } @Override - public void processClickWindow( CClickWindowPacket packet ) + public void processClickWindow( @Nonnull CClickWindowPacket packet ) { } @@ -216,7 +216,7 @@ public void processPlaceRecipe( @Nonnull CPlaceRecipePacket packet ) } @Override - public void processEnchantItem( CEnchantItemPacket packet ) + public void processEnchantItem( @Nonnull CEnchantItemPacket packet ) { } @@ -226,12 +226,12 @@ public void processCreativeInventoryAction( @Nonnull CCreativeInventoryActionPac } @Override - public void processConfirmTransaction( CConfirmTransactionPacket packet ) + public void processConfirmTransaction( @Nonnull CConfirmTransactionPacket packet ) { } @Override - public void processUpdateSign( CUpdateSignPacket packet ) + public void processUpdateSign( @Nonnull CUpdateSignPacket packet ) { } @@ -241,7 +241,7 @@ public void processKeepAlive( @Nonnull CKeepAlivePacket packet ) } @Override - public void processPlayerAbilities( CPlayerAbilitiesPacket packet ) + public void processPlayerAbilities( @Nonnull CPlayerAbilitiesPacket packet ) { } @@ -251,7 +251,7 @@ public void processClientSettings( @Nonnull CClientSettingsPacket packet ) } @Override - public void processCustomPayload( CCustomPayloadPacket packet ) + public void processCustomPayload( @Nonnull CCustomPayloadPacket packet ) { } @@ -276,7 +276,7 @@ private static class FakeNetworkManager extends NetworkManager } @Override - public void channelActive( ChannelHandlerContext context ) + public void channelActive( @Nonnull ChannelHandlerContext context ) { } @@ -286,22 +286,22 @@ public void setConnectionState( @Nonnull ProtocolType state ) } @Override - public void channelInactive( ChannelHandlerContext context ) + public void channelInactive( @Nonnull ChannelHandlerContext context ) { } @Override - public void exceptionCaught( ChannelHandlerContext context, @Nonnull Throwable err ) + public void exceptionCaught( @Nonnull ChannelHandlerContext context, @Nonnull Throwable err ) { } @Override - protected void channelRead0( ChannelHandlerContext context, @Nonnull IPacket packet ) + protected void channelRead0( @Nonnull ChannelHandlerContext context, @Nonnull IPacket packet ) { } @Override - public void setNetHandler( INetHandler handler ) + public void setNetHandler( @Nonnull INetHandler handler ) { this.handler = handler; } @@ -328,7 +328,7 @@ public void closeChannel( @Nonnull ITextComponent message ) } @Override - public void enableEncryption( SecretKey key ) + public void enableEncryption( @Nonnull SecretKey key ) { } diff --git a/src/main/java/dan200/computercraft/shared/util/FixedPointTileEntityType.java b/src/main/java/dan200/computercraft/shared/util/FixedPointTileEntityType.java new file mode 100644 index 000000000..c711c256e --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/util/FixedPointTileEntityType.java @@ -0,0 +1,60 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2020. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ +package dan200.computercraft.shared.util; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityType; + +import javax.annotation.Nonnull; +import java.util.Collections; +import java.util.function.Function; +import java.util.function.Supplier; + +/** + * A {@link TileEntityType} whose supplier uses itself as an argument. + * + * @param The type of the produced tile entity. + */ +public final class FixedPointTileEntityType extends TileEntityType +{ + private final Supplier block; + + private FixedPointTileEntityType( Supplier block, Supplier builder ) + { + super( builder, Collections.emptySet(), null ); + this.block = block; + } + + public static FixedPointTileEntityType create( Supplier block, Function, T> builder ) + { + return new FixedPointSupplier<>( block, builder ).factory; + } + + @Override + public boolean isValidBlock( @Nonnull Block block ) + { + return block == this.block.get(); + } + + private static final class FixedPointSupplier implements Supplier + { + final FixedPointTileEntityType factory; + private final Function, T> builder; + + private FixedPointSupplier( Supplier block, Function, T> builder ) + { + factory = new FixedPointTileEntityType<>( block, this ); + this.builder = builder; + } + + @Override + public T get() + { + return builder.apply( factory ); + } + } +} diff --git a/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java b/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java index 9eea89d94..d5946f19b 100644 --- a/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java +++ b/src/main/java/dan200/computercraft/shared/util/ImpostorRecipe.java @@ -38,7 +38,7 @@ public String getGroup() } @Override - public boolean matches( @Nonnull CraftingInventory inv, World world ) + public boolean matches( @Nonnull CraftingInventory inv, @Nonnull World world ) { return false; } diff --git a/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java b/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java index 33598472e..5553ef484 100644 --- a/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java +++ b/src/main/java/dan200/computercraft/shared/util/ImpostorShapelessRecipe.java @@ -40,14 +40,14 @@ public String getGroup() } @Override - public boolean matches( CraftingInventory inv, World world ) + public boolean matches( @Nonnull CraftingInventory inv, @Nonnull World world ) { return false; } @Nonnull @Override - public ItemStack getCraftingResult( CraftingInventory inventory ) + public ItemStack getCraftingResult( @Nonnull CraftingInventory inventory ) { return ItemStack.EMPTY; } diff --git a/src/main/java/dan200/computercraft/shared/util/InventoryDelegate.java b/src/main/java/dan200/computercraft/shared/util/InventoryDelegate.java index 98a2523ca..e00616f65 100644 --- a/src/main/java/dan200/computercraft/shared/util/InventoryDelegate.java +++ b/src/main/java/dan200/computercraft/shared/util/InventoryDelegate.java @@ -58,7 +58,7 @@ default ItemStack removeStackFromSlot( int slot ) } @Override - default void setInventorySlotContents( int slot, ItemStack stack ) + default void setInventorySlotContents( int slot, @Nonnull ItemStack stack ) { getInventory().setInventorySlotContents( slot, stack ); } diff --git a/src/main/java/dan200/computercraft/shared/util/NamedTileEntityType.java b/src/main/java/dan200/computercraft/shared/util/NamedTileEntityType.java deleted file mode 100644 index fed7ca91a..000000000 --- a/src/main/java/dan200/computercraft/shared/util/NamedTileEntityType.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of ComputerCraft - http://www.computercraft.info - * Copyright Daniel Ratcliffe, 2011-2020. Do not distribute without permission. - * Send enquiries to dratcliffe@gmail.com - */ -package dan200.computercraft.shared.util; - -import net.minecraft.block.Block; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.ResourceLocation; - -import javax.annotation.Nonnull; -import java.util.Collections; -import java.util.Objects; -import java.util.function.Function; -import java.util.function.Supplier; - -public final class NamedTileEntityType extends TileEntityType -{ - private final ResourceLocation identifier; - private Block block; - - private NamedTileEntityType( ResourceLocation identifier, Supplier supplier ) - { - super( supplier, Collections.emptySet(), null ); - this.identifier = identifier; - setRegistryName( identifier ); - } - - public static NamedTileEntityType create( ResourceLocation identifier, Supplier supplier ) - { - return new NamedTileEntityType<>( identifier, supplier ); - } - - public static NamedTileEntityType create( ResourceLocation identifier, Function, ? extends T> builder ) - { - return new FixedPointSupplier<>( identifier, builder ).factory; - } - - public void setBlock( @Nonnull Block block ) - { - if( this.block != null ) throw new IllegalStateException( "Cannot change block once set" ); - this.block = Objects.requireNonNull( block, "block cannot be null" ); - } - - @Override - public boolean isValidBlock( @Nonnull Block block ) - { - return block == this.block; - } - - public ResourceLocation getId() - { - return identifier; - } - - private static final class FixedPointSupplier implements Supplier - { - final NamedTileEntityType factory; - private final Function, ? extends T> builder; - - private FixedPointSupplier( ResourceLocation identifier, Function, ? extends T> builder ) - { - factory = create( identifier, this ); - this.builder = builder; - } - - @Override - public T get() - { - return builder.apply( factory ); - } - } -} diff --git a/src/main/java/dan200/computercraft/shared/util/ValidatingSlot.java b/src/main/java/dan200/computercraft/shared/util/ValidatingSlot.java index f81cc079f..40772efcd 100644 --- a/src/main/java/dan200/computercraft/shared/util/ValidatingSlot.java +++ b/src/main/java/dan200/computercraft/shared/util/ValidatingSlot.java @@ -9,6 +9,8 @@ import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; +import javax.annotation.Nonnull; + public class ValidatingSlot extends Slot { public ValidatingSlot( IInventory inventoryIn, int index, int xPosition, int yPosition ) @@ -17,7 +19,7 @@ public ValidatingSlot( IInventory inventoryIn, int index, int xPosition, int yPo } @Override - public boolean isItemValid( ItemStack stack ) + public boolean isItemValid( @Nonnull ItemStack stack ) { return true; // inventory.isItemValidForSlot( slotNumber, stack ); } diff --git a/src/main/java/dan200/computercraft/shared/util/WorldUtil.java b/src/main/java/dan200/computercraft/shared/util/WorldUtil.java index dbd74cd06..d483c7d74 100644 --- a/src/main/java/dan200/computercraft/shared/util/WorldUtil.java +++ b/src/main/java/dan200/computercraft/shared/util/WorldUtil.java @@ -38,7 +38,7 @@ private static synchronized Entity getEntity( World world ) { @Nonnull @Override - public EntitySize getSize( Pose pose ) + public EntitySize getSize( @Nonnull Pose pose ) { return EntitySize.fixed( 0, 0 ); }