diff --git a/src/main/java/dan200/computercraft/ComputerCraft.java b/src/main/java/dan200/computercraft/ComputerCraft.java index 96f777f98..25099bfbd 100644 --- a/src/main/java/dan200/computercraft/ComputerCraft.java +++ b/src/main/java/dan200/computercraft/ComputerCraft.java @@ -172,48 +172,53 @@ public class ComputerCraft public static class Blocks { public static BlockComputer computer; - public static BlockPeripheral peripheral; - public static BlockCable cable; + public static BlockCommandComputer commandComputer; + public static BlockTurtle turtle; public static BlockTurtle turtleExpanded; public static BlockTurtle turtleAdvanced; - public static BlockCommandComputer commandComputer; + + public static BlockPeripheral peripheral; + public static BlockCable cable; public static BlockAdvancedModem advancedModem; public static BlockWiredModemFull wiredModemFull; } public static class Items { + public static ItemPocketComputer pocketComputer; + public static ItemDiskLegacy disk; public static ItemDiskExpanded diskExpanded; - public static ItemPrintout printout; public static ItemTreasureDisk treasureDisk; - public static ItemPocketComputer pocketComputer; + + public static ItemPrintout printout; } - public static class Upgrades + public static class TurtleUpgrades { public static TurtleModem wirelessModem; + public static TurtleModem advancedModem; + public static TurtleSpeaker speaker; + public static TurtleCraftingTable craftingTable; public static TurtleSword diamondSword; public static TurtleShovel diamondShovel; public static TurtleTool diamondPickaxe; public static TurtleAxe diamondAxe; public static TurtleHoe diamondHoe; - public static TurtleModem advancedModem; - public static TurtleSpeaker turtleSpeaker; } public static class PocketUpgrades { public static PocketModem wirelessModem; public static PocketModem advancedModem; - public static PocketSpeaker pocketSpeaker; + public static PocketSpeaker speaker; } // Registries - public static ClientComputerRegistry clientComputerRegistry = new ClientComputerRegistry(); - public static ServerComputerRegistry serverComputerRegistry = new ServerComputerRegistry(); + public static final ClientComputerRegistry clientComputerRegistry = new ClientComputerRegistry(); + public static final ServerComputerRegistry serverComputerRegistry = new ServerComputerRegistry(); // Networking public static SimpleNetworkWrapper networkWrapper; @@ -680,7 +685,7 @@ private static File getDebugCodeDir( Class modClass ) @Deprecated public static void registerTurtleUpgrade( ITurtleUpgrade upgrade ) { - TurtleUpgrades.register( upgrade ); + dan200.computercraft.shared.TurtleUpgrades.register( upgrade ); } //region Compatibility @@ -699,7 +704,7 @@ public static IPocketUpgrade getPocketUpgrade( ItemStack stack ) @Deprecated public static ITurtleUpgrade getTurtleUpgrade( ItemStack stack ) { - return TurtleUpgrades.get( stack ); + return dan200.computercraft.shared.TurtleUpgrades.get( stack ); } @Deprecated @@ -711,7 +716,7 @@ public static IPocketUpgrade getPocketUpgrade( String id ) @Deprecated public static ITurtleUpgrade getTurtleUpgrade( String id ) { - return TurtleUpgrades.get( id ); + return dan200.computercraft.shared.TurtleUpgrades.get( id ); } @Deprecated diff --git a/src/main/java/dan200/computercraft/client/ClientRegistry.java b/src/main/java/dan200/computercraft/client/ClientRegistry.java new file mode 100644 index 000000000..03f745ebd --- /dev/null +++ b/src/main/java/dan200/computercraft/client/ClientRegistry.java @@ -0,0 +1,190 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.client; + +import dan200.computercraft.ComputerCraft; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ModelBakery; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.client.model.ModelLoaderRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.relauncher.Side; + +import javax.annotation.Nonnull; + +/** + * Registers textures and models for items. + */ +@Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID, value = Side.CLIENT ) +public class ClientRegistry +{ + private static final String[] TURTLE_UPGRADES = { + "turtle_modem_off_left", + "turtle_modem_on_left", + "turtle_modem_off_right", + "turtle_modem_on_right", + "turtle_crafting_table_left", + "turtle_crafting_table_right", + "advanced_turtle_modem_off_left", + "advanced_turtle_modem_on_left", + "advanced_turtle_modem_off_right", + "advanced_turtle_modem_on_right", + "turtle_speaker_upgrade_left", + "turtle_speaker_upgrade_right", + }; + + @SubscribeEvent + public static void registerModels( ModelRegistryEvent event ) + { + // Register item models + registerUniversalItemModel( ComputerCraft.Blocks.computer, "computer" ); + registerItemModel( ComputerCraft.Blocks.commandComputer, 0, "command_computer" ); + + registerItemModel( ComputerCraft.Items.pocketComputer, 0, "pocket_computer" ); + registerItemModel( ComputerCraft.Items.pocketComputer, 1, "advanced_pocket_computer" ); + + registerItemModel( ComputerCraft.Blocks.peripheral, 0, "peripheral" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 1, "wireless_modem" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 2, "monitor" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 3, "printer" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 4, "advanced_monitor" ); + registerItemModel( ComputerCraft.Blocks.cable, 0, "cable" ); + registerItemModel( ComputerCraft.Blocks.cable, 1, "wired_modem" ); + registerItemModel( ComputerCraft.Blocks.advancedModem, 0, "advanced_modem" ); + registerItemModel( ComputerCraft.Blocks.peripheral, 5, "speaker" ); + registerItemModel( ComputerCraft.Blocks.wiredModemFull, 0, "wired_modem_full" ); + + registerUniversalItemModel( ComputerCraft.Items.disk, "disk" ); + registerItemModel( ComputerCraft.Items.diskExpanded, 0, "disk_expanded" ); + registerItemModel( ComputerCraft.Items.treasureDisk, 0, "treasure_disk" ); + + registerItemModel( ComputerCraft.Items.printout, 0, "printout" ); + registerItemModel( ComputerCraft.Items.printout, 1, "pages" ); + registerItemModel( ComputerCraft.Items.printout, 2, "book" ); + + ItemMeshDefinition turtleMeshDefinition = new ItemMeshDefinition() + { + private ModelResourceLocation turtle_dynamic = new ModelResourceLocation( "computercraft:turtle_dynamic", "inventory" ); + + @Nonnull + @Override + public ModelResourceLocation getModelLocation( @Nonnull ItemStack stack ) + { + return turtle_dynamic; + } + }; + String[] turtleModelNames = new String[] { + "turtle_dynamic", + "turtle", "turtle_advanced", "turtle_white", + "turtle_elf_overlay" + }; + + registerUniversalItemModel( ComputerCraft.Blocks.turtle, turtleMeshDefinition, turtleModelNames ); + registerUniversalItemModel( ComputerCraft.Blocks.turtleExpanded, turtleMeshDefinition, turtleModelNames ); + registerUniversalItemModel( ComputerCraft.Blocks.turtleAdvanced, turtleMeshDefinition, turtleModelNames ); + } + + @SubscribeEvent + public static void onTextureStitchEvent( TextureStitchEvent.Pre event ) + { + // Load all textures for upgrades + TextureMap map = event.getMap(); + for( String upgrade : TURTLE_UPGRADES ) + { + IModel model = ModelLoaderRegistry.getModelOrMissing( new ResourceLocation( "computercraft", "block/" + upgrade ) ); + for( ResourceLocation texture : model.getTextures() ) + { + map.registerSprite( texture ); + } + } + } + + @SubscribeEvent + public static void onModelBakeEvent( ModelBakeEvent event ) + { + // Load all upgrade models + for( String upgrade : TURTLE_UPGRADES ) + { + loadBlockModel( event, upgrade ); + } + } + + private static void registerItemModel( Block block, int damage, String name ) + { + registerItemModel( Item.getItemFromBlock( block ), damage, name ); + } + + private static void registerItemModel( Item item, int damage, String name ) + { + ResourceLocation location = new ResourceLocation( ComputerCraft.MOD_ID, name ); + final ModelResourceLocation res = new ModelResourceLocation( location, "inventory" ); + ModelBakery.registerItemVariants( item, location ); + ModelLoader.setCustomModelResourceLocation( item, damage, res ); + } + + private static void registerUniversalItemModel( Block block, ItemMeshDefinition definition, String[] names ) + { + registerUniversalItemModel( Item.getItemFromBlock( block ), definition, names ); + } + + private static void registerUniversalItemModel( Item item, ItemMeshDefinition definition, String[] names ) + { + ResourceLocation[] resources = new ResourceLocation[names.length]; + for( int i = 0; i < names.length; i++ ) + { + resources[i] = new ResourceLocation( ComputerCraft.MOD_ID, names[i] ); + } + ModelBakery.registerItemVariants( item, resources ); + ModelLoader.setCustomMeshDefinition( item, definition ); + } + + private static void registerUniversalItemModel( Block block, String name ) + { + registerUniversalItemModel( Item.getItemFromBlock( block ), name ); + } + + private static void registerUniversalItemModel( Item item, String name ) + { + ResourceLocation location = new ResourceLocation( ComputerCraft.MOD_ID, name ); + final ModelResourceLocation res = new ModelResourceLocation( location, "inventory" ); + ModelBakery.registerItemVariants( item, location ); + ModelLoader.setCustomMeshDefinition( item, new ItemMeshDefinition() + { + @Nonnull + @Override + public ModelResourceLocation getModelLocation( @Nonnull ItemStack stack ) + { + return res; + } + } ); + } + + private static void loadBlockModel( ModelBakeEvent event, String name ) + { + IModel model = ModelLoaderRegistry.getModelOrMissing( new ResourceLocation( ComputerCraft.MOD_ID, "block/" + name ) ); + IBakedModel bakedModel = model.bake( + model.getDefaultState(), DefaultVertexFormats.ITEM, + location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite( location.toString() ) + ); + + event.getModelRegistry().putObject( new ModelResourceLocation( ComputerCraft.MOD_ID + ":" + name, "inventory" ), bakedModel ); + } +} diff --git a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java index 8f7e85a82..cf534aa65 100644 --- a/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/CCTurtleProxyClient.java @@ -12,68 +12,22 @@ import dan200.computercraft.shared.proxy.CCTurtleProxyCommon; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.items.ItemTurtleBase; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.IBakedModel; -import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.IReloadableResourceManager; import net.minecraft.client.resources.IResourceManager; -import net.minecraft.client.resources.SimpleReloadableResourceManager; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelBakeEvent; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.event.TextureStitchEvent; -import net.minecraftforge.client.model.IModel; -import net.minecraftforge.client.model.ModelLoader; -import net.minecraftforge.client.model.ModelLoaderRegistry; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import javax.annotation.Nonnull; - public class CCTurtleProxyClient extends CCTurtleProxyCommon { - // IComputerCraftProxy implementation - @Override public void preInit() { super.preInit(); - - // Setup client forge handlers - registerForgeHandlers(); - } - - @SubscribeEvent - public void registerModels( ModelRegistryEvent event ) - { - // Register item models - ItemMeshDefinition turtleMeshDefinition = new ItemMeshDefinition() - { - private ModelResourceLocation turtle_dynamic = new ModelResourceLocation( "computercraft:turtle_dynamic", "inventory" ); - - @Nonnull - @Override - public ModelResourceLocation getModelLocation( @Nonnull ItemStack stack ) - { - return turtle_dynamic; - } - }; - String[] turtleModelNames = new String[] { - "turtle_dynamic", - "turtle", "turtle_advanced", - "turtle_white", - "turtle_elf_overlay" - }; - registerItemModel( ComputerCraft.Blocks.turtle, turtleMeshDefinition, turtleModelNames ); - registerItemModel( ComputerCraft.Blocks.turtleExpanded, turtleMeshDefinition, turtleModelNames ); - registerItemModel( ComputerCraft.Blocks.turtleAdvanced, turtleMeshDefinition, turtleModelNames ); + MinecraftForge.EVENT_BUS.register( new ForgeHandlers() ); } @Override @@ -97,106 +51,23 @@ public void init() ClientRegistry.bindTileEntitySpecialRenderer( TileTurtle.class, new TileEntityTurtleRenderer() ); } - private void registerItemModel( Block block, ItemMeshDefinition definition, String[] names ) - { - registerItemModel( Item.getItemFromBlock( block ), definition, names ); - } - - private void registerItemModel( Item item, ItemMeshDefinition definition, String[] names ) - { - ResourceLocation[] resources = new ResourceLocation[names.length]; - for( int i = 0; i < names.length; i++ ) - { - resources[i] = new ResourceLocation( "computercraft:" + names[i] ); - } - ModelBakery.registerItemVariants( item, resources ); - ModelLoader.setCustomMeshDefinition( item, definition ); - } - - private void registerForgeHandlers() - { - MinecraftForge.EVENT_BUS.register( new ForgeHandlers() ); - } - public static class ForgeHandlers { - private static final String[] TURTLE_UPGRADES = { - "turtle_modem_off_left", - "turtle_modem_on_left", - "turtle_modem_off_right", - "turtle_modem_on_right", - "turtle_crafting_table_left", - "turtle_crafting_table_right", - "advanced_turtle_modem_off_left", - "advanced_turtle_modem_on_left", - "advanced_turtle_modem_off_right", - "advanced_turtle_modem_on_right", - "turtle_speaker_upgrade_left", - "turtle_speaker_upgrade_right", - }; + private final TurtleSmartItemModel m_turtleSmartItemModel = new TurtleSmartItemModel(); - private TurtleSmartItemModel m_turtleSmartItemModel; - - public ForgeHandlers() + ForgeHandlers() { - m_turtleSmartItemModel = new TurtleSmartItemModel(); IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager(); - if( resourceManager instanceof SimpleReloadableResourceManager ) + if( resourceManager instanceof IReloadableResourceManager ) { - SimpleReloadableResourceManager reloadableResourceManager = (SimpleReloadableResourceManager) resourceManager; - reloadableResourceManager.registerReloadListener( m_turtleSmartItemModel ); - } - } - - @SubscribeEvent - public void onTextureStitchEvent( TextureStitchEvent.Pre event ) - { - // Load all textures for upgrades - TextureMap map = event.getMap(); - for( String upgrade : TURTLE_UPGRADES ) - { - IModel model = ModelLoaderRegistry.getModelOrMissing( new ResourceLocation( "computercraft", "block/" + upgrade ) ); - for( ResourceLocation texture : model.getTextures() ) - { - map.registerSprite( texture ); - } + ((IReloadableResourceManager) resourceManager).registerReloadListener( m_turtleSmartItemModel ); } } @SubscribeEvent public void onModelBakeEvent( ModelBakeEvent event ) { - // Load all upgrade models - for( String upgrade : TURTLE_UPGRADES ) - { - loadModel( event, upgrade ); - } - - loadSmartModel( event, "turtle_dynamic", m_turtleSmartItemModel ); - } - - private void loadModel( ModelBakeEvent event, String name ) - { - IModel model = ModelLoaderRegistry.getModelOrMissing( - new ResourceLocation( "computercraft", "block/" + name ) - ); - IBakedModel bakedModel = model.bake( - model.getDefaultState(), - DefaultVertexFormats.ITEM, - location -> Minecraft.getMinecraft().getTextureMapBlocks().getAtlasSprite( location.toString() ) - ); - event.getModelRegistry().putObject( - new ModelResourceLocation( "computercraft:" + name, "inventory" ), - bakedModel - ); - } - - private void loadSmartModel( ModelBakeEvent event, String name, IBakedModel smartModel ) - { - event.getModelRegistry().putObject( - new ModelResourceLocation( "computercraft:" + name, "inventory" ), - smartModel - ); + event.getModelRegistry().putObject( new ModelResourceLocation( "computercraft:turtle_dynamic", "inventory" ), m_turtleSmartItemModel ); } } diff --git a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java index 2bc36f101..0297a7178 100644 --- a/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java +++ b/src/main/java/dan200/computercraft/client/proxy/ComputerCraftProxyClient.java @@ -18,21 +18,13 @@ import dan200.computercraft.shared.peripheral.monitor.TileMonitor; import dan200.computercraft.shared.proxy.ComputerCraftProxyCommon; import dan200.computercraft.shared.util.Colour; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemMeshDefinition; -import net.minecraft.client.renderer.block.model.ModelBakery; -import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.IItemColor; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.client.ClientCommandHandler; -import net.minecraftforge.client.event.ModelRegistryEvent; -import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; @@ -54,38 +46,11 @@ public void preInit() ClientCommandHandler.instance.registerCommand( CommandCopy.INSTANCE ); } - @SubscribeEvent - public void registerModels( ModelRegistryEvent event ) - { - // Register item models - registerItemModel( ComputerCraft.Blocks.computer, "computer" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 0, "peripheral" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 1, "wireless_modem" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 2, "monitor" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 3, "printer" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 4, "advanced_monitor" ); - registerItemModel( ComputerCraft.Blocks.cable, 0, "cable" ); - registerItemModel( ComputerCraft.Blocks.cable, 1, "wired_modem" ); - registerItemModel( ComputerCraft.Blocks.commandComputer, "command_computer" ); - registerItemModel( ComputerCraft.Blocks.advancedModem, "advanced_modem" ); - registerItemModel( ComputerCraft.Blocks.peripheral, 5, "speaker" ); - registerItemModel( ComputerCraft.Blocks.wiredModemFull, "wired_modem_full" ); - - registerItemModel( ComputerCraft.Items.disk, "disk" ); - registerItemModel( ComputerCraft.Items.diskExpanded, "disk_expanded" ); - registerItemModel( ComputerCraft.Items.treasureDisk, "treasure_disk" ); - registerItemModel( ComputerCraft.Items.printout, 0, "printout" ); - registerItemModel( ComputerCraft.Items.printout, 1, "pages" ); - registerItemModel( ComputerCraft.Items.printout, 2, "book" ); - registerItemModel( ComputerCraft.Items.pocketComputer, "pocket_computer" ); - } - @Override public void init() { super.init(); - // Load textures Minecraft mc = Minecraft.getMinecraft(); // Setup @@ -118,38 +83,6 @@ public void init() ClientRegistry.bindTileEntitySpecialRenderer( TileCable.class, new TileEntityCableRenderer() ); } - private void registerItemModel( Block block, int damage, String name ) - { - registerItemModel( Item.getItemFromBlock( block ), damage, name ); - } - - private void registerItemModel( Item item, int damage, String name ) - { - ModelResourceLocation res = new ModelResourceLocation( "computercraft:" + name, "inventory" ); - ModelBakery.registerItemVariants( item, new ResourceLocation( "computercraft", name ) ); - ModelLoader.setCustomModelResourceLocation( item, damage, res ); - } - - private void registerItemModel( Block block, String name ) - { - registerItemModel( Item.getItemFromBlock( block ), name ); - } - - private void registerItemModel( Item item, String name ) - { - final ModelResourceLocation res = new ModelResourceLocation( "computercraft:" + name, "inventory" ); - ModelBakery.registerItemVariants( item, new ResourceLocation( "computercraft", name ) ); - ModelLoader.setCustomMeshDefinition( item, new ItemMeshDefinition() - { - @Nonnull - @Override - public ModelResourceLocation getModelLocation( @Nonnull ItemStack stack ) - { - return res; - } - } ); - } - @Override public File getWorldDir( World world ) { diff --git a/src/main/java/dan200/computercraft/shared/PocketUpgrades.java b/src/main/java/dan200/computercraft/shared/PocketUpgrades.java index 8ccd7bb46..3fbb2eca3 100644 --- a/src/main/java/dan200/computercraft/shared/PocketUpgrades.java +++ b/src/main/java/dan200/computercraft/shared/PocketUpgrades.java @@ -63,7 +63,7 @@ public static Iterable getVanillaUpgrades() List vanilla = new ArrayList<>(); vanilla.add( ComputerCraft.PocketUpgrades.wirelessModem ); vanilla.add( ComputerCraft.PocketUpgrades.advancedModem ); - vanilla.add( ComputerCraft.PocketUpgrades.pocketSpeaker ); + vanilla.add( ComputerCraft.PocketUpgrades.speaker ); return vanilla; } } diff --git a/src/main/java/dan200/computercraft/shared/Registry.java b/src/main/java/dan200/computercraft/shared/Registry.java new file mode 100644 index 000000000..0bbd1b4cd --- /dev/null +++ b/src/main/java/dan200/computercraft/shared/Registry.java @@ -0,0 +1,404 @@ +/* + * This file is part of ComputerCraft - http://www.computercraft.info + * Copyright Daniel Ratcliffe, 2011-2019. Do not distribute without permission. + * Send enquiries to dratcliffe@gmail.com + */ + +package dan200.computercraft.shared; + +import dan200.computercraft.ComputerCraft; +import dan200.computercraft.api.ComputerCraftAPI; +import dan200.computercraft.api.pocket.IPocketUpgrade; +import dan200.computercraft.api.turtle.ITurtleUpgrade; +import dan200.computercraft.shared.computer.blocks.BlockCommandComputer; +import dan200.computercraft.shared.computer.blocks.BlockComputer; +import dan200.computercraft.shared.computer.blocks.TileCommandComputer; +import dan200.computercraft.shared.computer.blocks.TileComputer; +import dan200.computercraft.shared.computer.core.ComputerFamily; +import dan200.computercraft.shared.computer.items.ItemCommandComputer; +import dan200.computercraft.shared.computer.items.ItemComputer; +import dan200.computercraft.shared.media.items.ItemDiskExpanded; +import dan200.computercraft.shared.media.items.ItemDiskLegacy; +import dan200.computercraft.shared.media.items.ItemPrintout; +import dan200.computercraft.shared.media.items.ItemTreasureDisk; +import dan200.computercraft.shared.peripheral.common.BlockPeripheral; +import dan200.computercraft.shared.peripheral.common.ItemPeripheral; +import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive; +import dan200.computercraft.shared.peripheral.modem.wired.*; +import dan200.computercraft.shared.peripheral.modem.wireless.BlockAdvancedModem; +import dan200.computercraft.shared.peripheral.modem.wireless.ItemAdvancedModem; +import dan200.computercraft.shared.peripheral.modem.wireless.TileAdvancedModem; +import dan200.computercraft.shared.peripheral.modem.wireless.TileWirelessModem; +import dan200.computercraft.shared.peripheral.monitor.TileMonitor; +import dan200.computercraft.shared.peripheral.printer.TilePrinter; +import dan200.computercraft.shared.peripheral.speaker.TileSpeaker; +import dan200.computercraft.shared.pocket.items.ItemPocketComputer; +import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; +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.blocks.TileTurtle; +import dan200.computercraft.shared.turtle.blocks.TileTurtleAdvanced; +import dan200.computercraft.shared.turtle.blocks.TileTurtleExpanded; +import dan200.computercraft.shared.turtle.items.ItemTurtleAdvanced; +import dan200.computercraft.shared.turtle.items.ItemTurtleLegacy; +import dan200.computercraft.shared.turtle.items.ItemTurtleNormal; +import dan200.computercraft.shared.turtle.items.TurtleItemFactory; +import dan200.computercraft.shared.turtle.upgrades.*; +import dan200.computercraft.shared.util.Colour; +import dan200.computercraft.shared.util.ImpostorRecipe; +import dan200.computercraft.shared.util.ImpostorShapelessRecipe; +import net.minecraft.block.Block; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.registries.IForgeRegistry; + +@Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID ) +public final class Registry +{ + private Registry() + { + } + + @SubscribeEvent + public static void registerBlocks( RegistryEvent.Register event ) + { + IForgeRegistry registry = event.getRegistry(); + + // Computer + ComputerCraft.Blocks.computer = new BlockComputer(); + registry.register( ComputerCraft.Blocks.computer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ) ); + + // Peripheral + ComputerCraft.Blocks.peripheral = new BlockPeripheral(); + registry.register( ComputerCraft.Blocks.peripheral.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "peripheral" ) ) ); + + // Cable + ComputerCraft.Blocks.cable = new BlockCable(); + registry.register( ComputerCraft.Blocks.cable.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "cable" ) ) ); + + // Command Computer + ComputerCraft.Blocks.commandComputer = new BlockCommandComputer(); + registry.register( ComputerCraft.Blocks.commandComputer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ) ) ); + + // Command Computer + ComputerCraft.Blocks.advancedModem = new BlockAdvancedModem(); + registry.register( ComputerCraft.Blocks.advancedModem.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "advanced_modem" ) ) ); + + // Full block modem + ComputerCraft.Blocks.wiredModemFull = new BlockWiredModemFull(); + registry.register( ComputerCraft.Blocks.wiredModemFull.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ) ); + + // Turtle + ComputerCraft.Blocks.turtle = BlockTurtle.createTurtleBlock(); + registry.register( ComputerCraft.Blocks.turtle.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ) ); + + ComputerCraft.Blocks.turtleExpanded = BlockTurtle.createTurtleBlock(); + registry.register( ComputerCraft.Blocks.turtleExpanded.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_expanded" ) ) ); + + // Advanced Turtle + ComputerCraft.Blocks.turtleAdvanced = BlockTurtle.createTurtleBlock(); + registry.register( ComputerCraft.Blocks.turtleAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ) ) ); + + registerTileEntities(); + } + + private static void registerTileEntities() + { + GameRegistry.registerTileEntity( TileComputer.class, new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ); + GameRegistry.registerTileEntity( TileCommandComputer.class, new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ) ); + + GameRegistry.registerTileEntity( TileTurtle.class, new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ); + GameRegistry.registerTileEntity( TileTurtleExpanded.class, new ResourceLocation( ComputerCraft.MOD_ID, "turtleex" ) ); + GameRegistry.registerTileEntity( TileTurtleAdvanced.class, new ResourceLocation( ComputerCraft.MOD_ID, "turtleadv" ) ); + + GameRegistry.registerTileEntity( TileDiskDrive.class, new ResourceLocation( ComputerCraft.MOD_ID, "diskdrive" ) ); + GameRegistry.registerTileEntity( TileWirelessModem.class, new ResourceLocation( ComputerCraft.MOD_ID, "wirelessmodem" ) ); + GameRegistry.registerTileEntity( TileMonitor.class, new ResourceLocation( ComputerCraft.MOD_ID, "monitor" ) ); + GameRegistry.registerTileEntity( TilePrinter.class, new ResourceLocation( ComputerCraft.MOD_ID, "ccprinter" ) ); + GameRegistry.registerTileEntity( TileCable.class, new ResourceLocation( ComputerCraft.MOD_ID, "wiredmodem" ) ); + GameRegistry.registerTileEntity( TileAdvancedModem.class, new ResourceLocation( ComputerCraft.MOD_ID, "advanced_modem" ) ); + GameRegistry.registerTileEntity( TileSpeaker.class, new ResourceLocation( ComputerCraft.MOD_ID, "speaker" ) ); + GameRegistry.registerTileEntity( TileWiredModemFull.class, new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ); + } + + @SubscribeEvent + public static void registerItems( RegistryEvent.Register event ) + { + IForgeRegistry registry = event.getRegistry(); + + registry.register( new ItemTurtleLegacy( ComputerCraft.Blocks.turtle ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ) ); + registry.register( new ItemTurtleNormal( ComputerCraft.Blocks.turtleExpanded ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_expanded" ) ) ); + registry.register( new ItemTurtleAdvanced( ComputerCraft.Blocks.turtleAdvanced ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ) ) ); + + // Computer + registry.register( new ItemComputer( ComputerCraft.Blocks.computer ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ) ); + + // Peripheral + registry.register( new ItemPeripheral( ComputerCraft.Blocks.peripheral ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "peripheral" ) ) ); + + // Cable + registry.register( new ItemCable( ComputerCraft.Blocks.cable ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "cable" ) ) ); + + // Command Computer + registry.register( new ItemCommandComputer( ComputerCraft.Blocks.commandComputer ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ) ) ); + + // Advanced modem + registry.register( new ItemAdvancedModem( ComputerCraft.Blocks.advancedModem ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "advanced_modem" ) ) ); + + // Full block modem + registry.register( new ItemWiredModemFull( ComputerCraft.Blocks.wiredModemFull ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ) ); + + // Items + // Floppy Disk + ComputerCraft.Items.disk = new ItemDiskLegacy(); + registry.register( ComputerCraft.Items.disk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk" ) ) ); + + ComputerCraft.Items.diskExpanded = new ItemDiskExpanded(); + registry.register( ComputerCraft.Items.diskExpanded.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk_expanded" ) ) ); + + // Treasure Disk + ComputerCraft.Items.treasureDisk = new ItemTreasureDisk(); + registry.register( ComputerCraft.Items.treasureDisk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "treasure_disk" ) ) ); + + // Printout + ComputerCraft.Items.printout = new ItemPrintout(); + registry.register( ComputerCraft.Items.printout.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printout" ) ) ); + + // Pocket computer + ComputerCraft.Items.pocketComputer = new ItemPocketComputer(); + registry.register( ComputerCraft.Items.pocketComputer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocket_computer" ) ) ); + + registerTurtleUpgrades(); + registerPocketUpgrades(); + } + + @SubscribeEvent + public static void registerRecipes( RegistryEvent.Register event ) + { + IForgeRegistry registry = event.getRegistry(); + + // Register fake recipes for the recipe book and JEI. We have several dynamic recipes, + // and we'd like people to be able to see them. + + // Turtle upgrades + // TODO: Figure out a way to do this in a "nice" way. + for( ITurtleUpgrade upgrade : dan200.computercraft.shared.TurtleUpgrades.getVanillaUpgrades() ) + { + ItemStack craftingItem = upgrade.getCraftingItem(); + + // A turtle just containing this upgrade + for( ComputerFamily family : ComputerFamily.values() ) + { + if( !dan200.computercraft.shared.TurtleUpgrades.suitableForFamily( family, upgrade ) ) continue; + + ItemStack baseTurtle = TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ); + if( !baseTurtle.isEmpty() ) + { + ItemStack craftedTurtle = TurtleItemFactory.create( -1, null, -1, family, upgrade, null, 0, null ); + ItemStack craftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, null, upgrade, 0, null ); + registry.register( + new ImpostorRecipe( "computercraft:" + family.toString() + "_turtle_upgrade", 2, 1, new ItemStack[] { baseTurtle, craftingItem }, craftedTurtle ) + .setRegistryName( new ResourceLocation( "computercraft:" + family + "_turtle_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) + "_1" ) ) + ); + registry.register( + new ImpostorRecipe( "computercraft:" + family.toString() + "_turtle_upgrade", 2, 1, new ItemStack[] { craftingItem, baseTurtle }, craftedTurtleFlipped ) + .setRegistryName( new ResourceLocation( "computercraft:" + family + "_turtle_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) + "_2" ) ) + ); + } + } + } + + // Coloured disks + ItemStack paper = new ItemStack( Items.PAPER, 1 ); + ItemStack redstone = new ItemStack( Items.REDSTONE, 1 ); + for( int colour = 0; colour < 16; colour++ ) + { + ItemStack disk = ItemDiskLegacy.createFromIDAndColour( -1, null, Colour.values()[colour].getHex() ); + ItemStack dye = new ItemStack( Items.DYE, 1, colour ); + + int diskIdx = 0; + ItemStack[] disks = new ItemStack[15]; + for( int otherColour = 0; otherColour < 16; otherColour++ ) + { + if( colour != otherColour ) + { + disks[diskIdx++] = ItemDiskLegacy.createFromIDAndColour( -1, null, Colour.values()[otherColour].getHex() ); + } + } + + // Normal recipe + registry.register( + new ImpostorShapelessRecipe( "computercraft:disk", disk, new ItemStack[] { redstone, paper, dye } ) + .setRegistryName( new ResourceLocation( "computercraft:disk_imposter_" + colour ) ) + ); + + // Conversion recipe + registry.register( + new ImpostorShapelessRecipe( "computercraft:disk", disk, NonNullList.from( Ingredient.EMPTY, Ingredient.fromStacks( disks ), Ingredient.fromStacks( dye ) ) ) + .setRegistryName( new ResourceLocation( "computercraft:disk_imposter_convert_" + colour ) ) + ); + } + + // Pocket computer upgrades + ItemStack pocketComputer = PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, null ); + ItemStack advancedPocketComputer = PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Advanced, null ); + for( IPocketUpgrade upgrade : PocketUpgrades.getVanillaUpgrades() ) + { + registry.register( new ImpostorRecipe( + "computercraft:normal_pocket_upgrade", + 1, 2, + new ItemStack[] { upgrade.getCraftingItem(), pocketComputer }, + PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, upgrade ) + ).setRegistryName( new ResourceLocation( "computercraft:normal_pocket_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) ) ) + ); + + registry.register( + new ImpostorRecipe( "computercraft:advanced_pocket_upgrade", + 1, 2, + new ItemStack[] { upgrade.getCraftingItem(), advancedPocketComputer }, + PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Advanced, upgrade ) + ).setRegistryName( new ResourceLocation( "computercraft:advanced_pocket_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) ) ) + ); + } + } + + + public static void registerTurtleUpgrades() + { + // Upgrades + ComputerCraft.TurtleUpgrades.wirelessModem = new TurtleModem( false, new ResourceLocation( "computercraft", "wireless_modem" ), 1 ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.wirelessModem ); + + ComputerCraft.TurtleUpgrades.craftingTable = new TurtleCraftingTable( 2 ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.craftingTable ); + + ComputerCraft.TurtleUpgrades.diamondSword = new TurtleSword( new ResourceLocation( "minecraft", "diamond_sword" ), 3, "upgrade.minecraft:diamond_sword.adjective", Items.DIAMOND_SWORD ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.diamondSword ); + + ComputerCraft.TurtleUpgrades.diamondShovel = new TurtleShovel( new ResourceLocation( "minecraft", "diamond_shovel" ), 4, "upgrade.minecraft:diamond_shovel.adjective", Items.DIAMOND_SHOVEL ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.diamondShovel ); + + ComputerCraft.TurtleUpgrades.diamondPickaxe = new TurtleTool( new ResourceLocation( "minecraft", "diamond_pickaxe" ), 5, "upgrade.minecraft:diamond_pickaxe.adjective", Items.DIAMOND_PICKAXE ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.diamondPickaxe ); + + ComputerCraft.TurtleUpgrades.diamondAxe = new TurtleAxe( new ResourceLocation( "minecraft", "diamond_axe" ), 6, "upgrade.minecraft:diamond_axe.adjective", Items.DIAMOND_AXE ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.diamondAxe ); + + ComputerCraft.TurtleUpgrades.diamondHoe = new TurtleHoe( new ResourceLocation( "minecraft", "diamond_hoe" ), 7, "upgrade.minecraft:diamond_hoe.adjective", Items.DIAMOND_HOE ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.diamondHoe ); + + ComputerCraft.TurtleUpgrades.advancedModem = new TurtleModem( true, new ResourceLocation( "computercraft", "advanced_modem" ), -1 ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.advancedModem ); + + ComputerCraft.TurtleUpgrades.speaker = new TurtleSpeaker( new ResourceLocation( "computercraft", "speaker" ), 8 ); + dan200.computercraft.shared.TurtleUpgrades.registerInternal( ComputerCraft.TurtleUpgrades.speaker ); + } + + public static void registerPocketUpgrades() + { + // Register pocket upgrades + ComputerCraft.PocketUpgrades.wirelessModem = new PocketModem( false ); + ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.wirelessModem ); + ComputerCraft.PocketUpgrades.advancedModem = new PocketModem( true ); + ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.advancedModem ); + + ComputerCraft.PocketUpgrades.speaker = new PocketSpeaker(); + ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.speaker ); + } + + @SubscribeEvent + public static void remapItems( RegistryEvent.MissingMappings mappings ) + { + // We have to use mappings.getAllMappings() as the mod ID is upper case but the domain lower. + for( RegistryEvent.MissingMappings.Mapping mapping : mappings.getAllMappings() ) + { + String domain = mapping.key.getNamespace(); + if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; + + String key = mapping.key.getPath(); + if( key.equalsIgnoreCase( "CC-Computer" ) ) + { + mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.computer ) ); + } + else if( key.equalsIgnoreCase( "CC-Peripheral" ) ) + { + mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.peripheral ) ); + } + else if( key.equalsIgnoreCase( "CC-Cable" ) ) + { + mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.cable ) ); + } + else if( key.equalsIgnoreCase( "diskExpanded" ) ) + { + mapping.remap( ComputerCraft.Items.diskExpanded ); + } + else if( key.equalsIgnoreCase( "treasureDisk" ) ) + { + mapping.remap( ComputerCraft.Items.treasureDisk ); + } + else if( key.equalsIgnoreCase( "pocketComputer" ) ) + { + mapping.remap( ComputerCraft.Items.pocketComputer ); + } + else if( key.equalsIgnoreCase( "CC-Turtle" ) ) + { + mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.turtle ) ); + } + else if( key.equalsIgnoreCase( "CC-TurtleExpanded" ) ) + { + mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.turtleExpanded ) ); + } + else if( key.equalsIgnoreCase( "CC-TurtleAdvanced" ) ) + { + mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.turtleAdvanced ) ); + } + } + } + + @SubscribeEvent + public static void remapBlocks( RegistryEvent.MissingMappings mappings ) + { + // We have to use mappings.getAllMappings() as the mod ID is upper case but the domain lower. + for( RegistryEvent.MissingMappings.Mapping mapping : mappings.getAllMappings() ) + { + String domain = mapping.key.getNamespace(); + if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; + + String key = mapping.key.getPath(); + if( key.equalsIgnoreCase( "CC-Computer" ) ) + { + mapping.remap( ComputerCraft.Blocks.computer ); + } + else if( key.equalsIgnoreCase( "CC-Peripheral" ) ) + { + mapping.remap( ComputerCraft.Blocks.peripheral ); + } + else if( key.equalsIgnoreCase( "CC-Cable" ) ) + { + mapping.remap( ComputerCraft.Blocks.cable ); + } + else if( key.equalsIgnoreCase( "CC-Turtle" ) ) + { + mapping.remap( ComputerCraft.Blocks.turtle ); + } + else if( key.equalsIgnoreCase( "CC-TurtleExpanded" ) ) + { + mapping.remap( ComputerCraft.Blocks.turtleExpanded ); + } + else if( key.equalsIgnoreCase( "CC-TurtleAdvanced" ) ) + { + mapping.remap( ComputerCraft.Blocks.turtleAdvanced ); + } + } + } +} diff --git a/src/main/java/dan200/computercraft/shared/TurtlePermissions.java b/src/main/java/dan200/computercraft/shared/TurtlePermissions.java index b009aeabc..14629fac0 100644 --- a/src/main/java/dan200/computercraft/shared/TurtlePermissions.java +++ b/src/main/java/dan200/computercraft/shared/TurtlePermissions.java @@ -7,20 +7,29 @@ package dan200.computercraft.shared; import com.google.common.base.Preconditions; +import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.permissions.ITurtlePermissionProvider; +import dan200.computercraft.api.turtle.event.TurtleActionEvent; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import javax.annotation.Nonnull; import java.util.Collection; import java.util.LinkedHashSet; +@Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID ) public final class TurtlePermissions { private static final Collection providers = new LinkedHashSet<>(); + private TurtlePermissions() + { + } + public static void register( @Nonnull ITurtlePermissionProvider upgrade ) { Preconditions.checkNotNull( upgrade, "upgrade cannot be null" ); @@ -57,4 +66,13 @@ public static boolean isBlockEditable( World world, BlockPos pos, EntityPlayer p } return true; } + + @SubscribeEvent + public static void onTurtleAction( TurtleActionEvent event ) + { + if( ComputerCraft.turtleDisabledActions.contains( event.getAction() ) ) + { + event.setCanceled( true, "Action has been disabled" ); + } + } } diff --git a/src/main/java/dan200/computercraft/shared/TurtleUpgrades.java b/src/main/java/dan200/computercraft/shared/TurtleUpgrades.java index e8dd63154..b9238682b 100644 --- a/src/main/java/dan200/computercraft/shared/TurtleUpgrades.java +++ b/src/main/java/dan200/computercraft/shared/TurtleUpgrades.java @@ -113,15 +113,15 @@ public static ITurtleUpgrade get( @Nonnull ItemStack stack ) public static Iterable getVanillaUpgrades() { List vanilla = new ArrayList<>(); - vanilla.add( ComputerCraft.Upgrades.diamondPickaxe ); - vanilla.add( ComputerCraft.Upgrades.diamondAxe ); - vanilla.add( ComputerCraft.Upgrades.diamondSword ); - vanilla.add( ComputerCraft.Upgrades.diamondShovel ); - vanilla.add( ComputerCraft.Upgrades.diamondHoe ); - vanilla.add( ComputerCraft.Upgrades.craftingTable ); - vanilla.add( ComputerCraft.Upgrades.wirelessModem ); - vanilla.add( ComputerCraft.Upgrades.advancedModem ); - vanilla.add( ComputerCraft.Upgrades.turtleSpeaker ); + vanilla.add( ComputerCraft.TurtleUpgrades.diamondPickaxe ); + vanilla.add( ComputerCraft.TurtleUpgrades.diamondAxe ); + vanilla.add( ComputerCraft.TurtleUpgrades.diamondSword ); + vanilla.add( ComputerCraft.TurtleUpgrades.diamondShovel ); + vanilla.add( ComputerCraft.TurtleUpgrades.diamondHoe ); + vanilla.add( ComputerCraft.TurtleUpgrades.craftingTable ); + vanilla.add( ComputerCraft.TurtleUpgrades.wirelessModem ); + vanilla.add( ComputerCraft.TurtleUpgrades.advancedModem ); + vanilla.add( ComputerCraft.TurtleUpgrades.speaker ); return vanilla; } 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 0233dfa84..6ab2a2a44 100644 --- a/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java +++ b/src/main/java/dan200/computercraft/shared/pocket/items/ItemPocketComputer.java @@ -49,7 +49,7 @@ public ItemPocketComputer() setTranslationKey( "computercraft:pocket_computer" ); setCreativeTab( ComputerCraft.mainCreativeTab ); addPropertyOverride( new ResourceLocation( ComputerCraft.MOD_ID, "state" ), COMPUTER_STATE ); - addPropertyOverride( new ResourceLocation( ComputerCraft.MOD_ID, "type" ), COMPUTER_TYPE ); + addPropertyOverride( new ResourceLocation( ComputerCraft.MOD_ID, "coloured" ), COMPUTER_COLOURED ); } public ItemStack create( int id, String label, int colour, ComputerFamily family, IPocketUpgrade upgrade ) @@ -565,9 +565,8 @@ public void setColourDirect( ItemStack stack, int colour ) return state.ordinal(); }; - private static final IItemPropertyGetter COMPUTER_TYPE = ( stack, world, player ) -> { + private static final IItemPropertyGetter COMPUTER_COLOURED = ( stack, world, player ) -> { ItemPocketComputer item = (ItemPocketComputer) stack.getItem(); - if( item.getColour( stack ) != -1 ) return 2; - return item.getFamily( stack ) == ComputerFamily.Advanced ? 1 : 0; + return item.getColour( stack ) != -1 ? 1 : 0; }; } diff --git a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java index b22b08640..207f8dbbe 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/CCTurtleProxyCommon.java @@ -7,42 +7,15 @@ package dan200.computercraft.shared.proxy; import dan200.computercraft.ComputerCraft; -import dan200.computercraft.api.turtle.ITurtleUpgrade; -import dan200.computercraft.api.turtle.event.TurtleActionEvent; -import dan200.computercraft.shared.TurtleUpgrades; -import dan200.computercraft.shared.computer.core.ComputerFamily; -import dan200.computercraft.shared.turtle.blocks.BlockTurtle; -import dan200.computercraft.shared.turtle.blocks.TileTurtle; -import dan200.computercraft.shared.turtle.blocks.TileTurtleAdvanced; -import dan200.computercraft.shared.turtle.blocks.TileTurtleExpanded; import dan200.computercraft.shared.turtle.core.TurtlePlayer; -import dan200.computercraft.shared.turtle.items.ItemTurtleAdvanced; -import dan200.computercraft.shared.turtle.items.ItemTurtleLegacy; -import dan200.computercraft.shared.turtle.items.ItemTurtleNormal; -import dan200.computercraft.shared.turtle.items.TurtleItemFactory; -import dan200.computercraft.shared.turtle.upgrades.*; -import dan200.computercraft.shared.util.ImpostorRecipe; -import net.minecraft.block.Block; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.registry.EntityRegistry; -import net.minecraftforge.fml.common.registry.GameRegistry; -import net.minecraftforge.registries.IForgeRegistry; public abstract class CCTurtleProxyCommon implements ICCTurtleProxy { @Override public void preInit() { - MinecraftForge.EVENT_BUS.register( this ); - EntityRegistry.registerModEntity( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_player" ), TurtlePlayer.class, "turtle_player", 0, ComputerCraft.instance, Integer.MAX_VALUE, Integer.MAX_VALUE, false @@ -52,197 +25,5 @@ public void preInit() @Override public void init() { - registerTileEntities(); } - - @SubscribeEvent - public void registerBlocks( RegistryEvent.Register event ) - { - IForgeRegistry registry = event.getRegistry(); - - // Turtle - ComputerCraft.Blocks.turtle = BlockTurtle.createTurtleBlock(); - registry.register( ComputerCraft.Blocks.turtle.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ) ); - - ComputerCraft.Blocks.turtleExpanded = BlockTurtle.createTurtleBlock(); - registry.register( ComputerCraft.Blocks.turtleExpanded.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_expanded" ) ) ); - - // Advanced Turtle - ComputerCraft.Blocks.turtleAdvanced = BlockTurtle.createTurtleBlock(); - registry.register( ComputerCraft.Blocks.turtleAdvanced.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ) ) ); - } - - @SubscribeEvent - public void registerItems( RegistryEvent.Register event ) - { - IForgeRegistry registry = event.getRegistry(); - - registry.register( new ItemTurtleLegacy( ComputerCraft.Blocks.turtle ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ) ); - registry.register( new ItemTurtleNormal( ComputerCraft.Blocks.turtleExpanded ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_expanded" ) ) ); - registry.register( new ItemTurtleAdvanced( ComputerCraft.Blocks.turtleAdvanced ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "turtle_advanced" ) ) ); - - registerUpgrades(); - } - - @SubscribeEvent - public void registerRecipes( RegistryEvent.Register event ) - { - IForgeRegistry registry = event.getRegistry(); - - // Add a bunch of impostor recipes - // TODO: Figure out a way to do this in a "nice" way. - for( ITurtleUpgrade upgrade : TurtleUpgrades.getVanillaUpgrades() ) - { - // Add fake recipes to fool NEI - ItemStack craftingItem = upgrade.getCraftingItem(); - - // A turtle just containing this upgrade - for( ComputerFamily family : ComputerFamily.values() ) - { - if( !TurtleUpgrades.suitableForFamily( family, upgrade ) ) continue; - - ItemStack baseTurtle = TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ); - if( !baseTurtle.isEmpty() ) - { - ItemStack craftedTurtle = TurtleItemFactory.create( -1, null, -1, family, upgrade, null, 0, null ); - ItemStack craftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, null, upgrade, 0, null ); - registry.register( - new ImpostorRecipe( "computercraft:" + family.toString() + "_turtle_upgrade", 2, 1, new ItemStack[] { baseTurtle, craftingItem }, craftedTurtle ) - .setRegistryName( new ResourceLocation( "computercraft:" + family + "_turtle_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) + "_1" ) ) - ); - registry.register( - new ImpostorRecipe( "computercraft:" + family.toString() + "_turtle_upgrade", 2, 1, new ItemStack[] { craftingItem, baseTurtle }, craftedTurtleFlipped ) - .setRegistryName( new ResourceLocation( "computercraft:" + family + "_turtle_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) + "_2" ) ) - ); - - /* - // A turtle containing this upgrade and another upgrade - for( ITurtleUpgrade otherUpgrade : m_turtleUpgrades.values() ) - { - if( isUpgradeVanilla( otherUpgrade ) && isUpgradeSuitableForFamily( family, otherUpgrade ) ) - { - ItemStack otherCraftingItem = otherUpgrade.getCraftingItem(); - - ItemStack otherCraftedTurtle = TurtleItemFactory.create( -1, null, -1, family, null, otherUpgrade, 0, null ); - ItemStack comboCraftedTurtle = TurtleItemFactory.create( -1, null, -1, family, upgrade, otherUpgrade, 0, null ); - - ItemStack otherCraftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, otherUpgrade, null, 0, null ); - ItemStack comboCraftedTurtleFlipped = TurtleItemFactory.create( -1, null, -1, family, otherUpgrade, upgrade, 0, null ); - - recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { otherCraftingItem, craftedTurtle }, comboCraftedTurtle ) ); - recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { otherCraftedTurtle, craftingItem }, comboCraftedTurtle ) ); - recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { craftedTurtleFlipped, otherCraftingItem }, comboCraftedTurtleFlipped ) ); - recipeList.add( new ImpostorRecipe( 2, 1, new ItemStack[] { craftingItem, otherCraftedTurtleFlipped }, comboCraftedTurtleFlipped ) ); - recipeList.add( new ImpostorRecipe( 3, 1, new ItemStack[] { otherCraftingItem, baseTurtle, craftingItem, }, comboCraftedTurtle ) ); - recipeList.add( new ImpostorRecipe( 3, 1, new ItemStack[] { craftingItem, baseTurtle, otherCraftingItem }, comboCraftedTurtleFlipped ) ); - } - } - */ - } - } - } - } - - private void registerUpgrades() - { - // Upgrades - ComputerCraft.Upgrades.wirelessModem = new TurtleModem( false, new ResourceLocation( "computercraft", "wireless_modem" ), 1 ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.wirelessModem ); - - ComputerCraft.Upgrades.craftingTable = new TurtleCraftingTable( 2 ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.craftingTable ); - - ComputerCraft.Upgrades.diamondSword = new TurtleSword( new ResourceLocation( "minecraft", "diamond_sword" ), 3, "upgrade.minecraft:diamond_sword.adjective", Items.DIAMOND_SWORD ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.diamondSword ); - - ComputerCraft.Upgrades.diamondShovel = new TurtleShovel( new ResourceLocation( "minecraft", "diamond_shovel" ), 4, "upgrade.minecraft:diamond_shovel.adjective", Items.DIAMOND_SHOVEL ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.diamondShovel ); - - ComputerCraft.Upgrades.diamondPickaxe = new TurtleTool( new ResourceLocation( "minecraft", "diamond_pickaxe" ), 5, "upgrade.minecraft:diamond_pickaxe.adjective", Items.DIAMOND_PICKAXE ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.diamondPickaxe ); - - ComputerCraft.Upgrades.diamondAxe = new TurtleAxe( new ResourceLocation( "minecraft", "diamond_axe" ), 6, "upgrade.minecraft:diamond_axe.adjective", Items.DIAMOND_AXE ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.diamondAxe ); - - ComputerCraft.Upgrades.diamondHoe = new TurtleHoe( new ResourceLocation( "minecraft", "diamond_hoe" ), 7, "upgrade.minecraft:diamond_hoe.adjective", Items.DIAMOND_HOE ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.diamondHoe ); - - ComputerCraft.Upgrades.advancedModem = new TurtleModem( true, new ResourceLocation( "computercraft", "advanced_modem" ), -1 ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.advancedModem ); - - ComputerCraft.Upgrades.turtleSpeaker = new TurtleSpeaker( new ResourceLocation( "computercraft", "speaker" ), 8 ); - TurtleUpgrades.registerInternal( ComputerCraft.Upgrades.turtleSpeaker ); - } - - @SubscribeEvent - public void remapItems( RegistryEvent.MissingMappings mappings ) - { - // We have to use mappings.getAllMappings() as the mod ID is upper case but the domain lower. - for( RegistryEvent.MissingMappings.Mapping mapping : mappings.getAllMappings() ) - { - String domain = mapping.key.getNamespace(); - if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; - - String key = mapping.key.getPath(); - if( key.equalsIgnoreCase( "CC-Turtle" ) ) - { - mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.turtle ) ); - } - else if( key.equalsIgnoreCase( "CC-TurtleExpanded" ) ) - { - mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.turtleExpanded ) ); - } - else if( key.equalsIgnoreCase( "CC-TurtleAdvanced" ) ) - { - mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.turtleAdvanced ) ); - } - } - } - - @SubscribeEvent - public void remapBlocks( RegistryEvent.MissingMappings mappings ) - { - // We have to use mappings.getAllMappings() as the mod ID is upper case but the domain lower. - for( RegistryEvent.MissingMappings.Mapping mapping : mappings.getAllMappings() ) - { - String domain = mapping.key.getNamespace(); - if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; - - String key = mapping.key.getPath(); - if( key.equalsIgnoreCase( "CC-Turtle" ) ) - { - mapping.remap( ComputerCraft.Blocks.turtle ); - } - else if( key.equalsIgnoreCase( "CC-TurtleExpanded" ) ) - { - mapping.remap( ComputerCraft.Blocks.turtleExpanded ); - } - else if( key.equalsIgnoreCase( "CC-TurtleAdvanced" ) ) - { - mapping.remap( ComputerCraft.Blocks.turtleAdvanced ); - } - } - } - - private void registerTileEntities() - { - // TileEntities - GameRegistry.registerTileEntity( TileTurtle.class, new ResourceLocation( ComputerCraft.MOD_ID, "turtle" ) ); - GameRegistry.registerTileEntity( TileTurtleExpanded.class, new ResourceLocation( ComputerCraft.MOD_ID, "turtleex" ) ); - GameRegistry.registerTileEntity( TileTurtleAdvanced.class, new ResourceLocation( ComputerCraft.MOD_ID, "turtleadv" ) ); - } - - @Mod.EventBusSubscriber( modid = ComputerCraft.MOD_ID ) - public static class ForgeHandlers - { - @SubscribeEvent - public static void onTurtleAction( TurtleActionEvent event ) - { - if( ComputerCraft.turtleDisabledActions.contains( event.getAction() ) ) - { - event.setCanceled( true, "Action has been disabled" ); - } - } - } - } diff --git a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java index 420e747b1..9280a12ef 100644 --- a/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java +++ b/src/main/java/dan200/computercraft/shared/proxy/ComputerCraftProxyCommon.java @@ -8,30 +8,20 @@ import dan200.computercraft.ComputerCraft; import dan200.computercraft.api.ComputerCraftAPI; -import dan200.computercraft.api.pocket.IPocketUpgrade; import dan200.computercraft.client.gui.*; import dan200.computercraft.core.computer.MainThread; import dan200.computercraft.shared.Config; -import dan200.computercraft.shared.PocketUpgrades; import dan200.computercraft.shared.command.CommandComputerCraft; import dan200.computercraft.shared.command.ContainerViewComputer; import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider; -import dan200.computercraft.shared.computer.blocks.BlockCommandComputer; -import dan200.computercraft.shared.computer.blocks.BlockComputer; -import dan200.computercraft.shared.computer.blocks.TileCommandComputer; import dan200.computercraft.shared.computer.blocks.TileComputer; import dan200.computercraft.shared.computer.core.*; import dan200.computercraft.shared.computer.inventory.ContainerComputer; -import dan200.computercraft.shared.computer.items.ItemCommandComputer; -import dan200.computercraft.shared.computer.items.ItemComputer; import dan200.computercraft.shared.datafix.Fixes; import dan200.computercraft.shared.integration.charset.IntegrationCharset; import dan200.computercraft.shared.media.common.DefaultMediaProvider; import dan200.computercraft.shared.media.inventory.ContainerHeldItem; -import dan200.computercraft.shared.media.items.ItemDiskExpanded; -import dan200.computercraft.shared.media.items.ItemDiskLegacy; import dan200.computercraft.shared.media.items.ItemPrintout; -import dan200.computercraft.shared.media.items.ItemTreasureDisk; import dan200.computercraft.shared.network.NetworkMessage; import dan200.computercraft.shared.network.client.*; import dan200.computercraft.shared.network.server.ComputerActionServerMessage; @@ -39,51 +29,26 @@ import dan200.computercraft.shared.network.server.QueueEventServerMessage; import dan200.computercraft.shared.network.server.RequestComputerMessage; import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheralProvider; -import dan200.computercraft.shared.peripheral.common.BlockPeripheral; import dan200.computercraft.shared.peripheral.common.DefaultPeripheralProvider; -import dan200.computercraft.shared.peripheral.common.ItemPeripheral; import dan200.computercraft.shared.peripheral.diskdrive.ContainerDiskDrive; import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive; -import dan200.computercraft.shared.peripheral.modem.wired.*; -import dan200.computercraft.shared.peripheral.modem.wireless.BlockAdvancedModem; -import dan200.computercraft.shared.peripheral.modem.wireless.ItemAdvancedModem; -import dan200.computercraft.shared.peripheral.modem.wireless.TileAdvancedModem; -import dan200.computercraft.shared.peripheral.modem.wireless.TileWirelessModem; -import dan200.computercraft.shared.peripheral.monitor.TileMonitor; import dan200.computercraft.shared.peripheral.printer.ContainerPrinter; import dan200.computercraft.shared.peripheral.printer.TilePrinter; -import dan200.computercraft.shared.peripheral.speaker.TileSpeaker; import dan200.computercraft.shared.pocket.inventory.ContainerPocketComputer; import dan200.computercraft.shared.pocket.items.ItemPocketComputer; -import dan200.computercraft.shared.pocket.items.PocketComputerItemFactory; -import dan200.computercraft.shared.pocket.peripherals.PocketModem; -import dan200.computercraft.shared.pocket.peripherals.PocketSpeaker; import dan200.computercraft.shared.turtle.blocks.TileTurtle; import dan200.computercraft.shared.turtle.inventory.ContainerTurtle; -import dan200.computercraft.shared.util.Colour; import dan200.computercraft.shared.util.CreativeTabMain; -import dan200.computercraft.shared.util.ImpostorRecipe; -import dan200.computercraft.shared.util.ImpostorShapelessRecipe; import dan200.computercraft.shared.wired.CapabilityWiredElement; -import net.minecraft.block.Block; import net.minecraft.command.CommandHandler; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; import net.minecraft.inventory.Container; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.Ingredient; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; -import net.minecraft.util.NonNullList; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.event.entity.player.PlayerContainerEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.FMLCommonHandler; @@ -94,10 +59,8 @@ import net.minecraftforge.fml.common.network.FMLNetworkEvent; import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; -import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.registries.IForgeRegistry; import pl.asie.charset.ModCharset; public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy @@ -105,8 +68,6 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy @Override public void preInit() { - MinecraftForge.EVENT_BUS.register( this ); - // Creative tab ComputerCraft.mainCreativeTab = new CreativeTabMain( CreativeTabs.getNextID() ); } @@ -114,8 +75,8 @@ public void preInit() @Override public void init() { - registerTileEntities(); - registerForgeHandlers(); + registerProviders(); + NetworkRegistry.INSTANCE.registerGuiHandler( ComputerCraft.instance, new GuiHandler() ); registerNetwork(); Fixes.register( FMLCommonHandler.instance().getDataFixer() ); @@ -129,229 +90,8 @@ public void initServer( MinecraftServer server ) handler.registerCommand( new CommandComputerCraft() ); } - @SubscribeEvent - public void registerBlocks( RegistryEvent.Register event ) + private void registerProviders() { - IForgeRegistry registry = event.getRegistry(); - - // Computer - ComputerCraft.Blocks.computer = new BlockComputer(); - registry.register( ComputerCraft.Blocks.computer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ) ); - - // Peripheral - ComputerCraft.Blocks.peripheral = new BlockPeripheral(); - registry.register( ComputerCraft.Blocks.peripheral.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "peripheral" ) ) ); - - // Cable - ComputerCraft.Blocks.cable = new BlockCable(); - registry.register( ComputerCraft.Blocks.cable.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "cable" ) ) ); - - // Command Computer - ComputerCraft.Blocks.commandComputer = new BlockCommandComputer(); - registry.register( ComputerCraft.Blocks.commandComputer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ) ) ); - - // Command Computer - ComputerCraft.Blocks.advancedModem = new BlockAdvancedModem(); - registry.register( ComputerCraft.Blocks.advancedModem.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "advanced_modem" ) ) ); - - // Full block modem - ComputerCraft.Blocks.wiredModemFull = new BlockWiredModemFull(); - registry.register( ComputerCraft.Blocks.wiredModemFull.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ) ); - } - - @SubscribeEvent - public void registerItems( RegistryEvent.Register event ) - { - IForgeRegistry registry = event.getRegistry(); - - // Computer - registry.register( new ItemComputer( ComputerCraft.Blocks.computer ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ) ); - - // Peripheral - registry.register( new ItemPeripheral( ComputerCraft.Blocks.peripheral ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "peripheral" ) ) ); - - // Cable - registry.register( new ItemCable( ComputerCraft.Blocks.cable ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "cable" ) ) ); - - // Command Computer - registry.register( new ItemCommandComputer( ComputerCraft.Blocks.commandComputer ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ) ) ); - - // Advanced modem - registry.register( new ItemAdvancedModem( ComputerCraft.Blocks.advancedModem ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "advanced_modem" ) ) ); - - // Full block modem - registry.register( new ItemWiredModemFull( ComputerCraft.Blocks.wiredModemFull ).setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ) ); - - // Items - // Floppy Disk - ComputerCraft.Items.disk = new ItemDiskLegacy(); - registry.register( ComputerCraft.Items.disk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk" ) ) ); - - ComputerCraft.Items.diskExpanded = new ItemDiskExpanded(); - registry.register( ComputerCraft.Items.diskExpanded.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "disk_expanded" ) ) ); - - // Treasure Disk - ComputerCraft.Items.treasureDisk = new ItemTreasureDisk(); - registry.register( ComputerCraft.Items.treasureDisk.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "treasure_disk" ) ) ); - - // Printout - ComputerCraft.Items.printout = new ItemPrintout(); - registry.register( ComputerCraft.Items.printout.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "printout" ) ) ); - - // Pocket computer - ComputerCraft.Items.pocketComputer = new ItemPocketComputer(); - registry.register( ComputerCraft.Items.pocketComputer.setRegistryName( new ResourceLocation( ComputerCraft.MOD_ID, "pocket_computer" ) ) ); - - registerUpgrades(); - } - - @SubscribeEvent - public void registerRecipes( RegistryEvent.Register event ) - { - IForgeRegistry registry = event.getRegistry(); - - // Impostor Disk recipes (to fool NEI) - ItemStack paper = new ItemStack( Items.PAPER, 1 ); - ItemStack redstone = new ItemStack( Items.REDSTONE, 1 ); - for( int colour = 0; colour < 16; colour++ ) - { - ItemStack disk = ItemDiskLegacy.createFromIDAndColour( -1, null, Colour.values()[colour].getHex() ); - ItemStack dye = new ItemStack( Items.DYE, 1, colour ); - - int diskIdx = 0; - ItemStack[] disks = new ItemStack[15]; - for( int otherColour = 0; otherColour < 16; otherColour++ ) - { - if( colour != otherColour ) - { - disks[diskIdx++] = ItemDiskLegacy.createFromIDAndColour( -1, null, Colour.values()[otherColour].getHex() ); - } - } - - // Normal recipe - registry.register( - new ImpostorShapelessRecipe( "computercraft:disk", disk, new ItemStack[] { redstone, paper, dye } ) - .setRegistryName( new ResourceLocation( "computercraft:disk_imposter_" + colour ) ) - ); - - // Conversion recipe - registry.register( - new ImpostorShapelessRecipe( "computercraft:disk", disk, NonNullList.from( Ingredient.EMPTY, Ingredient.fromStacks( disks ), Ingredient.fromStacks( dye ) ) ) - .setRegistryName( new ResourceLocation( "computercraft:disk_imposter_convert_" + colour ) ) - ); - } - - // Impostor Pocket Computer recipes (to fool NEI) - ItemStack pocketComputer = PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, null ); - ItemStack advancedPocketComputer = PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Advanced, null ); - for( IPocketUpgrade upgrade : PocketUpgrades.getVanillaUpgrades() ) - { - registry.register( new ImpostorRecipe( - "computercraft:normal_pocket_upgrade", - 1, 2, - new ItemStack[] { upgrade.getCraftingItem(), pocketComputer }, - PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Normal, upgrade ) - ).setRegistryName( new ResourceLocation( "computercraft:normal_pocket_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) ) ) - ); - - registry.register( - new ImpostorRecipe( "computercraft:advanced_pocket_upgrade", - 1, 2, - new ItemStack[] { upgrade.getCraftingItem(), advancedPocketComputer }, - PocketComputerItemFactory.create( -1, null, -1, ComputerFamily.Advanced, upgrade ) - ).setRegistryName( new ResourceLocation( "computercraft:advanced_pocket_upgrade_" + upgrade.getUpgradeID().toString().replace( ':', '_' ) ) ) - ); - } - } - - private void registerUpgrades() - { - // Register pocket upgrades - ComputerCraft.PocketUpgrades.wirelessModem = new PocketModem( false ); - ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.wirelessModem ); - ComputerCraft.PocketUpgrades.advancedModem = new PocketModem( true ); - ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.advancedModem ); - - ComputerCraft.PocketUpgrades.pocketSpeaker = new PocketSpeaker(); - ComputerCraftAPI.registerPocketUpgrade( ComputerCraft.PocketUpgrades.pocketSpeaker ); - } - - @SubscribeEvent - public void remapItems( RegistryEvent.MissingMappings mappings ) - { - // We have to use mappings.getAllMappings() as the mod ID is upper case but the domain lower. - for( RegistryEvent.MissingMappings.Mapping mapping : mappings.getAllMappings() ) - { - String domain = mapping.key.getNamespace(); - if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; - - String key = mapping.key.getPath(); - if( key.equalsIgnoreCase( "CC-Computer" ) ) - { - mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.computer ) ); - } - else if( key.equalsIgnoreCase( "CC-Peripheral" ) ) - { - mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.peripheral ) ); - } - else if( key.equalsIgnoreCase( "CC-Cable" ) ) - { - mapping.remap( Item.getItemFromBlock( ComputerCraft.Blocks.cable ) ); - } - else if( key.equalsIgnoreCase( "diskExpanded" ) ) - { - mapping.remap( ComputerCraft.Items.diskExpanded ); - } - else if( key.equalsIgnoreCase( "treasureDisk" ) ) - { - mapping.remap( ComputerCraft.Items.treasureDisk ); - } - else if( key.equalsIgnoreCase( "pocketComputer" ) ) - { - mapping.remap( ComputerCraft.Items.pocketComputer ); - } - } - } - - @SubscribeEvent - public void remapBlocks( RegistryEvent.MissingMappings mappings ) - { - // We have to use mappings.getAllMappings() as the mod ID is upper case but the domain lower. - for( RegistryEvent.MissingMappings.Mapping mapping : mappings.getAllMappings() ) - { - String domain = mapping.key.getNamespace(); - if( !domain.equalsIgnoreCase( ComputerCraft.MOD_ID ) ) continue; - - String key = mapping.key.getPath(); - if( key.equalsIgnoreCase( "CC-Computer" ) ) - { - mapping.remap( ComputerCraft.Blocks.computer ); - } - else if( key.equalsIgnoreCase( "CC-Peripheral" ) ) - { - mapping.remap( ComputerCraft.Blocks.peripheral ); - } - else if( key.equalsIgnoreCase( "CC-Cable" ) ) - { - mapping.remap( ComputerCraft.Blocks.cable ); - } - } - } - - private void registerTileEntities() - { - // Tile Entities - GameRegistry.registerTileEntity( TileComputer.class, new ResourceLocation( ComputerCraft.MOD_ID, "computer" ) ); - GameRegistry.registerTileEntity( TileDiskDrive.class, new ResourceLocation( ComputerCraft.MOD_ID, "diskdrive" ) ); - GameRegistry.registerTileEntity( TileWirelessModem.class, new ResourceLocation( ComputerCraft.MOD_ID, "wirelessmodem" ) ); - GameRegistry.registerTileEntity( TileMonitor.class, new ResourceLocation( ComputerCraft.MOD_ID, "monitor" ) ); - GameRegistry.registerTileEntity( TilePrinter.class, new ResourceLocation( ComputerCraft.MOD_ID, "ccprinter" ) ); - GameRegistry.registerTileEntity( TileCable.class, new ResourceLocation( ComputerCraft.MOD_ID, "wiredmodem" ) ); - GameRegistry.registerTileEntity( TileCommandComputer.class, new ResourceLocation( ComputerCraft.MOD_ID, "command_computer" ) ); - GameRegistry.registerTileEntity( TileAdvancedModem.class, new ResourceLocation( ComputerCraft.MOD_ID, "advanced_modem" ) ); - GameRegistry.registerTileEntity( TileSpeaker.class, new ResourceLocation( ComputerCraft.MOD_ID, "speaker" ) ); - GameRegistry.registerTileEntity( TileWiredModemFull.class, new ResourceLocation( ComputerCraft.MOD_ID, "wired_modem_full" ) ); - // Register peripheral providers ComputerCraftAPI.registerPeripheralProvider( new DefaultPeripheralProvider() ); if( ComputerCraft.enableCommandBlock ) @@ -369,11 +109,6 @@ private void registerTileEntities() CapabilityWiredElement.register(); } - private void registerForgeHandlers() - { - NetworkRegistry.INSTANCE.registerGuiHandler( ComputerCraft.instance, new GuiHandler() ); - } - private void registerNetwork() { // Server messages diff --git a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java index bd74b50ad..8add13f6b 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java +++ b/src/main/java/dan200/computercraft/shared/turtle/core/TurtleBrain.java @@ -13,7 +13,6 @@ import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.turtle.*; -import dan200.computercraft.shared.TurtleUpgrades; import dan200.computercraft.shared.computer.blocks.ComputerProxy; import dan200.computercraft.shared.computer.blocks.TileComputerBase; import dan200.computercraft.shared.computer.core.ComputerFamily; @@ -185,11 +184,11 @@ public void readFromNBT( NBTTagCompound nbt ) int subType = nbt.getInteger( "subType" ); if( (subType & 0x1) > 0 ) { - leftUpgrade = ComputerCraft.Upgrades.diamondPickaxe; + leftUpgrade = ComputerCraft.TurtleUpgrades.diamondPickaxe; } if( (subType & 0x2) > 0 ) { - rightUpgrade = ComputerCraft.Upgrades.wirelessModem; + rightUpgrade = ComputerCraft.TurtleUpgrades.wirelessModem; } } else @@ -199,22 +198,22 @@ public void readFromNBT( NBTTagCompound nbt ) { if( nbt.getTagId( "leftUpgrade" ) == Constants.NBT.TAG_STRING ) { - leftUpgrade = TurtleUpgrades.get( nbt.getString( "leftUpgrade" ) ); + leftUpgrade = dan200.computercraft.shared.TurtleUpgrades.get( nbt.getString( "leftUpgrade" ) ); } else { - leftUpgrade = TurtleUpgrades.get( nbt.getShort( "leftUpgrade" ) ); + leftUpgrade = dan200.computercraft.shared.TurtleUpgrades.get( nbt.getShort( "leftUpgrade" ) ); } } if( nbt.hasKey( "rightUpgrade" ) ) { if( nbt.getTagId( "rightUpgrade" ) == Constants.NBT.TAG_STRING ) { - rightUpgrade = TurtleUpgrades.get( nbt.getString( "rightUpgrade" ) ); + rightUpgrade = dan200.computercraft.shared.TurtleUpgrades.get( nbt.getString( "rightUpgrade" ) ); } else { - rightUpgrade = TurtleUpgrades.get( nbt.getShort( "rightUpgrade" ) ); + rightUpgrade = dan200.computercraft.shared.TurtleUpgrades.get( nbt.getShort( "rightUpgrade" ) ); } } } @@ -346,7 +345,7 @@ public void readDescription( NBTTagCompound nbt ) // Upgrades if( nbt.hasKey( "leftUpgrade" ) ) { - setUpgrade( TurtleSide.Left, TurtleUpgrades.get( nbt.getString( "leftUpgrade" ) ) ); + setUpgrade( TurtleSide.Left, dan200.computercraft.shared.TurtleUpgrades.get( nbt.getString( "leftUpgrade" ) ) ); } else { @@ -354,7 +353,7 @@ public void readDescription( NBTTagCompound nbt ) } if( nbt.hasKey( "rightUpgrade" ) ) { - setUpgrade( TurtleSide.Right, TurtleUpgrades.get( nbt.getString( "rightUpgrade" ) ) ); + setUpgrade( TurtleSide.Right, dan200.computercraft.shared.TurtleUpgrades.get( nbt.getString( "rightUpgrade" ) ) ); } else { diff --git a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java index 5e82249d0..23e87da10 100644 --- a/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java +++ b/src/main/java/dan200/computercraft/shared/turtle/items/ItemTurtleLegacy.java @@ -31,8 +31,8 @@ public ItemTurtleLegacy( Block block ) public ItemStack create( int id, String label, int colour, ITurtleUpgrade leftUpgrade, ITurtleUpgrade rightUpgrade, int fuelLevel, ResourceLocation overlay ) { // Legacy turtles only support pickaxes and modems - if( (leftUpgrade != null && leftUpgrade != ComputerCraft.Upgrades.diamondPickaxe) || - (rightUpgrade != null && rightUpgrade != ComputerCraft.Upgrades.wirelessModem) || + if( (leftUpgrade != null && leftUpgrade != ComputerCraft.TurtleUpgrades.diamondPickaxe) || + (rightUpgrade != null && rightUpgrade != ComputerCraft.TurtleUpgrades.wirelessModem) || (colour != -1) || (overlay != null) ) { return null; @@ -114,7 +114,7 @@ public ITurtleUpgrade getUpgrade( @Nonnull ItemStack stack, TurtleSide side ) { if( (damage & 0x1) > 0 ) { - return ComputerCraft.Upgrades.diamondPickaxe; + return ComputerCraft.TurtleUpgrades.diamondPickaxe; } break; } @@ -122,7 +122,7 @@ public ITurtleUpgrade getUpgrade( @Nonnull ItemStack stack, TurtleSide side ) { if( (damage & 0x2) > 0 ) { - return ComputerCraft.Upgrades.wirelessModem; + return ComputerCraft.TurtleUpgrades.wirelessModem; } break; } diff --git a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json index 73f3e3894..1956e6553 100644 --- a/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json +++ b/src/main/resources/assets/computercraft/models/item/advanced_pocket_computer.json @@ -3,5 +3,32 @@ "textures": { "layer0": "computercraft:items/pocket_computer_frame", "layer1": "computercraft:items/pocket_computer_advanced" - } + }, + "overrides": [ + { + "model": "computercraft:item/advanced_pocket_computer", + "predicate": { "computercraft:state": 0, "computercraft:coloured": 0 } + }, + { + "model": "computercraft:item/advanced_pocket_computer_on", + "predicate": { "computercraft:state": 1, "computercraft:coloured": 0 } + }, + { + "model": "computercraft:item/advanced_pocket_computer_blinking", + "predicate": { "computercraft:state": 2, "computercraft:coloured": 0 } + }, + + { + "model": "computercraft:item/pocket_computer_colour", + "predicate": { "computercraft:state": 0, "computercraft:coloured": 1 } + }, + { + "model": "computercraft:item/pocket_computer_colour_on", + "predicate": { "computercraft:state": 1, "computercraft:coloured": 1 } + }, + { + "model": "computercraft:item/pocket_computer_colour_blinking", + "predicate": { "computercraft:state": 2, "computercraft:coloured": 1 } + } + ] } diff --git a/src/main/resources/assets/computercraft/models/item/pocket_computer.json b/src/main/resources/assets/computercraft/models/item/pocket_computer.json index b3420797b..5d56cf7f3 100644 --- a/src/main/resources/assets/computercraft/models/item/pocket_computer.json +++ b/src/main/resources/assets/computercraft/models/item/pocket_computer.json @@ -7,41 +7,28 @@ "overrides": [ { "model": "computercraft:item/pocket_computer", - "predicate": { "computercraft:state": 0, "computercraft:type": 0 } + "predicate": { "computercraft:state": 0, "computercraft:coloured": 0 } }, { "model": "computercraft:item/pocket_computer_on", - "predicate": { "computercraft:state": 1, "computercraft:type": 0 } + "predicate": { "computercraft:state": 1, "computercraft:coloured": 0 } }, { "model": "computercraft:item/pocket_computer_blinking", - "predicate": { "computercraft:state": 2, "computercraft:type": 0 } - }, - - { - "model": "computercraft:item/advanced_pocket_computer", - "predicate": { "computercraft:state": 0, "computercraft:type": 1 } - }, - { - "model": "computercraft:item/advanced_pocket_computer_on", - "predicate": { "computercraft:state": 1, "computercraft:type": 1 } - }, - { - "model": "computercraft:item/advanced_pocket_computer_blinking", - "predicate": { "computercraft:state": 2, "computercraft:type": 1 } + "predicate": { "computercraft:state": 2, "computercraft:coloured": 0 } }, { "model": "computercraft:item/pocket_computer_colour", - "predicate": { "computercraft:state": 0, "computercraft:type": 2 } + "predicate": { "computercraft:state": 0, "computercraft:coloured": 1 } }, { "model": "computercraft:item/pocket_computer_colour_on", - "predicate": { "computercraft:state": 1, "computercraft:type": 2 } + "predicate": { "computercraft:state": 1, "computercraft:coloured": 1 } }, { "model": "computercraft:item/pocket_computer_colour_blinking", - "predicate": { "computercraft:state": 2, "computercraft:type": 2 } + "predicate": { "computercraft:state": 2, "computercraft:coloured": 1 } } ] }