diff --git a/src/main/java/techreborn/Core.java b/src/main/java/techreborn/Core.java index 3c1e6ae0e..31e2ae6f5 100644 --- a/src/main/java/techreborn/Core.java +++ b/src/main/java/techreborn/Core.java @@ -29,6 +29,7 @@ import techreborn.init.ModParts; import techreborn.init.ModRecipes; import techreborn.lib.ModInfo; import techreborn.packets.PacketHandler; +import techreborn.packets.PacketPipeline; import techreborn.proxies.CommonProxy; import techreborn.tiles.idsu.IDSUManager; import techreborn.util.LogHelper; @@ -46,6 +47,8 @@ public class Core { @Mod.Instance public static Core INSTANCE; + public static final PacketPipeline packetPipeline = new PacketPipeline(); + @Mod.EventHandler public void preinit(FMLPreInitializationEvent event){ INSTANCE = this; @@ -97,7 +100,7 @@ public class Core { IDSUManager.INSTANCE = new IDSUManager(); MinecraftForge.EVENT_BUS.register(IDSUManager.INSTANCE); FMLCommonHandler.instance().bus().register(new MultiblockServerTickHandler()); - + packetPipeline.initalise(); LogHelper.info("Initialization Complete"); } @@ -111,6 +114,7 @@ public class Core { for(ICompatModule compatModule : CompatManager.INSTANCE.compatModules){ compatModule.postInit(event); } + packetPipeline.postInitialise(); LogHelper.info(RecipeHandler.recipeList.size() + " recipes loaded"); } diff --git a/src/main/java/techreborn/api/farm/IFarmLogicContainer.java b/src/main/java/techreborn/api/farm/IFarmLogicContainer.java new file mode 100644 index 000000000..873486d85 --- /dev/null +++ b/src/main/java/techreborn/api/farm/IFarmLogicContainer.java @@ -0,0 +1,9 @@ +package techreborn.api.farm; + +import net.minecraft.item.ItemStack; + +public interface IFarmLogicContainer { + + public IFarmLogicDevice getLogicFromStack(ItemStack stack); + +} diff --git a/src/main/java/techreborn/api/farm/IFarmLogicDevice.java b/src/main/java/techreborn/api/farm/IFarmLogicDevice.java new file mode 100644 index 000000000..baae8462d --- /dev/null +++ b/src/main/java/techreborn/api/farm/IFarmLogicDevice.java @@ -0,0 +1,9 @@ +package techreborn.api.farm; + +import techreborn.tiles.TileFarm; + +public interface IFarmLogicDevice { + + public void tick(TileFarm tileFarm); + +} diff --git a/src/main/java/techreborn/api/farm/package-info.java b/src/main/java/techreborn/api/farm/package-info.java new file mode 100644 index 000000000..25d71d461 --- /dev/null +++ b/src/main/java/techreborn/api/farm/package-info.java @@ -0,0 +1,5 @@ +@API(apiVersion = "@MODVERSION@", owner = "techreborn", provides = "techrebornAPI") +package techreborn.api.farm; + +import cpw.mods.fml.common.API; + diff --git a/src/main/java/techreborn/blocks/BlockFarm.java b/src/main/java/techreborn/blocks/BlockFarm.java new file mode 100644 index 000000000..3a6bd57d2 --- /dev/null +++ b/src/main/java/techreborn/blocks/BlockFarm.java @@ -0,0 +1,36 @@ +package techreborn.blocks; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import techreborn.Core; +import techreborn.client.GuiHandler; +import techreborn.client.TechRebornCreativeTab; +import techreborn.tiles.TileFarm; + +public class BlockFarm extends BlockMachineBase { + public BlockFarm() { + super(Material.iron); + setCreativeTab(TechRebornCreativeTab.instance); + setBlockName("techreborn.farm"); + setHardness(2F); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileFarm(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(!player.isSneaking()){ + player.openGui(Core.INSTANCE, GuiHandler.farmID, world, x, y, z); + return true; + } + return false; + } + + + +} diff --git a/src/main/java/techreborn/blocks/storage/BlockIDSU.java b/src/main/java/techreborn/blocks/storage/BlockIDSU.java index 910bb868a..9110f634c 100644 --- a/src/main/java/techreborn/blocks/storage/BlockIDSU.java +++ b/src/main/java/techreborn/blocks/storage/BlockIDSU.java @@ -7,6 +7,7 @@ import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; @@ -66,7 +67,7 @@ public class BlockIDSU extends BlockMachineBase { EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER){ - PacketHandler.sendPacketToPlayer(IDSUManager.INSTANCE.getPacket(world, player), player); + Core.packetPipeline.sendTo(IDSUManager.INSTANCE.getPacket(world), (EntityPlayerMP) player); } if (!player.isSneaking()) player.openGui(Core.INSTANCE, GuiHandler.idsuID, world, x, y, diff --git a/src/main/java/techreborn/client/GuiHandler.java b/src/main/java/techreborn/client/GuiHandler.java index 5d823dd2c..2181046ab 100644 --- a/src/main/java/techreborn/client/GuiHandler.java +++ b/src/main/java/techreborn/client/GuiHandler.java @@ -3,86 +3,10 @@ package techreborn.client; import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; -import techreborn.client.container.ContainerAesu; -import techreborn.client.container.ContainerAlloyFurnace; -import techreborn.client.container.ContainerAlloySmelter; -import techreborn.client.container.ContainerAssemblingMachine; -import techreborn.client.container.ContainerBlastFurnace; -import techreborn.client.container.ContainerCentrifuge; -import techreborn.client.container.ContainerChargeBench; -import techreborn.client.container.ContainerChemicalReactor; -import techreborn.client.container.ContainerChunkloader; -import techreborn.client.container.ContainerDestructoPack; -import techreborn.client.container.ContainerDieselGenerator; -import techreborn.client.container.ContainerDigitalChest; -import techreborn.client.container.ContainerGasTurbine; -import techreborn.client.container.ContainerGrinder; -import techreborn.client.container.ContainerIDSU; -import techreborn.client.container.ContainerImplosionCompressor; -import techreborn.client.container.ContainerIndustrialElectrolyzer; -import techreborn.client.container.ContainerIndustrialSawmill; -import techreborn.client.container.ContainerLathe; -import techreborn.client.container.ContainerLesu; -import techreborn.client.container.ContainerMatterFabricator; -import techreborn.client.container.ContainerPda; -import techreborn.client.container.ContainerPlateCuttingMachine; -import techreborn.client.container.ContainerQuantumChest; -import techreborn.client.container.ContainerQuantumTank; -import techreborn.client.container.ContainerRollingMachine; -import techreborn.client.container.ContainerSemifluidGenerator; -import techreborn.client.container.ContainerThermalGenerator; -import techreborn.client.gui.GuiAesu; -import techreborn.client.gui.GuiAlloyFurnace; -import techreborn.client.gui.GuiAlloySmelter; -import techreborn.client.gui.GuiAssemblingMachine; -import techreborn.client.gui.GuiBlastFurnace; -import techreborn.client.gui.GuiCentrifuge; -import techreborn.client.gui.GuiChargeBench; -import techreborn.client.gui.GuiChemicalReactor; -import techreborn.client.gui.GuiChunkLoader; -import techreborn.client.gui.GuiDestructoPack; -import techreborn.client.gui.GuiDieselGenerator; -import techreborn.client.gui.GuiDigitalChest; -import techreborn.client.gui.GuiGasTurbine; -import techreborn.client.gui.GuiGrinder; -import techreborn.client.gui.GuiIDSU; -import techreborn.client.gui.GuiImplosionCompressor; -import techreborn.client.gui.GuiIndustrialElectrolyzer; -import techreborn.client.gui.GuiIndustrialSawmill; -import techreborn.client.gui.GuiLathe; -import techreborn.client.gui.GuiLesu; -import techreborn.client.gui.GuiMatterFabricator; -import techreborn.client.gui.GuiPlateCuttingMachine; -import techreborn.client.gui.GuiQuantumChest; -import techreborn.client.gui.GuiQuantumTank; -import techreborn.client.gui.GuiRollingMachine; -import techreborn.client.gui.GuiSemifluidGenerator; -import techreborn.client.gui.GuiThermalGenerator; +import techreborn.client.container.*; +import techreborn.client.gui.*; import techreborn.pda.GuiPda; -import techreborn.tiles.TileAesu; -import techreborn.tiles.TileAlloyFurnace; -import techreborn.tiles.TileAlloySmelter; -import techreborn.tiles.TileAssemblingMachine; -import techreborn.tiles.TileBlastFurnace; -import techreborn.tiles.TileCentrifuge; -import techreborn.tiles.TileChargeBench; -import techreborn.tiles.TileChemicalReactor; -import techreborn.tiles.TileChunkLoader; -import techreborn.tiles.TileDieselGenerator; -import techreborn.tiles.TileDigitalChest; -import techreborn.tiles.TileGasTurbine; -import techreborn.tiles.TileGrinder; -import techreborn.tiles.TileImplosionCompressor; -import techreborn.tiles.TileIndustrialElectrolyzer; -import techreborn.tiles.TileIndustrialSawmill; -import techreborn.tiles.TileLathe; -import techreborn.tiles.TileMatterFabricator; -import techreborn.tiles.TilePlateCuttingMachine; -import techreborn.tiles.TileQuantumChest; -import techreborn.tiles.TileQuantumTank; -import techreborn.tiles.TileRollingMachine; -import techreborn.tiles.TileSemifluidGenerator; -import techreborn.tiles.TileThermalGenerator; +import techreborn.tiles.*; import techreborn.tiles.idsu.TileIDSU; import techreborn.tiles.lesu.TileLesu; @@ -116,6 +40,7 @@ public class GuiHandler implements IGuiHandler { public static final int lesuID = 26; public static final int idsuID = 27; public static final int chargeBench = 28; + public static final int farmID = 29; @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, @@ -224,7 +149,9 @@ public class GuiHandler implements IGuiHandler { return new ContainerIDSU((TileIDSU) world.getTileEntity(x, y, z), player); } else if (ID == chargeBench) { return new ContainerChargeBench((TileChargeBench) world.getTileEntity(x, y, z), player); - } + } else if (ID == farmID){ + return new ContainerFarm((TileFarm) world.getTileEntity(x,y,z), player); + } return null; @@ -337,7 +264,9 @@ public class GuiHandler implements IGuiHandler { return new GuiIDSU(player, (TileIDSU)world.getTileEntity(x, y, z)); } else if (ID == chargeBench) { return new GuiChargeBench(player, (TileChargeBench)world.getTileEntity(x, y, z)); - } + } else if(ID == farmID){ + return new GuiFarm(new ContainerFarm((TileFarm)world.getTileEntity(x, y, z), player)); + } return null; } } diff --git a/src/main/java/techreborn/client/container/ContainerFarm.java b/src/main/java/techreborn/client/container/ContainerFarm.java new file mode 100644 index 000000000..bd8f8fc69 --- /dev/null +++ b/src/main/java/techreborn/client/container/ContainerFarm.java @@ -0,0 +1,55 @@ +package techreborn.client.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import techreborn.tiles.TileFarm; + +public class ContainerFarm extends TechRebornContainer { + + TileFarm farm; + EntityPlayer player; + + public ContainerFarm(TileFarm farm, EntityPlayer player) { + this.farm = farm; + this.player = player; + + + this.addSlotToContainer(new Slot(farm.inventory, 0, 35, 7)); + + for (int i = 0; i < 3; i++) { + this.addSlotToContainer(new Slot(farm.inventory, 1 + i, 71 + (i * 18), 52)); + } + + + int p = 5; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + this.addSlotToContainer(new Slot(farm.inventory, p, 143 + (i * 18), 16 + (j * 18))); + p++; + } + } + + + int i; + + for (i = 0; i < 3; ++i) + { + for (int j = 0; j < 9; ++j) + { + this.addSlotToContainer(new Slot(player.inventory, j + i * 9 + + 9, 8 + j * 18 + 27, 84 + i * 18)); + } + } + + for (i = 0; i < 9; ++i) + { + this.addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18 + 27, + 142)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return true; + } +} diff --git a/src/main/java/techreborn/client/gui/GuiFarm.java b/src/main/java/techreborn/client/gui/GuiFarm.java new file mode 100644 index 000000000..218a2713f --- /dev/null +++ b/src/main/java/techreborn/client/gui/GuiFarm.java @@ -0,0 +1,38 @@ +package techreborn.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import techreborn.client.container.ContainerFarm; + +public class GuiFarm extends GuiContainer { + + private static final ResourceLocation texture = new ResourceLocation( + "techreborn", "textures/gui/farm.png"); + + ContainerFarm containerFarm; + + public GuiFarm(ContainerFarm container) { + super(container); + this.xSize = 203; + this.ySize = 166; + container = (ContainerFarm) this.inventorySlots; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float arg0, int arg1, int arg2) { + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } + + @Override + protected void drawGuiContainerForegroundLayer(int arg0, int arg1) { + String name = StatCollector.translateToLocal("tile.techreborn.farm.name"); + fontRendererObj.drawString(name, xSize / 2 - fontRendererObj.getStringWidth(name) / 2 + 68, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 60, + this.ySize - 96 + 2, 4210752); + super.drawGuiContainerForegroundLayer(arg0, arg1); + } +} diff --git a/src/main/java/techreborn/client/gui/GuiIDSU.java b/src/main/java/techreborn/client/gui/GuiIDSU.java index c7415f735..805a5206e 100644 --- a/src/main/java/techreborn/client/gui/GuiIDSU.java +++ b/src/main/java/techreborn/client/gui/GuiIDSU.java @@ -4,6 +4,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; +import techreborn.Core; import techreborn.client.container.ContainerIDSU; import techreborn.cofhLib.gui.GuiBase; import techreborn.cofhLib.gui.element.ElementListBox; @@ -78,8 +79,8 @@ public class GuiIDSU extends GuiBase { protected void actionPerformed(GuiButton button) { super.actionPerformed(button); if (isInteger(idFeild.getText())) { - PacketHandler.sendPacketToServer(new PacketIdsu(button.id, idsu, Integer.parseInt(idFeild.getText()), nameFeild.getText())); - } else { + Core.packetPipeline.sendToServer(new PacketIdsu(button.id, idsu, Integer.parseInt(idFeild.getText()), nameFeild.getText())); + } else { LogHelper.info("There was an issue in the gui!, Please report this to the TechReborn Devs"); } diff --git a/src/main/java/techreborn/command/TechRebornDevCommand.java b/src/main/java/techreborn/command/TechRebornDevCommand.java index ecedffbcc..9a23db48b 100644 --- a/src/main/java/techreborn/command/TechRebornDevCommand.java +++ b/src/main/java/techreborn/command/TechRebornDevCommand.java @@ -4,7 +4,9 @@ package techreborn.command; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.ChatComponentText; +import techreborn.Core; import techreborn.api.recipe.RecipeHandler; import techreborn.packets.PacketHandler; import techreborn.tiles.idsu.IDSUManager; @@ -36,7 +38,7 @@ public class TechRebornDevCommand extends CommandBase { } else if ("recipes".equals(args[0])) { sender.addChatMessage(new ChatComponentText(RecipeHandler.recipeList.size() + " recipes loaded")); } else if ("idsu".equals(args[0])){ - PacketHandler.sendPacketToPlayer(IDSUManager.INSTANCE.getPacket(sender.getEntityWorld(), (EntityPlayer) sender), (EntityPlayer) sender); + Core.packetPipeline.sendTo(IDSUManager.INSTANCE.getPacket(sender.getEntityWorld()), (EntityPlayerMP) sender); } } } diff --git a/src/main/java/techreborn/farm/FarmTree.java b/src/main/java/techreborn/farm/FarmTree.java new file mode 100644 index 000000000..36dd240de --- /dev/null +++ b/src/main/java/techreborn/farm/FarmTree.java @@ -0,0 +1,14 @@ +package techreborn.farm; + +import techreborn.api.farm.IFarmLogicDevice; +import techreborn.tiles.TileFarm; + +public class FarmTree implements IFarmLogicDevice { + + + + @Override + public void tick(TileFarm tileFarm) { + System.out.println("tick"); + } +} diff --git a/src/main/java/techreborn/init/ModBlocks.java b/src/main/java/techreborn/init/ModBlocks.java index b54366aa9..dbe833778 100644 --- a/src/main/java/techreborn/init/ModBlocks.java +++ b/src/main/java/techreborn/init/ModBlocks.java @@ -6,23 +6,7 @@ import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -import techreborn.blocks.BlockChunkLoader; -import techreborn.blocks.BlockComputerCube; -import techreborn.blocks.BlockDigitalChest; -import techreborn.blocks.BlockElectricCraftingTable; -import techreborn.blocks.BlockFusionCoil; -import techreborn.blocks.BlockFusionControlComputer; -import techreborn.blocks.BlockHighlyAdvancedMachine; -import techreborn.blocks.BlockMachineCasing; -import techreborn.blocks.BlockMachineFrame; -import techreborn.blocks.BlockMetalShelf; -import techreborn.blocks.BlockOre; -import techreborn.blocks.BlockQuantumChest; -import techreborn.blocks.BlockQuantumTank; -import techreborn.blocks.BlockStorage; -import techreborn.blocks.BlockStorage2; -import techreborn.blocks.BlockSupercondensator; -import techreborn.blocks.BlockWoodenshelf; +import techreborn.blocks.*; import techreborn.blocks.generator.BlockDieselGenerator; import techreborn.blocks.generator.BlockDragonEggSiphoner; import techreborn.blocks.generator.BlockGasTurbine; @@ -63,34 +47,7 @@ import techreborn.itemblocks.ItemBlockQuantumChest; import techreborn.itemblocks.ItemBlockQuantumTank; import techreborn.itemblocks.ItemBlockStorage; import techreborn.itemblocks.ItemBlockStorage2; -import techreborn.tiles.TileAesu; -import techreborn.tiles.TileAlloyFurnace; -import techreborn.tiles.TileAlloySmelter; -import techreborn.tiles.TileAssemblingMachine; -import techreborn.tiles.TileBlastFurnace; -import techreborn.tiles.TileCentrifuge; -import techreborn.tiles.TileChargeBench; -import techreborn.tiles.TileChemicalReactor; -import techreborn.tiles.TileChunkLoader; -import techreborn.tiles.TileDieselGenerator; -import techreborn.tiles.TileDigitalChest; -import techreborn.tiles.TileDragonEggSiphoner; -import techreborn.tiles.TileGasTurbine; -import techreborn.tiles.TileGrinder; -import techreborn.tiles.TileHeatGenerator; -import techreborn.tiles.TileImplosionCompressor; -import techreborn.tiles.TileIndustrialElectrolyzer; -import techreborn.tiles.TileIndustrialSawmill; -import techreborn.tiles.TileLathe; -import techreborn.tiles.TileMachineCasing; -import techreborn.tiles.TileMatterFabricator; -import techreborn.tiles.TileMetalShelf; -import techreborn.tiles.TilePlateCuttingMachine; -import techreborn.tiles.TileQuantumChest; -import techreborn.tiles.TileQuantumTank; -import techreborn.tiles.TileRollingMachine; -import techreborn.tiles.TileSemifluidGenerator; -import techreborn.tiles.TileThermalGenerator; +import techreborn.tiles.*; import techreborn.tiles.idsu.TileIDSU; import techreborn.tiles.lesu.TileLesu; import techreborn.tiles.lesu.TileLesuStorage; @@ -142,6 +99,7 @@ public class ModBlocks { public static Block heatGenerator; public static Block industrialSawmill; public static Block chargeBench; + public static Block farm; public static Block ore; public static Block storage; @@ -323,10 +281,14 @@ public class ModBlocks { machineframe = new BlockMachineFrame(Material.iron); GameRegistry.registerBlock(machineframe, ItemBlockMachineFrame.class, "techreborn.machineFrame"); - LogHelper.info("TechReborns Blocks Loaded"); + + farm = new BlockFarm(); + GameRegistry.registerBlock(farm, "techreborn.farm"); + GameRegistry.registerTileEntity(TileFarm.class, "TileFarmTR"); registerOreDict(); + LogHelper.info("TechReborns Blocks Loaded"); } public static void registerOreDict(){ diff --git a/src/main/java/techreborn/init/ModItems.java b/src/main/java/techreborn/init/ModItems.java index 8f5383888..5978d10bc 100644 --- a/src/main/java/techreborn/init/ModItems.java +++ b/src/main/java/techreborn/init/ModItems.java @@ -10,21 +10,7 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.oredict.OreDictionary; -import techreborn.items.ItemCells; -import techreborn.items.ItemCrushedOre; -import techreborn.items.ItemDusts; -import techreborn.items.ItemDustsSmall; -import techreborn.items.ItemDustsTiny; -import techreborn.items.ItemGems; -import techreborn.items.ItemIngots; -import techreborn.items.ItemLapotronicOrb; -import techreborn.items.ItemNuggets; -import techreborn.items.ItemParts; -import techreborn.items.ItemPlates; -import techreborn.items.ItemPurifiedCrushedOre; -import techreborn.items.ItemRods; -import techreborn.items.ItemUUmatter; -import techreborn.items.ItemUpgrade; +import techreborn.items.*; import techreborn.items.armor.ItemLapotronPack; import techreborn.items.armor.ItemLithiumBatpack; import techreborn.items.tools.ItemAdvancedDrill; @@ -86,7 +72,7 @@ public class ModItems { public static Item hammerIron; public static Item hammerDiamond; public static Item upgrades; - + public static Item farmPatten; public static void init() @@ -142,6 +128,9 @@ public class ModItems { hammerDiamond = new ItemHammer(200); hammerDiamond.setUnlocalizedName("hammerDiamond").setContainerItem(hammerDiamond); GameRegistry.registerItem(hammerDiamond, "hammerDiamond"); + + farmPatten = new ItemFarmPatten(); + GameRegistry.registerItem(farmPatten, "farmPatten"); // buckets bucketBerylium = new ItemFluidbucket(ModFluids.BlockFluidBerylium); diff --git a/src/main/java/techreborn/items/ItemFarmPatten.java b/src/main/java/techreborn/items/ItemFarmPatten.java new file mode 100644 index 000000000..4efe62ea4 --- /dev/null +++ b/src/main/java/techreborn/items/ItemFarmPatten.java @@ -0,0 +1,22 @@ +package techreborn.items; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import techreborn.api.farm.IFarmLogicContainer; +import techreborn.api.farm.IFarmLogicDevice; +import techreborn.client.TechRebornCreativeTabMisc; +import techreborn.farm.FarmTree; + +public class ItemFarmPatten extends Item implements IFarmLogicContainer { + + + public ItemFarmPatten() { + setCreativeTab(TechRebornCreativeTabMisc.instance); + setUnlocalizedName("techreborn.farmPatten"); + } + + @Override + public IFarmLogicDevice getLogicFromStack(ItemStack stack) { + return new FarmTree(); + } +} diff --git a/src/main/java/techreborn/packets/AbstractPacket.java b/src/main/java/techreborn/packets/AbstractPacket.java new file mode 100644 index 000000000..87f0624e2 --- /dev/null +++ b/src/main/java/techreborn/packets/AbstractPacket.java @@ -0,0 +1,50 @@ +package techreborn.packets; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import net.minecraft.entity.player.EntityPlayer; + +/** + * AbstractPacket class. Should be the parent of all packets wishing to use the + * PacketPipeline. + * + * @author sirgingalot + */ +public abstract class AbstractPacket { + + /** + * Encode the packet data into the ByteBuf stream. Complex data sets may + * need specific data handlers (See + * + * @param ctx channel context + * @param buffer the buffer to encode into + * @link{cpw.mods.fml.common.network.ByteBuffUtils ) + */ + public abstract void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer); + + /** + * Decode the packet data from the ByteBuf stream. Complex data sets may + * need specific data handlers (See + * + * @param ctx channel context + * @param buffer the buffer to decode from + * @link{cpw.mods.fml.common.network.ByteBuffUtils ) + */ + public abstract void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer); + + /** + * Handle a packet on the client side. Note this occurs after decoding has + * completed. + * + * @param player the player reference + */ + public abstract void handleClientSide(EntityPlayer player); + + /** + * Handle a packet on the powerSink side. Note this occurs after decoding has + * completed. + * + * @param player the player reference + */ + public abstract void handleServerSide(EntityPlayer player); +} \ No newline at end of file diff --git a/src/main/java/techreborn/packets/PacketHandler.java b/src/main/java/techreborn/packets/PacketHandler.java index c181ccacd..7183abf4c 100644 --- a/src/main/java/techreborn/packets/PacketHandler.java +++ b/src/main/java/techreborn/packets/PacketHandler.java @@ -21,8 +21,6 @@ public class PacketHandler extends public PacketHandler() { addDiscriminator(0, PacketAesu.class); - addDiscriminator(1, PacketIdsu.class); - addDiscriminator(2, PacketSendIDSUManager.class); } public static EnumMap getChannels() diff --git a/src/main/java/techreborn/packets/PacketIdsu.java b/src/main/java/techreborn/packets/PacketIdsu.java index 1da7ea014..9442fd46c 100644 --- a/src/main/java/techreborn/packets/PacketIdsu.java +++ b/src/main/java/techreborn/packets/PacketIdsu.java @@ -1,17 +1,14 @@ package techreborn.packets; import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.PacketBuffer; import techreborn.tiles.idsu.TileIDSU; import java.io.IOException; -/** - * Created by mark on 17/06/15. - */ -public class PacketIdsu extends SimplePacket { - - +public class PacketIdsu extends AbstractPacket { public PacketIdsu() { } @@ -21,6 +18,8 @@ public class PacketIdsu extends SimplePacket { TileIDSU idsu; + int x, y, z; + public PacketIdsu(int buttonID, TileIDSU idsu, int channel, String newName) { this.idsu = idsu; this.buttonID = buttonID; @@ -28,28 +27,45 @@ public class PacketIdsu extends SimplePacket { this.newName = newName; } - @Override - public void writeData(ByteBuf out) throws IOException { - SimplePacket.writeTileEntity(idsu, out); - out.writeInt(buttonID); - out.writeInt(channel); - PacketBuffer buffer = new PacketBuffer(out); - buffer.writeStringToBuffer(newName); - } - @Override - public void readData(ByteBuf in) throws IOException { - this.idsu = (TileIDSU) SimplePacket.readTileEntity(in); - buttonID = in.readInt(); - channel = in.readInt(); - PacketBuffer buffer = new PacketBuffer(in); - newName = buffer.readStringFromBuffer(9); - } + @Override + public void encodeInto(ChannelHandlerContext ctx, ByteBuf out) { + out.writeInt(idsu.xCoord); + out.writeInt(idsu.yCoord); + out.writeInt(idsu.zCoord); + out.writeInt(buttonID); + out.writeInt(channel); + PacketBuffer buffer = new PacketBuffer(out); + try { + buffer.writeStringToBuffer(newName); + } catch (IOException e) { + e.printStackTrace(); + } + } - @Override - public void execute() { - if(!idsu.getWorldObj().isRemote){ - idsu.handleGuiInputFromClient(buttonID, channel, player, newName); - } - } + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf in) { + this.x = in.readInt(); + this.y = in.readInt(); + this.z = in.readInt(); + buttonID = in.readInt(); + channel = in.readInt(); + PacketBuffer buffer = new PacketBuffer(in); + try { + newName = buffer.readStringFromBuffer(9999999); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void handleClientSide(EntityPlayer player) { + + } + + @Override + public void handleServerSide(EntityPlayer player) { + idsu = (TileIDSU) player.getEntityWorld().getTileEntity(x, y, z); + idsu.handleGuiInputFromClient(buttonID, channel, player, newName); + } } diff --git a/src/main/java/techreborn/packets/PacketPipeline.java b/src/main/java/techreborn/packets/PacketPipeline.java new file mode 100644 index 000000000..58e47cfb2 --- /dev/null +++ b/src/main/java/techreborn/packets/PacketPipeline.java @@ -0,0 +1,229 @@ +package techreborn.packets; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToMessageCodec; + +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumMap; +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.network.FMLEmbeddedChannel; +import cpw.mods.fml.common.network.FMLOutboundHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * Packet pipeline class. Directs all registered packet data to be handled by + * the packets themselves. + * + * @author sirgingalot some code from: cpw + */ +@ChannelHandler.Sharable +public class PacketPipeline extends MessageToMessageCodec { + + private EnumMap channels; + private LinkedList> packets = new LinkedList>(); + private boolean isPostInitialised = false; + + /** + * Register your packet with the pipeline. Discriminators are automatically + * set. + * + * @param clazz the class to register + * @return whether registration was successful. Failure may occur if 256 + * packets have been registered or if the registry already contains + * this packet + */ + public boolean registerPacket(Class clazz) { + if (this.packets.size() > 256) { + // You should log here!! + return false; + } + + if (this.packets.contains(clazz)) { + // You should log here!! + return false; + } + + if (this.isPostInitialised) { + // You should log here!! + return false; + } + + this.packets.add(clazz); + return true; + } + + // In line encoding of the packet, including discriminator setting + @Override + protected void encode(ChannelHandlerContext ctx, AbstractPacket msg, List out) throws Exception { + ByteBuf buffer = Unpooled.buffer(); + Class clazz = msg.getClass(); + if (!this.packets.contains(msg.getClass())) { + throw new NullPointerException("No Packet Registered for: " + msg.getClass().getCanonicalName()); + } + + byte discriminator = (byte) this.packets.indexOf(clazz); + buffer.writeByte(discriminator); + msg.encodeInto(ctx, buffer); + FMLProxyPacket proxyPacket = new FMLProxyPacket(buffer.copy(), ctx.channel().attr(NetworkRegistry.FML_CHANNEL).get()); + out.add(proxyPacket); + } + + // In line decoding and handling of the packet + @Override + protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List out) throws Exception { + ByteBuf payload = msg.payload(); + byte discriminator = payload.readByte(); + Class clazz = this.packets.get(discriminator); + if (clazz == null) { + throw new NullPointerException("No packet registered for discriminator: " + discriminator); + } + + AbstractPacket pkt = clazz.newInstance(); + pkt.decodeInto(ctx, payload.slice()); + + EntityPlayer player; + switch (FMLCommonHandler.instance().getEffectiveSide()) { + case CLIENT: + player = this.getClientPlayer(); + pkt.handleClientSide(player); + break; + + case SERVER: + INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get(); + player = ((NetHandlerPlayServer) netHandler).playerEntity; + pkt.handleServerSide(player); + break; + + default: + } + + out.add(pkt); + } + + // Method to call from FMLInitializationEvent + public void initalise() { + this.channels = NetworkRegistry.INSTANCE.newChannel("TechRebornPackPipeLine", this); + registerPackets(); + } + + private void registerPackets() { + registerPacket(PacketIdsu.class); + registerPacket(PacketSendIDSUManager.class); + } + + // Method to call from FMLPostInitializationEvent + // Ensures that packet discriminators are common between powerSink and client + // by using logical sorting + public void postInitialise() { + if (this.isPostInitialised) { + return; + } + + this.isPostInitialised = true; + Collections.sort(this.packets, new Comparator>() { + + @Override + public int compare(Class clazz1, Class clazz2) { + int com = String.CASE_INSENSITIVE_ORDER.compare(clazz1.getCanonicalName(), clazz2.getCanonicalName()); + if (com == 0) { + com = clazz1.getCanonicalName().compareTo(clazz2.getCanonicalName()); + } + + return com; + } + }); + } + + @SideOnly(Side.CLIENT) + private EntityPlayer getClientPlayer() { + return Minecraft.getMinecraft().thePlayer; + } + + /** + * Send this message to everyone. + *

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + */ + public void sendToAll(AbstractPacket message) { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALL); + this.channels.get(Side.SERVER).writeAndFlush(message); + } + + /** + * Send this message to the specified player. + *

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param player The player to send it to + */ + public void sendTo(AbstractPacket message, EntityPlayerMP player) { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player); + this.channels.get(Side.SERVER).writeAndFlush(message); + } + + /** + * Send this message to everyone within a certain range of a point. + *

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param point The + * {@link cpw.mods.fml.common.network.NetworkRegistry.TargetPoint} + * around which to send + */ + public void sendToAllAround(AbstractPacket message, NetworkRegistry.TargetPoint point) { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(point); + this.channels.get(Side.SERVER).writeAndFlush(message); + } + + /** + * Send this message to everyone within the supplied dimension. + *

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + * @param dimensionId The dimension id to target + */ + public void sendToDimension(AbstractPacket message, int dimensionId) { + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.DIMENSION); + this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(dimensionId); + this.channels.get(Side.SERVER).writeAndFlush(message); + } + + /** + * Send this message to the powerSink. + *

+ * Adapted from CPW's code in + * cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper + * + * @param message The message to send + */ + public void sendToServer(AbstractPacket message) { + this.channels.get(Side.CLIENT).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER); + this.channels.get(Side.CLIENT).writeAndFlush(message); + } + +} \ No newline at end of file diff --git a/src/main/java/techreborn/packets/PacketSendIDSUManager.java b/src/main/java/techreborn/packets/PacketSendIDSUManager.java index 954ce9625..204bdae49 100644 --- a/src/main/java/techreborn/packets/PacketSendIDSUManager.java +++ b/src/main/java/techreborn/packets/PacketSendIDSUManager.java @@ -1,6 +1,7 @@ package techreborn.packets; import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.PacketBuffer; import net.minecraft.world.World; @@ -11,34 +12,39 @@ import techreborn.tiles.idsu.IDSUManager; import java.io.IOException; -public class PacketSendIDSUManager extends SimplePacket { +public class PacketSendIDSUManager extends AbstractPacket { String json; public PacketSendIDSUManager() { } - public PacketSendIDSUManager(String json, EntityPlayer player) { + public PacketSendIDSUManager(String json) { this.json = json; - this.player = player; } @Override - public void writeData(ByteBuf out) throws IOException { + public void encodeInto(ChannelHandlerContext ctx, ByteBuf out) { PacketBuffer buffer = new PacketBuffer(out); - buffer.writeStringToBuffer(json); - writePlayer(player, out); - } + try { + buffer.writeStringToBuffer(json); + } catch (IOException e) { + e.printStackTrace(); + } + } @Override - public void readData(ByteBuf in) throws IOException { + public void decodeInto(ChannelHandlerContext ctx, ByteBuf in) { PacketBuffer buffer = new PacketBuffer(in); - json = buffer.readStringFromBuffer(Integer.MAX_VALUE / 4); - player = readPlayer(in); - } + try { + json = buffer.readStringFromBuffer(9999999); + } catch (IOException e) { + e.printStackTrace(); + } + } @Override - public void execute() { + public void handleClientSide(EntityPlayer player) { ClientSideIDSUManager.CLIENT.loadFromString(json, player.worldObj); if(player.worldObj != null){ @@ -57,4 +63,9 @@ public class PacketSendIDSUManager extends SimplePacket { } } } + + @Override + public void handleServerSide(EntityPlayer player) { + + } } diff --git a/src/main/java/techreborn/tiles/TileFarm.java b/src/main/java/techreborn/tiles/TileFarm.java new file mode 100644 index 000000000..1ff31b411 --- /dev/null +++ b/src/main/java/techreborn/tiles/TileFarm.java @@ -0,0 +1,45 @@ +package techreborn.tiles; + +import net.minecraft.nbt.NBTTagCompound; +import techreborn.api.farm.IFarmLogicContainer; +import techreborn.api.farm.IFarmLogicDevice; +import techreborn.farm.FarmTree; +import techreborn.util.Inventory; + +public class TileFarm extends TileMachineBase { + + public Inventory inventory= new Inventory(14, "TileFarm", 64); + + IFarmLogicDevice logicDevice; + + public TileFarm() { + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) { + inventory.readFromNBT(tagCompound); + super.readFromNBT(tagCompound); + } + + @Override + public void writeToNBT(NBTTagCompound tagCompound) { + inventory.writeToNBT(tagCompound); + super.writeToNBT(tagCompound); + } + + @Override + public void updateEntity() { + if(inventory.hasChanged){ + if(inventory.getStackInSlot(0) != null && inventory.getStackInSlot(0).getItem() instanceof IFarmLogicContainer){ + IFarmLogicContainer device = (IFarmLogicContainer) inventory.getStackInSlot(0).getItem(); + logicDevice = device.getLogicFromStack(inventory.getStackInSlot(0)); + } else { + logicDevice = null; + } + } + if(logicDevice != null){ + logicDevice.tick(this); + } + super.updateEntity(); + } +} diff --git a/src/main/java/techreborn/tiles/idsu/IDSUManager.java b/src/main/java/techreborn/tiles/idsu/IDSUManager.java index f99ed5ad5..022ebbff4 100644 --- a/src/main/java/techreborn/tiles/idsu/IDSUManager.java +++ b/src/main/java/techreborn/tiles/idsu/IDSUManager.java @@ -85,13 +85,13 @@ public class IDSUManager { } } - public PacketSendIDSUManager getPacket(World world, EntityPlayer player) { + public PacketSendIDSUManager getPacket(World world) { Gson gson = new Gson(); String json = gson.toJson(getWorldDataFormWorld(world).idsuValues); if (getWorldDataFormWorld(world).idsuValues.isEmpty()) { json = "EMPTY"; } - return new PacketSendIDSUManager(json, player); + return new PacketSendIDSUManager(json); } public void loadFromString(String json, World world) { diff --git a/src/main/java/techreborn/tiles/idsu/TileIDSU.java b/src/main/java/techreborn/tiles/idsu/TileIDSU.java index 46bc4bb7c..ae7760777 100644 --- a/src/main/java/techreborn/tiles/idsu/TileIDSU.java +++ b/src/main/java/techreborn/tiles/idsu/TileIDSU.java @@ -9,12 +9,14 @@ import ic2.api.tile.IEnergyStorage; import ic2.core.IC2; import ic2.core.block.TileEntityBlock; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.StatCollector; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; +import techreborn.Core; import techreborn.config.ConfigTechReborn; import techreborn.init.ModBlocks; import techreborn.packets.PacketHandler; @@ -29,8 +31,8 @@ public class TileIDSU extends TileEntityBlock implements IEnergySink, IEnergySou IDSUManager.INSTANCE.getSaveDataForWorld(worldObj, channel).name = name; IDSUManager.INSTANCE.getWorldDataFormWorld(worldObj).save(); if (worldObj.isRemote) { - PacketHandler.sendPacketToPlayer(IDSUManager.INSTANCE.getPacket(worldObj, player), player); - } + Core.packetPipeline.sendTo(IDSUManager.INSTANCE.getPacket(worldObj), (EntityPlayerMP) player); + } } } @@ -61,6 +63,10 @@ public class TileIDSU extends TileEntityBlock implements IEnergySink, IEnergySou this.maxStorage = maxStorage1; } + public TileIDSU(){ + this(5, 2048, 100000000); + } + public float getChargeLevel() { float ret = (float) this.getEnergy() / (float) this.maxStorage; if (ret > 1.0F) { diff --git a/src/main/resources/assets/techreborn/lang/en_US.lang b/src/main/resources/assets/techreborn/lang/en_US.lang index 62f95b51e..5104970c8 100644 --- a/src/main/resources/assets/techreborn/lang/en_US.lang +++ b/src/main/resources/assets/techreborn/lang/en_US.lang @@ -101,6 +101,7 @@ tile.techreborn.storage2.sapphire.name=Block of Sapphire tile.techreborn.storage2.peridot.name=Block of Peridot tile.techreborn.storage2.yellow_garnet.name=Block of Yellow Garnet tile.techreborn.storage2.red_garnet.name=Block of Red Garnet +tile.techreborn.farm.name=Farm #Fluids diff --git a/src/main/resources/assets/techreborn/textures/gui/farm.png b/src/main/resources/assets/techreborn/textures/gui/farm.png new file mode 100644 index 000000000..d0fa241b9 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/gui/farm.png differ diff --git a/src/main/resources/assets/techreborn/textures/gui/farm.psd b/src/main/resources/assets/techreborn/textures/gui/farm.psd new file mode 100644 index 000000000..b59734031 Binary files /dev/null and b/src/main/resources/assets/techreborn/textures/gui/farm.psd differ