diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml new file mode 100644 index 00000000..9030084e --- /dev/null +++ b/.github/workflows/compile.yml @@ -0,0 +1,20 @@ +name: Compile + +on: + push + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v5 + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 8 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Build with Gradle + run: ./gradlew build \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..3dcf10c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +.project +.classpath +**.class +CREDITS-fml.txt +forge-*.txt +/LICENSE-fml.txt +MinecraftForge-*.txt +/bin +/eclipse + +/minecraft/* +/minecraft.1.7.10 +/minecraft-server +!/minecraft/mods +/build +/.settings +/.gradle + +/buildcraft_resources + +*.iml +/.idea/ +/classes/ \ No newline at end of file diff --git a/AdditionalPipesBC_Client.launch b/AdditionalPipesBC_Client.launch new file mode 100644 index 00000000..a73458e4 --- /dev/null +++ b/AdditionalPipesBC_Client.launch @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/AdditionalPipesBC_Server.launch b/AdditionalPipesBC_Server.launch new file mode 100644 index 00000000..cddfd11a --- /dev/null +++ b/AdditionalPipesBC_Server.launch @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/MutiPlayerProxy.java b/Client/net/minecraft/src/buildcraft/additionalpipes/MutiPlayerProxy.java deleted file mode 100644 index 79b7c5af..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/MutiPlayerProxy.java +++ /dev/null @@ -1,25 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes; - -import java.io.File; -import net.minecraft.client.Minecraft; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ModLoader; -import net.minecraft.src.buildcraft.additionalpipes.gui.*; -import net.minecraft.src.buildcraft.api.APIProxy; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; - -public class MutiPlayerProxy { - public static boolean NeedsLoad = true; - public static File WorldDir; - public static boolean isServer = false; - public static boolean HDSet = false; - public static boolean HDFound = false; - public static boolean OFFound = false; - - public static Minecraft mc = ModLoader.getMinecraftInstance(); - - public static boolean isOnServer() { - return mc.theWorld.isRemote; - } - -} diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java b/Client/net/minecraft/src/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java deleted file mode 100644 index 67d8b17d..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.chunkloader; - -import java.util.List; -import java.util.Set; - -import net.minecraft.client.Minecraft; -import net.minecraft.src.*; -import net.minecraft.src.buildcraft.additionalpipes.chunkloader.TileChunkLoader; -import net.minecraft.src.buildcraft.core.CoreProxy; -import net.minecraft.src.forge.IChunkLoadHandler; - -public class ChunkLoadingHandler implements IChunkLoadHandler { - - private Minecraft mc = ModLoader.getMinecraftInstance(); - - @Override - public void addActiveChunks(World world, Set chunkList) { - - if (mc.theWorld != null && mc.theWorld.isRemote) { - return; - } - - - - for (TileChunkLoader tile : TileChunkLoader.chunkLoaderList) { - - List loadArea = tile.getLoadArea(); - for (ChunkCoordIntPair chunkCoords : loadArea) { - - if (!chunkList.contains(chunkCoords)) { - chunkList.add(chunkCoords); - //log("Adding chunk: " + chunkCoords, LOG_INFO); - } - else { - //log(chunkCoords + " already there.", LOG_INFO); - } - } - } - - } - - @Override - public boolean canUnloadChunk(Chunk chunk) { - - if (mc.theWorld != null && mc.theWorld.isRemote) { - return true; - } - - for (TileChunkLoader tile : TileChunkLoader.chunkLoaderList) { - - List loadArea = tile.getLoadArea(); - for (ChunkCoordIntPair chunkCoords : loadArea) { - - if (chunk.worldObj.getChunkFromChunkCoords(chunkCoords.chunkXPos, chunkCoords.chunkZPosition).equals(chunk)) { - //log("Keeping chunk: " + chunk.getChunkCoordIntPair(), LOG_INFO); - return false; - } - } - } - - //log("Unloading chunk: " + chunk.getChunkCoordIntPair(), LOG_INFO); - return true; - } - - @Override - public boolean canUpdateEntity(Entity entity) { - return true; - } -} \ No newline at end of file diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvInsert.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvInsert.png deleted file mode 100644 index 7b8fe44c..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvInsert.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWood.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWood.png deleted file mode 100644 index 30c37d27..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWood.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWoodClosed.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWoodClosed.png deleted file mode 100644 index 4ca0549f..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWoodClosed.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BlueItem.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BlueItem.png deleted file mode 100644 index 81d4fa2e..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BlueItem.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BlueLiquid.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BlueLiquid.png deleted file mode 100644 index de3c010a..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BlueLiquid.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BluePower.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BluePower.png deleted file mode 100644 index f95caa54..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/BluePower.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist0.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist0.png deleted file mode 100644 index 644ee99c..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist0.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist1.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist1.png deleted file mode 100644 index a1f51e4f..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist1.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist2.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist2.png deleted file mode 100644 index 2292316e..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist2.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist3.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist3.png deleted file mode 100644 index ea6cb141..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist3.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist4.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist4.png deleted file mode 100644 index 1ef2e9c5..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist4.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist5.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist5.png deleted file mode 100644 index bc55868b..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Dist5.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistGUI.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistGUI.png deleted file mode 100644 index 4f2334b7..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistGUI.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionClosed.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionClosed.png deleted file mode 100644 index 5a438258..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionClosed.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionOpen.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionOpen.png deleted file mode 100644 index fb591ed8..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionOpen.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiAdvancedWoodPipe.java b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiAdvancedWoodPipe.java deleted file mode 100644 index 01e0c480..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiAdvancedWoodPipe.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import net.minecraft.src.GuiButton; -import net.minecraft.src.GuiContainer; -import net.minecraft.src.IInventory; -import net.minecraft.src.ModLoader; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicAdvancedWood; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.additionalpipes.network.PacketAdditionalPipes; -import net.minecraft.src.buildcraft.additionalpipes.pipes.PipeItemsAdvancedWood; -import net.minecraft.src.buildcraft.core.network.PacketPayload; - -import org.lwjgl.opengl.GL11; - -public class GuiAdvancedWoodPipe extends GuiContainer { - - int inventoryRows = 1; - IInventory playerInventory; - IInventory filterInventory; - TileGenericPipe container; - private GuiButton[] buttons = new GuiButton[1]; - - public GuiAdvancedWoodPipe(IInventory playerInventorys, IInventory filterInventorys, TileGenericPipe container) { - - super(new CraftingAdvancedWoodPipe(playerInventorys, filterInventorys)); - this.playerInventory = playerInventorys; - this.filterInventory = filterInventorys; - this.container = container; - //container = theContainer; - xSize = 175; - ySize = 156; - - } - @SuppressWarnings("unchecked") - public void initGui() { - super.initGui(); - int guiX = (width - this.xSize) / 2; - int guiY = (height - this.ySize) / 2; - controlList.add(this.buttons[0] = new GuiButton(1, guiX + 8, guiY + 40, 140, 20, "These items are required")); - } - - protected void drawGuiContainerForegroundLayer() { - if (((PipeLogicAdvancedWood)container.pipe.logic).exclude) { - this.buttons[0].displayString = "These items are excluded"; - } - else { - this.buttons[0].displayString = "These items are required"; - } - - fontRenderer.drawString(filterInventory.getInvName(), 8, 6, 0x404040); - fontRenderer.drawString(playerInventory.getInvName(), 8, 66, 0x404040); - } - protected void actionPerformed(GuiButton guibutton) { - - if (guibutton.id == 1) { - ((PipeLogicAdvancedWood)container.pipe.logic).exclude = !((PipeLogicAdvancedWood)container.pipe.logic).exclude; - } - - if (mc.theWorld.isRemote) { - - PacketPayload payload = container.pipe.getNetworkPacket(); - - PacketAdditionalPipes packet = new PacketAdditionalPipes(NetworkID.PACKET_PIPE_DESC, payload); - packet.posX = container.pipe.xCoord; - packet.posY = container.pipe.yCoord; - packet.posZ = container.pipe.zCoord; - - ModLoader.getMinecraftInstance().getSendQueue().addToSendQueue(packet.getPacket()); - } - } - - @Override - protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { - int i1 = mc.renderEngine - .getTexture("/net/minecraft/src/buildcraft/additionalpipes/gui/advancedwoodgui.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - mc.renderEngine.bindTexture(i1); - int j1 = (width - xSize) / 2; - int k = (height - ySize) / 2; - drawTexturedModalRect(j1, k, 0, 0, xSize, ySize); - } - - - - -} diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiDistributionPipe.java b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiDistributionPipe.java deleted file mode 100644 index e7a03587..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiDistributionPipe.java +++ /dev/null @@ -1,181 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import net.minecraft.src.GuiButton; -import net.minecraft.src.GuiContainer; -import net.minecraft.src.ModLoader; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicDistributor; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.additionalpipes.network.PacketAdditionalPipes; -import net.minecraft.src.buildcraft.additionalpipes.pipes.PipeItemsDistributor; -import net.minecraft.src.buildcraft.core.network.PacketPayload; - -import org.lwjgl.opengl.GL11; - -public class GuiDistributionPipe extends GuiContainer { - - protected int xSize; - protected int ySize; - private GuiButton[] buttons = new GuiButton[18]; - public int guiX = 0; - public int guiY = 0; - TileGenericPipe a; - PipeItemsDistributor pipe; - - public GuiDistributionPipe(TileGenericPipe container) { - - super(new ContainerTeleportPipe()); - - a = container; - pipe = (PipeItemsDistributor) container.pipe; - xSize = 175; - ySize = 130; - - } - - @Override - public void initGui() { - super.initGui(); - //int bw = this.xSize - 20; - int guiX = (width - this.xSize) / 2 + 30; - int guiY = (height - this.ySize) / 2 - 7; - - controlList.add(this.buttons[0] = new GuiButton(1, guiX + 1, guiY + 24, 20, 17, "-")); - controlList.add(this.buttons[1] = new GuiButton(2, guiX + 3 + 20, guiY + 24, 30, 17, "1000")); - controlList.add(this.buttons[2] = new GuiButton(3, guiX + 5 + 50, guiY + 24, 20, 17, "+")); - - controlList.add(this.buttons[3] = new GuiButton(4, guiX + 1, guiY + 25 + 17, 20, 17, "-")); - controlList.add(this.buttons[4] = new GuiButton(5, guiX + 3 + 20, guiY + 25 + 17, 30, 17, "1000")); - controlList.add(this.buttons[5] = new GuiButton(6, guiX + 5 + 50, guiY + 25 + 17, 20, 17, "+")); - - controlList.add(this.buttons[6] = new GuiButton(7, guiX + 1, guiY + 26 + 17 * 2, 20, 17, "-")); - controlList.add(this.buttons[7] = new GuiButton(8, guiX + 3 + 20, guiY + 26 + 17 * 2, 30, 17, "1000")); - controlList.add(this.buttons[8] = new GuiButton(9, guiX + 5 + 50, guiY + 26 + 17 * 2, 20, 17, "+")); - - controlList.add(this.buttons[9] = new GuiButton(10, guiX + 1, guiY + 27 + 17 * 3, 20, 17, "-")); - controlList.add(this.buttons[10] = new GuiButton(11, guiX + 3 + 20, guiY + 27 + 17 * 3, 30, 17, "1000")); - controlList.add(this.buttons[11] = new GuiButton(12, guiX + 5 + 50, guiY + 27 + 17 * 3, 20, 17, "+")); - - controlList.add(this.buttons[12] = new GuiButton(13, guiX + 1, guiY + 28 + 17 * 4, 20, 17, "-")); - controlList.add(this.buttons[13] = new GuiButton(14, guiX + 3 + 20, guiY + 28 + 17 * 4, 30, 17, "1000")); - controlList.add(this.buttons[14] = new GuiButton(15, guiX + 5 + 50, guiY + 28 + 17 * 4, 20, 17, "+")); - - controlList.add(this.buttons[15] = new GuiButton(16, guiX + 1, guiY + 29 + 17 * 5, 20, 17, "-")); - controlList.add(this.buttons[16] = new GuiButton(17, guiX + 3 + 20, guiY + 29 + 17 * 5, 30, 17, "1000")); - controlList.add(this.buttons[17] = new GuiButton(18, guiX + 5 + 50, guiY + 29 + 17 * 5, 20, 17, "+")); - - } - @Override - protected void drawGuiContainerForegroundLayer() { - - PipeLogicDistributor pipeLogic = (PipeLogicDistributor) pipe.logic; - - this.buttons[1].displayString = "" + pipeLogic.distData[0]; - this.buttons[4].displayString = "" + pipeLogic.distData[1]; - this.buttons[7].displayString = "" + pipeLogic.distData[2]; - this.buttons[10].displayString = "" + pipeLogic.distData[3]; - this.buttons[13].displayString = "" + pipeLogic.distData[4]; - this.buttons[16].displayString = "" + pipeLogic.distData[5]; - - //super.drawGuiContainerForegroundLayer(); - //fontRenderer.drawString(filterInventory.getInvName(), 8, 6, 0x404040); - //fontRenderer.drawString(playerInventory.getInvName(), 8, ySize - 97, 0x404040); - } - @Override - protected void actionPerformed(GuiButton guibutton) { - - PipeLogicDistributor pipeLogic = (PipeLogicDistributor) pipe.logic; - - switch (guibutton.id) { - case 1: - pipeLogic.distData[0] -= 1; - break; - - case 3: - pipeLogic.distData[0] += 1; - break; - - case 4: - pipeLogic.distData[1] -= 1; - break; - - case 6: - pipeLogic.distData[1] += 1; - break; - - case 7: - pipeLogic.distData[2] -= 1; - break; - - case 9: - pipeLogic.distData[2] += 1; - break; - - case 10: - pipeLogic.distData[3] -= 1; - break; - - case 12: - pipeLogic.distData[3] += 1; - break; - - case 13: - pipeLogic.distData[4] -= 1; - break; - - case 15: - pipeLogic.distData[4] += 1; - break; - - case 16: - pipeLogic.distData[5] -= 1; - break; - - case 18: - pipeLogic.distData[5] += 1; - break; - } - - boolean found = false; - - for (int i = 0; i < pipeLogic.distData.length; i++) { - if (pipeLogic.distData[i] < 0) { - pipeLogic.distData[i] = 0; - } - - if (pipeLogic.distData[i] > 0) { - found = true; - } - } - - if (!found) - for (int i = 0; i < pipeLogic.distData.length; i++) { - pipeLogic.distData[i] = 1; - } - - if (mc.theWorld.isRemote) { - - PacketPayload payload = pipe.getNetworkPacket(); - - PacketAdditionalPipes packet = new PacketAdditionalPipes(NetworkID.PACKET_PIPE_DESC, payload); - packet.posX = pipe.xCoord; - packet.posY = pipe.yCoord; - packet.posZ = pipe.zCoord; - - ModLoader.getMinecraftInstance().getSendQueue().addToSendQueue(packet.getPacket()); - } - - } - - protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { - int i = mc.renderEngine.getTexture("/net/minecraft/src/buildcraft/additionalpipes/gui/DistGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - mc.renderEngine.bindTexture(i); - int j = (width - xSize) / 2; - int k = (height - ySize) / 2; - drawTexturedModalRect(j, k, 0, 0, xSize, ySize); - - } - -} diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiHandler.java b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiHandler.java deleted file mode 100644 index 98bb1da0..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import net.minecraft.client.Minecraft; -import net.minecraft.src.buildcraft.additionalpipes.gui.*; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.additionalpipes.pipes.PipeItemsAdvancedWood; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.forge.IGuiHandler; -import net.minecraft.src.*; - -public class GuiHandler implements IGuiHandler { - - private Minecraft mc = ModLoader.getMinecraftInstance(); - - @Override - public Object getGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { - - TileEntity tile = mc.theWorld.getBlockTileEntity(x, y, z); - - if (tile == null) { - return null; - } - - switch(id) { - - case NetworkID.GUI_PIPE_TP: - return new GuiTeleportPipe((TileGenericPipe)tile); - - case NetworkID.GUI_PIPE_DIST: - return new GuiDistributionPipe((TileGenericPipe)tile); - - case NetworkID.GUI_PIPE_WOODEN_ADV: - return new GuiAdvancedWoodPipe(player.inventory, (TileGenericPipe) tile, (TileGenericPipe)tile); - } - - return null; - } -} diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiTeleportPipe.java b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiTeleportPipe.java deleted file mode 100644 index 9c1acec2..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/GuiTeleportPipe.java +++ /dev/null @@ -1,117 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import org.lwjgl.opengl.GL11; - -import net.minecraft.src.Container; -import net.minecraft.src.GuiButton; -import net.minecraft.src.GuiContainer; -import net.minecraft.src.ModLoader; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicTeleport; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.additionalpipes.network.PacketAdditionalPipes; -import net.minecraft.src.buildcraft.additionalpipes.pipes.PipeTeleport; -import net.minecraft.src.buildcraft.core.network.PacketPayload; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; - -public class GuiTeleportPipe extends GuiContainer { - - private PipeTeleport pipe; - private GuiButton[] buttons = new GuiButton[7]; - - public GuiTeleportPipe(TileGenericPipe thisPipe) { - super(new ContainerTeleportPipe()); - - pipe = (PipeTeleport) thisPipe.pipe; - - xSize = 228; - ySize = 117; - } - - public void initGui() { - - super.initGui(); - int bw = this.xSize - 20; - - controlList.add(this.buttons[0] = new GuiButton(1, (width - this.xSize) / 2 + 10, (height - this.ySize) / 2 + 20, bw / 6, 20, "-100")); - controlList.add(this.buttons[1] = new GuiButton(2, (width - this.xSize) / 2 + 12 + bw / 6, (height - this.ySize) / 2 + 20, bw / 6, 20, "-10")); - controlList.add(this.buttons[2] = new GuiButton(3, (width - this.xSize) / 2 + 12 + bw * 2 / 6, (height - this.ySize) / 2 + 20, bw / 6, 20, "-1")); - controlList.add(this.buttons[3] = new GuiButton(4, (width - this.xSize) / 2 + 12 + bw * 3 / 6, (height - this.ySize) / 2 + 20, bw / 6, 20, "+1")); - controlList.add(this.buttons[4] = new GuiButton(5, (width - this.xSize) / 2 + 12 + bw * 4 / 6, (height - this.ySize) / 2 + 20, bw / 6, 20, "+10")); - controlList.add(this.buttons[5] = new GuiButton(6, (width - this.xSize) / 2 + 16 + bw * 5 / 6, (height - this.ySize) / 2 + 20, bw / 6, 20, "+100")); - controlList.add(this.buttons[6] = new GuiButton(7, (width - this.xSize) / 2 + 16, (height - this.ySize) / 2 + 52, bw / 6, 20, "Switch")); - } - protected void drawGuiContainerForegroundLayer() { - - fontRenderer.drawString("Frequency: " + pipe.logic.freq, 8, 6, 0x404040); - - fontRenderer.drawString("Connected Pipes: " + pipe.getConnectedPipes(true).size(), 100, 6, 0x404040); - - fontRenderer.drawString("Can Receive: " + pipe.logic.canReceive, 8, 42, 0x404040); - fontRenderer.drawString("Owner: " + pipe.logic.owner, 8, 75, 0x404040); - - //fontRenderer.drawString(filterInventory.getInvName(), 8, 6, 0x404040); - //fontRenderer.drawString(playerInventory.getInvName(), 8, ySize - 97, 0x404040); - } - protected void actionPerformed(GuiButton guibutton) { - - switch(guibutton.id) { - case 1: - pipe.logic.freq -= 100; - break; - - case 2: - pipe.logic.freq -= 10; - break; - - case 3: - pipe.logic.freq -= 1; - break; - - case 4: - pipe.logic.freq += 1; - break; - - case 5: - pipe.logic.freq += 10; - break; - - case 6: - pipe.logic.freq += 100; - break; - - case 7: - pipe.logic.canReceive = !pipe.logic.canReceive; - break; - } - - if (pipe.logic.freq < 0) { - pipe.logic.freq = 0; - } - - if (mc.theWorld.isRemote) { - - PacketPayload payload = pipe.getNetworkPacket(); - - PacketAdditionalPipes packet = new PacketAdditionalPipes(NetworkID.PACKET_PIPE_DESC, payload); - packet.posX = pipe.xCoord; - packet.posY = pipe.yCoord; - packet.posZ = pipe.zCoord; - - ModLoader.getMinecraftInstance().getSendQueue().addToSendQueue(packet.getPacket()); - } - } - - protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { - int i = mc.renderEngine.getTexture("/net/minecraft/src/buildcraft/additionalpipes/gui/gui.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - mc.renderEngine.bindTexture(i); - int j = (width - xSize) / 2; - int k = (height - ySize) / 2; - drawTexturedModalRect(j, k, 0, 0, xSize, ySize); - - } - -} diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/MasterFile.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/MasterFile.png deleted file mode 100644 index 1e6edc9c..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/MasterFile.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RS.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RS.png deleted file mode 100644 index b9e8fc96..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RS.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSL.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSL.png deleted file mode 100644 index 74259cb2..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSL.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSLP.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSLP.png deleted file mode 100644 index 86183332..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSLP.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSP.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSP.png deleted file mode 100644 index 3d32f263..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/RSP.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Thumbs.db b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Thumbs.db deleted file mode 100644 index 9aecaa8e..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/Thumbs.db and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures.png deleted file mode 100644 index 74990d38..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures_override.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures_override.png deleted file mode 100644 index 61474efd..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures_override.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/chunkloader.png b/Client/net/minecraft/src/buildcraft/additionalpipes/gui/chunkloader.png deleted file mode 100644 index 1737e7f7..00000000 Binary files a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/chunkloader.png and /dev/null differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/network/NetworkHandler.java b/Client/net/minecraft/src/buildcraft/additionalpipes/network/NetworkHandler.java deleted file mode 100644 index 046844a6..00000000 --- a/Client/net/minecraft/src/buildcraft/additionalpipes/network/NetworkHandler.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.network; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ModLoader; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet1Login; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.forge.IConnectionHandler; -import net.minecraft.src.forge.IPacketHandler; -import net.minecraft.src.forge.MessageManager; - -public class NetworkHandler implements IConnectionHandler, IPacketHandler { - - public static final String CHANNEL = "AdditionalPipes"; - - @Override - public void onConnect(NetworkManager network) { - } - - @Override - public void onLogin(NetworkManager network, Packet1Login login) { - - MessageManager messageManager = MessageManager.getInstance(); - messageManager.registerChannel(network, this, CHANNEL); - messageManager.addActiveChannel(network, CHANNEL); - } - - @Override - public void onDisconnect(NetworkManager network, String message, Object[] args) { - - MessageManager messageManager = MessageManager.getInstance(); - messageManager.unregisterChannel(network, this, CHANNEL); - messageManager.removeActiveChannel(network, CHANNEL); - } - - @Override - public void onPacketData(NetworkManager network, String channel, byte[] rawData) { - - DataInputStream data = new DataInputStream(new ByteArrayInputStream(rawData)); - PacketAdditionalPipes packet = null; - - try { - - int packetID = data.read(); - switch(packetID) { - - case NetworkID.PACKET_PIPE_DESC: - packet = new PacketAdditionalPipes(1); - packet.readData(data); - onTelePipeDesc(packet); - } - - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void onTelePipeDesc(PacketAdditionalPipes packet) { - - TileGenericPipe tile = (TileGenericPipe) ModLoader.getMinecraftInstance().theWorld - .getBlockTileEntity(packet.posX, packet.posY, packet.posZ); - - tile.pipe.handlePacket(packet); - } - -} diff --git a/Client/net/minecraft/src/mod_AdditionalPipes.java b/Client/net/minecraft/src/mod_AdditionalPipes.java deleted file mode 100644 index 3ced7ad8..00000000 --- a/Client/net/minecraft/src/mod_AdditionalPipes.java +++ /dev/null @@ -1,436 +0,0 @@ -package net.minecraft.src; - -import java.io.File; -import java.util.LinkedList; -import java.util.List; -import net.minecraft.client.Minecraft; -import net.minecraft.src.buildcraft.additionalpipes.chunkloader.BlockChunkLoader; -import net.minecraft.src.buildcraft.additionalpipes.chunkloader.TileChunkLoader; -import net.minecraft.src.buildcraft.additionalpipes.chunkloader.ChunkLoadingHandler; -import net.minecraft.src.buildcraft.additionalpipes.gui.GuiHandler; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkHandler; -import net.minecraft.src.buildcraft.additionalpipes.pipes.*; -import net.minecraft.src.buildcraft.api.LaserKind; -import net.minecraft.src.buildcraft.core.Box; -import net.minecraft.src.buildcraft.core.CoreProxy; -import net.minecraft.src.buildcraft.transport.BlockGenericPipe; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.forge.Configuration; -import net.minecraft.src.forge.MinecraftForge; -import net.minecraft.src.forge.MinecraftForgeClient; -import net.minecraft.src.forge.NetworkMod; - -public class mod_AdditionalPipes extends NetworkMod { - - public static mod_AdditionalPipes instance; - - @Override - public boolean clientSideRequired() { - return true; - } - - @Override - public boolean serverSideRequired() { - return false; - } - - @Override - public String getPriorities() { - return "after:mod_BuildCraftTransport"; - } - - @Override - public String getVersion() { - return "2.1.3 (Minecraft 1.2.5, Buildcraft 2.2.14, Forge 3.0.1.75)"; - } - public static int MASTER_TEXTURE_OFFSET = 0;// 8 * 16; - public static String MASTER_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/block_textures.png"; - //Item Teleport - public static Item pipeItemTeleport; - public static int DEFUALT_ITEM_TELEPORT_ID = 4047; - public static int DEFUALT_ITEM_TELEPORT_TEXTURE = 0;//8 * 16 + 0; - public static String DEFUALT_ITEM_TELEPORT_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/BlueItem.png"; - //Liquid Teleport - public static Item pipeLiquidTeleport; - public static int DEFUALT_LIQUID_TELEPORT_ID = 4048; - public static int DEFUALT_LIQUID_TELEPORT_TEXTURE = 0;//8 * 16 + 2; - public static String DEFUALT_LIQUID_TELEPORT_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/BlueLiquid.png"; - //Power Teleport - public static Item pipePowerTeleport; - public static int DEFUALT_POWER_TELEPORT_ID = 4049; - public static int DEFUALT_POWER_TELEPORT_TEXTURE = 0;//8 * 16 + 3; - public static String DEFUALT_POWER_TELEPORT_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/BluePower.png"; - //Distributor - public static Item pipeDistributor; - public static int DEFUALT_DISTRIBUTOR_TELEPORT_ID = 4046; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_0 = 0;//8*16+9; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_1 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_2 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_3 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_4 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_5 = 0; - public static String DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE = "/net/minecraft/src/buildcraft/additionalpipes/gui/Dist"; - public static String DEFUALT_DISTRIBUTOR_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionOpen.png"; - public static String DEFUALT_DISTRIBUTOR_TEXTURE_FILE_CLOSED = "/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionClosed.png"; - //Advanced Wood - public static Item pipeAdvancedWood; - public static int DEFUALT_ADVANCEDWOOD_ID = 4045; - public static int DEFUALT_ADVANCEDWOOD_TEXTURE = 0;//8*16+6; - public static int DEFUALT_ADVANCEDWOOD_TEXTURE_CLOSED = 0;//8*16+7; - public static String DEFUALT_ADVANCEDWOOD_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWood.png"; - public static String DEFUALT_ADVANCEDWOOD_FILE_CLOSED = "/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWoodClosed.png"; - //Advanced Insertion - public static Item pipeAdvancedInsertion; - public static int DEFUALT_Insertion_ID = 4044; - public static int DEFUALT_Insertion_TEXTURE = 0;//8*16+8; - public static String DEFUALT_Insertion_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/AdvInsert.png"; - //Redstone - public static Item pipeRedStone; - public static int DEFUALT_RedStone_ID = 4043; - public static int DEFUALT_RedStone_TEXTURE = 0;//8*16+4; - public static int DEFUALT_RedStone_TEXTURE_POWERED = 0;//8*16+5; - public static String DEFUALT_RedStone_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/RS.png"; - public static String DEFUALT_RedStone_FILE_POWERED = "/net/minecraft/src/buildcraft/additionalpipes/gui/RSP.png"; - //Redstone Liquid - public static Item pipeRedStoneLiquid; - public static int DEFUALT_RedStoneLiquid_ID = 4042; - public static int DEFUALT_RedStoneLiquid_TEXTURE = 0;//8*16+1; - public static int DEFUALT_RedStoneLiquid_TEXTURE_POWERED = 0;//8*16+15; - public static String DEFUALT_RedStoneLiquid_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/RSL.png"; - public static String DEFUALT_RedStoneLiquid_FILE_POWERED = "/net/minecraft/src/buildcraft/additionalpipes/gui/RSLP.png"; - public static Block blockChunkLoader; - public static int DEFUALT_CHUNK_LOADER_ID = 189; - - - public static int CurrentGUICount = 0; - // Config Setup - private static Configuration config; - public static boolean isInGame = false; - public static boolean lagFix = false; - public static boolean wrenchOpensGui = false; - public static boolean allowWPRemove = false; //Remove waterproofing/redstone - public static double PowerLossCfg = .995; - //Log - public static final int LOG_ERROR = 1; - public static final int LOG_WARNING = 2; - public static final int LOG_INFO = 3; - public int logLevel; - public static Minecraft mc = ModLoader.getMinecraftInstance(); - public KeyBinding laserKeyBinding = new KeyBinding("laserKeyBinding", 67); - public static List lasers = new LinkedList(); - - @Override - public void keyboardEvent(KeyBinding keybinding) { - - if (keybinding == laserKeyBinding) { - toggleLasers(); - } - } - - public void toggleLasers() { - - if (!lasers.isEmpty()) { - - for (Box laser : lasers) { - laser.deleteLasers(); - } - - lasers.clear(); - } - else { - - int playerY = (int) mc.thePlayer.posY; - - //Loop through chunks to with chunkloader - for (TileChunkLoader tile : TileChunkLoader.chunkLoaderList) { - - List chunkCoords = tile.getLoadArea(); - - for (ChunkCoordIntPair coords : chunkCoords) { - - int chunkX = coords.chunkXPos * 16; - int chunkZ = coords.chunkZPosition * 16; - - Box outsideLaser = new Box(); - outsideLaser.initialize(chunkX, playerY, chunkZ, chunkX + 16, playerY, chunkZ + 16); - outsideLaser.createLasers(mc.theWorld, LaserKind.Blue); - lasers.add(outsideLaser); - - Box insideLaser = new Box(); - insideLaser.initialize(chunkX + 7, playerY, chunkZ + 7, chunkX + 9, playerY, chunkZ + 9); - insideLaser.createLasers(mc.theWorld, LaserKind.Red); - lasers.add(insideLaser); - } - } - } - } - - public mod_AdditionalPipes() { - - ModLoader.setInGUIHook(this, true, true); - ModLoader.registerKey(this, laserKeyBinding, false); - ModLoader.addLocalization("laserKeyBinding", "Turn on/off chunk loader boundries"); - - MinecraftForge.setGuiHandler(this, new GuiHandler()); - MinecraftForge.registerChunkLoadHandler(new ChunkLoadingHandler()); - MinecraftForge.registerConnectionHandler(new NetworkHandler()); - - } - - public void log(String msg, int debugLevel) { - - if (debugLevel > logLevel) { - return; - } - - System.out.println("Additional Pipes: " + msg); - } - - public static World getWorld(int dimension) { - if (mc.theWorld.worldProvider.isHellWorld && dimension == -1) { - return mc.theWorld; - } - else if (dimension == 0) { - return mc.theWorld; - } - - return null; - } - public boolean wasMutiPlayer = false; - - @Override - public boolean onTickInGUI(float f, Minecraft minecraft, GuiScreen guiscreen) { - if (minecraft.theWorld == null) { - - if (isInGame) { - if (!wasMutiPlayer) { - //System.out.print("Cleared TeleportPipes...\n"); - PipeTeleport.teleportPipes.clear(); - //PipeItemTeleport.ItemTeleportPipes.clear(); - //PipeLiquidsTeleport.LiquidTeleportPipes.clear(); - //PipePowerTeleport.PowerTeleportPipes.clear(); - MutiPlayerProxy.NeedsLoad = true; - isInGame = true; - } - else { - //System.out.println("MutiPlayer, Not Clearing"); - } - - isInGame = false; - } - } - else { - wasMutiPlayer = minecraft.theWorld.isRemote; - isInGame = true; - } - - return true; - } - - public static File getSaveDirectory() { - return ((SaveHandler) ModLoader.getMinecraftInstance().theWorld.saveHandler).getSaveDirectory(); - } - - @Override - public void modsLoaded() { - - super.modsLoaded(); - - instance = this; - - config = new Configuration(new File(CoreProxy.getBuildCraftBase(), "config/AdditionalPipes.cfg")); - config.load(); - - lagFix = Boolean.parseBoolean(config.getOrCreateBooleanProperty("saveLagFix", Configuration.CATEGORY_GENERAL, false).value); - wrenchOpensGui = Boolean.parseBoolean(config.getOrCreateBooleanProperty("wrenchOpensGui", Configuration.CATEGORY_GENERAL, false).value); - allowWPRemove = Boolean.parseBoolean(config.getOrCreateBooleanProperty("EnableWaterProofRemoval", Configuration.CATEGORY_GENERAL, false).value); - //PowerLossCfg = Double.parseDouble(config.getOrCreateProperty("powerloss", Configuration.CATEGORY_GENERAL, Double.toString(PowerLossCfg)).value); - logLevel = Integer.parseInt(config.getOrCreateProperty("logLevel", Configuration.CATEGORY_GENERAL, "1").value); - config.save(); - - //System.out.println("Teleport Pipes Power Loss Configuration: " + PowerLossCfg); - - boolean loadItemTeleport = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemTeleport", Configuration.CATEGORY_ITEM, true).value); - int ITEM_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemTeleport.Id", Configuration.CATEGORY_ITEM, DEFUALT_ITEM_TELEPORT_ID).value); - - boolean loadItemsAdvancedInsertion = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsAdvancedInsertion", Configuration.CATEGORY_ITEM, true).value); - int Insertion_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsAdvancedInsertion.Id", Configuration.CATEGORY_ITEM, DEFUALT_Insertion_ID).value); - - boolean loadItemsAdvancedWood = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsAdvancedWood", Configuration.CATEGORY_ITEM, true).value); - int ADVANCEDWOOD_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsAdvancedWood.Id", Configuration.CATEGORY_ITEM, DEFUALT_ADVANCEDWOOD_ID).value); - - boolean loadItemsDistributor = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsDistributor", Configuration.CATEGORY_ITEM, true).value); - int DISTRIBUTOR_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsDistributor.Id", Configuration.CATEGORY_ITEM, DEFUALT_DISTRIBUTOR_TELEPORT_ID).value); - - boolean loadItemsRedstone = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsRedstone", Configuration.CATEGORY_ITEM, true).value); - int RedStone_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsRedstone.Id", Configuration.CATEGORY_ITEM, DEFUALT_RedStone_ID).value); - - boolean loadLiquidsRedstone = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableLiquidsRedstone", Configuration.CATEGORY_ITEM, true).value); - int RedStoneLiquid_ID = Integer.parseInt(config.getOrCreateIntProperty("LiquidsRedstone.Id", Configuration.CATEGORY_ITEM, DEFUALT_RedStoneLiquid_ID).value); - - boolean loadLiquidsTeleport = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableLiquidsTeleport", Configuration.CATEGORY_ITEM, true).value); - int LIQUID_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("LiquidTeleport.Id", Configuration.CATEGORY_ITEM, DEFUALT_LIQUID_TELEPORT_ID).value); - - boolean loadPowerTeleport = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enablePowerTeleport", Configuration.CATEGORY_ITEM, true).value); - int POWER_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("PowerTeleport.Id", Configuration.CATEGORY_ITEM, DEFUALT_POWER_TELEPORT_ID).value); - - - CraftingManager craftingmanager = CraftingManager.getInstance(); - - // Item Teleport Pipe - if (loadItemTeleport) { - DEFUALT_ITEM_TELEPORT_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_ITEM_TELEPORT_TEXTURE_FILE); - pipeItemTeleport = createPipe(ITEM_TELEPORT_ID, PipeItemTeleport.class, "Item Teleport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeItemTeleport, 8), new Object[]{"dgd", Character.valueOf('d'), BuildCraftCore.diamondGearItem, Character.valueOf('g'), Block.glass}); - } - - // Liquid Teleport Pipe - if (loadLiquidsTeleport) { - if (loadItemTeleport) { - DEFUALT_LIQUID_TELEPORT_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_LIQUID_TELEPORT_TEXTURE_FILE); - pipeLiquidTeleport = createPipe(LIQUID_TELEPORT_ID, PipeLiquidsTeleport.class, "Waterproof Teleport Pipe"); - craftingmanager.addRecipe( - new ItemStack(pipeLiquidTeleport, 1), new Object[]{ - "w", "P", - Character.valueOf('w'), BuildCraftTransport.pipeWaterproof, - Character.valueOf('P'), pipeItemTeleport}); - } else { - ModLoader.getLogger().warning("Liquid Teleport Pipe cannot be enabled when Item Teleport Pipe is disabled."); - } - } - - // Power Teleport Pipe - if (loadPowerTeleport) { - if (loadItemTeleport) { - DEFUALT_POWER_TELEPORT_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_POWER_TELEPORT_TEXTURE_FILE); - pipePowerTeleport = createPipe(POWER_TELEPORT_ID, PipePowerTeleport.class, "Power Teleport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipePowerTeleport, 1), new Object[]{"r", "P", Character.valueOf('r'), Item.redstone, Character.valueOf('P'), pipeItemTeleport}); - // Remove Redstone From Power TP Pipe - craftingmanager.addRecipe(new ItemStack(pipeItemTeleport, 1), new Object[]{"A", Character.valueOf('A'), pipePowerTeleport}); - } else { - ModLoader.getLogger().warning("Power Teleport Pipe cannot be enabled when Item Teleport Pipe is disabled."); - } - - // Distributor Pipe - if (loadItemsDistributor) { - DEFUALT_DISTRIBUTOR_TEXTURE_0 = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "0.png"); - DEFUALT_DISTRIBUTOR_TEXTURE_1 = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "1.png"); - DEFUALT_DISTRIBUTOR_TEXTURE_2 = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "2.png"); - DEFUALT_DISTRIBUTOR_TEXTURE_3 = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "3.png"); - DEFUALT_DISTRIBUTOR_TEXTURE_4 = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "4.png"); - DEFUALT_DISTRIBUTOR_TEXTURE_5 = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "5.png"); - pipeDistributor = createPipe(DISTRIBUTOR_TELEPORT_ID, PipeItemsDistributor.class, "Distribution Transport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeDistributor, 8), new Object[]{" r ", "IgI", Character.valueOf('r'), Item.redstone, Character.valueOf('I'), Item.ingotIron, Character.valueOf('g'), Block.glass}); - } - - // Advanced Wooded Pipe - if (loadItemsAdvancedWood) { - DEFUALT_ADVANCEDWOOD_TEXTURE_CLOSED = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_ADVANCEDWOOD_FILE_CLOSED); - DEFUALT_ADVANCEDWOOD_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_ADVANCEDWOOD_FILE); - pipeAdvancedWood = createPipe(ADVANCEDWOOD_ID, PipeItemsAdvancedWood.class, "Advanced Wooden Transport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeAdvancedWood, 8), new Object[]{" r ", "WgW", Character.valueOf('r'), Item.redstone, Character.valueOf('W'), Block.planks, Character.valueOf('g'), Block.glass}); - } - - // Advanced Insertion Pipe - if (loadItemsAdvancedInsertion) { - DEFUALT_Insertion_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_Insertion_FILE); - pipeAdvancedInsertion = createPipe(Insertion_ID, PipeItemsAdvancedInsertion.class, "Advanced Insertion Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeAdvancedInsertion, 8), new Object[]{" r ", "SgS", Character.valueOf('r'), Item.redstone, Character.valueOf('S'), Block.stone, Character.valueOf('g'), Block.glass}); - } - - // Redstone Pipe - if (loadItemsRedstone) { - DEFUALT_RedStone_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_RedStone_FILE); - DEFUALT_RedStone_TEXTURE_POWERED = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_RedStone_FILE_POWERED); - pipeRedStone = createPipe(RedStone_ID, PipeItemsRedstone.class, "Redstone Transport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeRedStone, 8), new Object[]{"RgR", Character.valueOf('R'), Item.redstone, Character.valueOf('g'), Block.glass}); - } - - // Redstone Liquid Pipe - if (loadLiquidsRedstone) { - DEFUALT_RedStoneLiquid_TEXTURE = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_RedStoneLiquid_FILE); - DEFUALT_RedStoneLiquid_TEXTURE_POWERED = CoreProxy.addCustomTexture(mod_AdditionalPipes.DEFUALT_RedStoneLiquid_FILE_POWERED); - pipeRedStoneLiquid = createPipe(RedStoneLiquid_ID, PipeLiquidsRedstone.class, "Waterproof Redstone Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeRedStoneLiquid, 1), new Object[]{"w", "P", Character.valueOf('w'), BuildCraftTransport.pipeWaterproof, Character.valueOf('P'), pipeRedStone}); - } - - if (allowWPRemove) { - - //Mine - craftingmanager.addRecipe(new ItemStack(pipeItemTeleport, 1), new Object[]{"A", Character.valueOf('A'), pipeLiquidTeleport}); - craftingmanager.addRecipe(new ItemStack(pipeRedStone, 1), new Object[]{"A", Character.valueOf('A'), pipeRedStoneLiquid}); - - //BC Liquid - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsCobblestone, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsCobblestone}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsGold, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsGold}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsIron, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsIron}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsStone, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsStone}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsWood, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsWood}); - - //BC Power - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsGold, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipePowerGold}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsStone, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipePowerStone}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsWood, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipePowerWood}); - } - - //ChunkLoader - int ChunkLoaderID = Integer.parseInt(config.getOrCreateIntProperty("TeleportTether.id", Configuration.CATEGORY_BLOCK, DEFUALT_CHUNK_LOADER_ID).value); - boolean Craftable = Boolean.parseBoolean(config.getOrCreateBooleanProperty("TeleportTether.Enabled", Configuration.CATEGORY_BLOCK, true).value); - config.save(); - - ModLoader.registerTileEntity(net.minecraft.src.buildcraft.additionalpipes.chunkloader.TileChunkLoader.class, "Teleport Tether"); - blockChunkLoader = new BlockChunkLoader(ChunkLoaderID, 0); - ModLoader.registerBlock(blockChunkLoader); - blockChunkLoader.setBlockName("Teleport Tether"); - ModLoader.addName(blockChunkLoader, "Teleport Tether"); - - if (Craftable) { - CraftingManager.getInstance().addRecipe(new ItemStack(blockChunkLoader, 4), new Object[]{"iii", "iLi", "iii", Character.valueOf('i'), Item.ingotIron, Character.valueOf('L'), new ItemStack(Item.dyePowder, 1, 4)}); - } - - config.save(); - } - } - - - private Item createPipe(int id, Class clas, String description) { - Item res = BlockGenericPipe.registerPipe(id, clas); - res.setItemName(clas.getSimpleName()); - CoreProxy.addName(res, description); - MinecraftForgeClient.registerItemRenderer(res.shiftedIndex, mod_BuildCraftTransport.instance); - return res; - } - - public static boolean isPipe(Item item) { - - if (BlockGenericPipe.pipes.containsKey(item.shiftedIndex)) { - return true; - } - - return false; - } - - @Override - public void load() { - - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_ITEM_TELEPORT_TEXTURE_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_RedStoneLiquid_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_LIQUID_TELEPORT_TEXTURE_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_POWER_TELEPORT_TEXTURE_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_RedStone_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_RedStone_FILE_POWERED); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_ADVANCEDWOOD_FILE_CLOSED); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_ADVANCEDWOOD_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_Insertion_FILE); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "0.png"); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "1.png"); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "2.png"); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "3.png"); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "4.png"); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE + "5.png"); - MinecraftForgeClient.preloadTexture(mod_AdditionalPipes.DEFUALT_RedStoneLiquid_FILE_POWERED); - - MinecraftForgeClient.preloadTexture("/net/minecraft/src/buildcraft/additionalpipes/gui/chunkloader.png"); - } -} diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..a445a6fb --- /dev/null +++ b/LICENSE @@ -0,0 +1,87 @@ +Minecraft Mod Public License +============================ + +Version 1.0.1 + +0. Definitions +-------------- + +Minecraft: Denotes a copy of the Minecraft game licensed by Mojang AB + +User: Anybody that interacts with the software in one of the following ways: + - play + - decompile + - recompile or compile + - modify + - distribute + +Mod: The mod code designated by the present license, in source form, binary +form, as obtained standalone, as part of a wider distribution or resulting from +the compilation of the original or modified sources. + +Dependency: Code required for the mod to work properly. This includes +dependencies required to compile the code as well as any file or modification +that is explicitely or implicitely required for the mod to be working. + +1. Scope +-------- + +The present license is granted to any user of the mod. As a prerequisite, +a user must own a legally acquired copy of Minecraft + +2. Liability +------------ + +This mod is provided 'as is' with no warranties, implied or otherwise. The owner +of this mod takes no responsibility for any damages incurred from the use of +this mod. This mod alters fundamental parts of the Minecraft game, parts of +Minecraft may not work with this mod installed. All damages caused from the use +or misuse of this mad fall on the user. + +3. Play rights +-------------- + +The user is allowed to install this mod on a client or a server and to play +without restriction. + +4. Modification rights +---------------------- + +The user has the right to decompile the source code, look at either the +decompiled version or the original source code, and to modify it. + +5. Derivation rights +-------------------- + +The user has the rights to derive code from this mod, that is to say to +write code that extends or instanciate the mod classes or interfaces, refer to +its objects, or calls its functions. This code is known as "derived" code, and +can be licensed under a license different from this mod. + +6. Distribution of original or modified copy rights +--------------------------------------------------- + +Is subject to distribution rights this entire mod in its various forms. This +include: + - original binary or source forms of this mod files + - modified versions of these binaries or source files, as well as binaries + resulting from source modifications + - patch to its source or binary files + - any copy of a portion of its binary source files + +The user is allowed to redistribute this mod partially, in totality, or +included in a distribution. + +When distributing binary files, the user must provide means to obtain its +entire set of sources or modified sources at no costs. + +All distributions of this mod must remain licensed under the MMPL. + +All dependencies that this mod have on other mods or classes must be licensed +under conditions comparable to this version of MMPL, with the exception of the +Minecraft code and the mod loading framework (e.g. ModLoader, ModLoaderMP or +Bukkit). + +Modified version of binaries and sources, as well as files containing sections +copied from this mod, should be distributed under the terms of the present +license. diff --git a/README b/README deleted file mode 100644 index e69de29b..00000000 diff --git a/README.md b/README.md new file mode 100644 index 00000000..a6f4325a --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +## Update of Additional Pipes for BC3+ and Minecraft 1.5+ + +### Downloads +Click the releases tab at the top. + +### Mod Documentation +[Current CurseForge page is here](https://www.curseforge.com/minecraft/mc-mods/additional-pipes-for-buildcraft). + +[an archived version of the forum thread is here](https://web.archive.org/web/20150919105906/http://mod-buildcraft.com/forums/showthread.php?tid=1467). + +### Cloning and Compiling ### + +Note that you will need JDK 8 as this mod (still) targets Minecraft 1.12. You can download that [here](https://www.openlogic.com/openjdk-downloads). + +Also note that you will need gradle 6.x, not older or newer. Gradle 6.8 will be used automatically if you use the `gradlew` script. + + git clone https://github.com/tcooc/AdditionalPipesBC.git + cd AdditionalPipesBC + gradlew setupDecompWorkspace + gradlew build +Compiled binaries can be found in `build/libs`. + + +### Setting Up Eclipse ### +1. Install Eclipse JDK. +2. If your PC uses Java newer than 8 by default, update your `JAVA_HOME` environment variable to point to JDK 8. +2. Run the command `gradlew setupDecompWorkspace --refresh-dependencies eclipse` +3. In Eclipse, go to `File > Import... > General > Existing Projects into Workspace` +4. Hit Next. Click Browse... in the top right, and select the directory you cloned Additional Pipes into. Check the box next to AdditionalPipesBC in the Projects list. +5. Hit Finish, and the mod project should be imported. +6. Set up the run configuration. Go to `File > Import... > Run/Debug > Launch Configurations` and hit next. +7. Click the Browse... button and select the directory you cloned Additional Pipes into. Check the box next to `AdditionalPipesBC_Client.launch` and `AdditionalPipesBC_Server.launch` in the right pane. +8. Hit finish. +9. Click the down arrow next to the play button on the top bar, select `Run Configurations...`, and click on AP Client 1.8 in the left pane. +10. Click on `AdditionalPipesBC_Client` in the left pane and go to the arguments tab. +11. Replace `` with your Minecraft username. +11. Hit run. If it works, you're done! +12. If it doesn't, it's probably because your `.gradle` folder is not in your home directory, or you have unusual environment variables defined. Either way, in the Arguments tab, replace `${env_var:userprofile}${env_var:HOME}/.gradle` with the full path to the folder containing your `.gradle` folder. + +*Done!* + +### Download: [latest releases](https://github.com/tcooc/AdditionalPipesBC/releases) #### +To install, place in the standard minecraft/mods folder. + +### Credits to Zeldo, DaStormBringer and [Additional Pipes Contributors](https://github.com/tcooc/AdditionalPipesBC/graphs/contributors) for their work on the mod. + +1.2.5 Thread: http://www.minecraftforum.net/topic/856360-125bc2214-bc315rev213rev310-additional-pipes-for-buildcraft-teleport-pipes/ + +Pipes still generally do the same thing. Some GUIs and recipes have changed (check NEI for recipes). + +#### Experimental Pipes & Gate Features #### + +##### Power Switch Pipe ##### + +Just a nifty little pipe with nice texture effects. Complete credits to ABO for the idea (the code is original though). + +##### Closed Pipe ##### + +This pipe has 3 functions: + +1. Acts like a normal pipe when transporting items. + +2. Acts like a void pipe in that it never drops items. + +3. Stores the items it "drops" inside an buffer. This buffer will destroy the oldest stack to make space for new stack when full. + +Closed pipes also have a "closed" gate trigger which activates when the buffer has item(s) inside. + +##### Water Pump Pipe ##### + +Just a pipe that fills with water if a source block is under it. \ No newline at end of file diff --git a/README.txt b/README.txt new file mode 100644 index 00000000..744ba3b6 --- /dev/null +++ b/README.txt @@ -0,0 +1,37 @@ +------------------------------------------- +Source installation information for modders +------------------------------------------- +This code follows the Minecraft Forge installation methodology. It will apply +some small patches to the vanilla MCP source code, giving you and it access +to some of the data and functions you need to build a successful mod. + +Note also that the patches are built against "unrenamed" MCP source code (aka +srgnames) - this means that you will not be able to read them directly against +normal code. + +Source pack installation information: + +Standalone source installation +============================== + +To install this source code for development purposes, extract this zip file. +It ships with a demonstration mod. Run 'gradlew setupDevWorkspace' to create +a gradle environment primed with FML. Run 'gradlew eclipse' or 'gradlew idea' to +create an IDE workspace of your choice. +Refer to ForgeGradle for more information about the gradle environment +Note: On macs or linux you run the './gradlew.sh' instead of 'gradlew' + +Forge source installation +========================= +MinecraftForge ships with this code and installs it as part of the forge +installation process, no further action is required on your part. + +For reference this is version @MAJOR@.@MINOR@.@REV@.@BUILD@ of FML +for Minecraft version @MCVERSION@. + +LexManos' Install Video +======================= +https://www.youtube.com/watch?v=8VEdtQLuLO0&feature=youtu.be + +For more details update more often refer to the Forge Forums: +http://www.minecraftforge.net/forum/index.php/topic,14048.0.html diff --git a/Server/net/minecraft/src/buildcraft/additionalpipes/MutiPlayerProxy.java b/Server/net/minecraft/src/buildcraft/additionalpipes/MutiPlayerProxy.java deleted file mode 100644 index 2685bee5..00000000 --- a/Server/net/minecraft/src/buildcraft/additionalpipes/MutiPlayerProxy.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes; - -import java.io.File; -import net.minecraft.server.MinecraftServer; -import net.minecraft.src.ModLoader; - -public class MutiPlayerProxy { - public static boolean NeedsLoad = true; - public static File WorldDir; - public static boolean isServer = true; - - public static MinecraftServer mc = ModLoader.getMinecraftServerInstance(); - - /*public static void displayGUIItemTeleport(EntityPlayer entityplayer, TileGenericPipe tilePipe) { - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, ((PipeItemTeleport)tilePipe.pipe).getDescPipe()); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, mod_AdditionalPipes.getCountPacket(((PipeItemTeleport)tilePipe.pipe).getConnectedPipes(true).size())); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, OpenGUI(0, tilePipe.xCoord, tilePipe.yCoord, tilePipe.zCoord)); - } - public static void displayGUILiquidTeleport(EntityPlayer entityplayer, TileGenericPipe tilePipe) { - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, ((PipeLiquidsTeleport)tilePipe.pipe).getDescPipe()); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, mod_AdditionalPipes.getCountPacket(((PipeLiquidsTeleport)tilePipe.pipe).getConnectedPipes(true).size())); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, OpenGUI(1, tilePipe.xCoord, tilePipe.yCoord, tilePipe.zCoord)); - } - public static void displayGUIPowerTeleport(EntityPlayer entityplayer, TileGenericPipe tilePipe) { - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, ((PipePowerTeleport)tilePipe.pipe).getDescPipe()); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, mod_AdditionalPipes.getCountPacket(((PipePowerTeleport)tilePipe.pipe).getConnectedPipes(true).size())); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, OpenGUI(2, tilePipe.xCoord, tilePipe.yCoord, tilePipe.zCoord)); - } - public static void displayGUIDistribution(EntityPlayer entityplayer, TileGenericPipe tilePipe) { - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, ((PipeItemsDistributor)tilePipe.pipe).getDescPipe()); - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, OpenGUI(3, tilePipe.xCoord, tilePipe.yCoord, tilePipe.zCoord)); - } - public static void displayGUIAdvancedWood(EntityPlayer entityplayer, TileGenericPipe tilePipe) { - ModLoaderMp.sendPacketTo(mod_AdditionalPipes.instance, (EntityPlayerMP)entityplayer, ((PipeItemsAdvancedWood)tilePipe.pipe).getDescPacket()); - ModLoader.openGUI(entityplayer, mod_AdditionalPipes.GUI_ADVANCEDWOOD_SEND, tilePipe, new CraftingAdvancedWoodPipe(entityplayer.inventory, tilePipe)); - } - - public static Packet230ModLoader OpenGUI(int Type, int x, int y, int z) { - Packet230ModLoader packet = new Packet230ModLoader(); - - packet.modId = mod_AdditionalPipes.instance.getId(); - packet.packetType = mod_AdditionalPipes.PACKET_OPEN_GUI; - packet.isChunkDataPacket = true; - - packet.dataInt = new int [4]; - - packet.dataInt [0] = x; - packet.dataInt [1] = y; - packet.dataInt [2] = z; - packet.dataInt [3] = Type; - - return packet; - - }*/ - - public static boolean isOnServer() { - return true; - } - - public static boolean isOp(String entityplayermp) { - if(mc.configManager.isOp(entityplayermp)) { - return true; - } - - return false; - } -} diff --git a/Server/net/minecraft/src/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java b/Server/net/minecraft/src/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java deleted file mode 100644 index 98502ed0..00000000 --- a/Server/net/minecraft/src/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.chunkloader; - -import java.util.List; -import java.util.Set; - -import net.minecraft.server.MinecraftServer; -import net.minecraft.src.*; -import net.minecraft.src.buildcraft.additionalpipes.chunkloader.TileChunkLoader; -import net.minecraft.src.forge.IChunkLoadHandler; - -public class ChunkLoadingHandler implements IChunkLoadHandler { - - @Override - public void addActiveChunks(World world, Set chunkList) { - - for (TileChunkLoader tile : TileChunkLoader.chunkLoaderList) { - - List loadArea = tile.getLoadArea(); - for (ChunkCoordIntPair chunkCoords : loadArea) { - - if (!chunkList.contains(chunkCoords)) { - chunkList.add(chunkCoords); - //log("Adding chunk: " + chunkCoords, LOG_INFO); - } - else { - //log(chunkCoords + " already there.", LOG_INFO); - } - } - } - - } - - @Override - public boolean canUnloadChunk(Chunk chunk) { - - for (TileChunkLoader tile : TileChunkLoader.chunkLoaderList) { - - List loadArea = tile.getLoadArea(); - for (ChunkCoordIntPair chunkCoords : loadArea) { - - if (chunk.worldObj.getChunkFromChunkCoords(chunkCoords.chunkXPos, chunkCoords.chunkZPosition).equals(chunk)) { - //log("Keeping chunk: " + chunk.getChunkCoordIntPair(), LOG_INFO); - return false; - } - } - } - - //log("Unloading chunk: " + chunk.getChunkCoordIntPair(), LOG_INFO); - return true; - } - - @Override - public boolean canUpdateEntity(Entity entity) { - return true; - } -} \ No newline at end of file diff --git a/Server/net/minecraft/src/buildcraft/additionalpipes/gui/GuiHandler.java b/Server/net/minecraft/src/buildcraft/additionalpipes/gui/GuiHandler.java deleted file mode 100644 index 7918c8df..00000000 --- a/Server/net/minecraft/src/buildcraft/additionalpipes/gui/GuiHandler.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import net.minecraft.server.MinecraftServer; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.additionalpipes.network.PacketAdditionalPipes; -import net.minecraft.src.buildcraft.additionalpipes.pipes.PipeItemsAdvancedWood; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.forge.IGuiHandler; -import net.minecraft.src.*; -import net.minecraft.src.buildcraft.additionalpipes.gui.ContainerTeleportPipe; -import net.minecraft.src.buildcraft.additionalpipes.gui.CraftingAdvancedWoodPipe; -import net.minecraft.src.buildcraft.core.CoreProxy; -import net.minecraft.src.buildcraft.core.network.PacketPayload; - -public class GuiHandler implements IGuiHandler { - - private MinecraftServer mc = ModLoader.getMinecraftServerInstance(); - - @Override - public Object getGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - - TileEntity tile = mc.getWorldManager(player.dimension).getBlockTileEntity(x, y, z); - - if (tile == null) { - return null; - } - - switch(ID) { - case NetworkID.GUI_PIPE_TP: - sendPipeDesc( (TileGenericPipe) tile, (EntityPlayerMP) player); - return new ContainerTeleportPipe(); - - case NetworkID.GUI_PIPE_DIST: - sendPipeDesc( (TileGenericPipe) tile, (EntityPlayerMP) player); - return null; - - case NetworkID.GUI_PIPE_WOODEN_ADV: - sendPipeDesc( (TileGenericPipe) tile, (EntityPlayerMP) player); - return new CraftingAdvancedWoodPipe(player.inventory, (TileGenericPipe) tile); - } - - return null; - } - - private void sendPipeDesc(TileGenericPipe tile, EntityPlayerMP player) { - - PacketPayload payload = tile.pipe.getNetworkPacket(); - PacketAdditionalPipes packet = new PacketAdditionalPipes(1, payload); - - packet.posX = tile.pipe.xCoord; - packet.posY = tile.pipe.yCoord; - packet.posZ = tile.pipe.zCoord; - - player.playerNetServerHandler.sendPacket(packet.getPacket()); - } -} diff --git a/Server/net/minecraft/src/buildcraft/additionalpipes/network/NetworkHandler.java b/Server/net/minecraft/src/buildcraft/additionalpipes/network/NetworkHandler.java deleted file mode 100644 index edc263f0..00000000 --- a/Server/net/minecraft/src/buildcraft/additionalpipes/network/NetworkHandler.java +++ /dev/null @@ -1,70 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.network; - -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.IOException; -import net.minecraft.src.*; -import net.minecraft.src.buildcraft.core.CoreProxy; -import net.minecraft.src.buildcraft.core.network.PacketUpdate; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.forge.IConnectionHandler; -import net.minecraft.src.forge.IPacketHandler; -import net.minecraft.src.forge.MessageManager; - -public class NetworkHandler implements IConnectionHandler, IPacketHandler { - - public static final String CHANNEL = "AdditionalPipes"; - - @Override - public void onConnect(NetworkManager network) { - } - - @Override - public void onLogin(NetworkManager network, Packet1Login login) { - - MessageManager messageManager = MessageManager.getInstance(); - messageManager.registerChannel(network, this, CHANNEL); - messageManager.addActiveChannel(network, CHANNEL); - } - - @Override - public void onDisconnect(NetworkManager network, String message, Object[] args) { - - MessageManager messageManager = MessageManager.getInstance(); - messageManager.unregisterChannel(network, this, CHANNEL); - messageManager.removeActiveChannel(network, CHANNEL); - } - - @Override - public void onPacketData(NetworkManager network, String channel, byte[] rawData) { - - DataInputStream data = new DataInputStream(new ByteArrayInputStream(rawData)); - PacketAdditionalPipes packet = null; - - try { - - NetServerHandler net = (NetServerHandler)network.getNetHandler(); - - int packetID = data.read(); - switch(packetID) { - - case 1: - packet = new PacketAdditionalPipes(1); - packet.readData(data); - onTelePipeDesc(packet, net.getPlayerEntity()); - } - - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void onTelePipeDesc(PacketAdditionalPipes packet, EntityPlayer player) { - - TileGenericPipe tile = (TileGenericPipe) ModLoader.getMinecraftServerInstance().getWorldManager(player.dimension) - .getBlockTileEntity(packet.posX, packet.posY, packet.posZ); - - tile.pipe.handlePacket(packet); - } - -} \ No newline at end of file diff --git a/Server/net/minecraft/src/mod_AdditionalPipes.java b/Server/net/minecraft/src/mod_AdditionalPipes.java deleted file mode 100644 index c8c68999..00000000 --- a/Server/net/minecraft/src/mod_AdditionalPipes.java +++ /dev/null @@ -1,299 +0,0 @@ -package net.minecraft.src; - -import java.io.File; -import java.util.LinkedList; -import java.util.List; -import net.minecraft.server.MinecraftServer; -import net.minecraft.src.buildcraft.additionalpipes.chunkloader.*; -import net.minecraft.src.buildcraft.additionalpipes.gui.GuiHandler; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkHandler; -import net.minecraft.src.buildcraft.additionalpipes.pipes.*; -import net.minecraft.src.buildcraft.core.CoreProxy; -import net.minecraft.src.buildcraft.transport.BlockGenericPipe; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.forge.Configuration; -import net.minecraft.src.forge.MinecraftForge; -import net.minecraft.src.forge.NetworkMod; - -public class mod_AdditionalPipes extends NetworkMod { - - @Override - public boolean clientSideRequired() { - return true; - } - - @Override - public boolean serverSideRequired() { - return false; - } - - @Override - public String getPriorities() { - return "after:mod_BuildCraftTransport"; - } - - @Override - public String getVersion() { - return "2.1.3 (Minecraft 1.2.5, Buildcraft 2.2.14, Forge 3.0.1.75)"; - } - // Item Teleport - public static Item pipeItemTeleport; - public static int DEFUALT_ITEM_TELEPORT_ID = 4047; - public static int DEFUALT_ITEM_TELEPORT_TEXTURE = 0;//8 * 16 + 0; - public static String DEFUALT_ITEM_TELEPORT_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/BlueItem.png"; - // Liquid Teleport - public static Item pipeLiquidTeleport; - public static int DEFUALT_LIQUID_TELEPORT_ID = 4048; - public static int DEFUALT_LIQUID_TELEPORT_TEXTURE = 0;//8 * 16 + 2; - public static String DEFUALT_LIQUID_TELEPORT_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/BlueLiquid.png"; - // Power Teleport - public static Item pipePowerTeleport; - public static int DEFUALT_POWER_TELEPORT_ID = 4049; - public static int DEFUALT_POWER_TELEPORT_TEXTURE = 0;//8 * 16 + 3; - public static String DEFUALT_POWER_TELEPORT_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/BluePower.png"; - // Distributor - public static Item pipeDistributor; - public static int DEFUALT_DISTRIBUTOR_TELEPORT_ID = 4046; - public static int DEFUALT_DISTRIBUTOR_TEXTURE = 8 * 16 + 4; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_CLOSED = 8 * 16 + 5; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_0 = 0;//8*16+9; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_1 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_2 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_3 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_4 = 0; - public static int DEFUALT_DISTRIBUTOR_TEXTURE_5 = 0; - public static String DEFUALT_DISTRIBUTOR_TEXTURE_FILE_BASE = "/net/minecraft/src/buildcraft/additionalpipes/gui/Dist"; - public static String DEFUALT_DISTRIBUTOR_TEXTURE_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionOpen.png"; - public static String DEFUALT_DISTRIBUTOR_TEXTURE_FILE_CLOSED = "/net/minecraft/src/buildcraft/additionalpipes/gui/DistributionClosed.png"; - // Advanced Wood - public static Item pipeAdvancedWood; - public static int DEFUALT_ADVANCEDWOOD_ID = 4045; - public static int DEFUALT_ADVANCEDWOOD_TEXTURE = 0;//8*16+6; - public static int DEFUALT_ADVANCEDWOOD_TEXTURE_CLOSED = 0;//8*16+7; - public static String DEFUALT_ADVANCEDWOOD_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWood.png"; - public static String DEFUALT_ADVANCEDWOOD_FILE_CLOSED = "/net/minecraft/src/buildcraft/additionalpipes/gui/AdvancedWoodClosed.png"; - // Advanced Insertion - public static Item pipeAdvancedInsertion; - public static int DEFUALT_Insertion_ID = 4044; - public static int DEFUALT_Insertion_TEXTURE = 0; - // Redstone - public static Item pipeRedStone; - public static int DEFUALT_RedStone_ID = 4043; - public static int DEFUALT_RedStone_TEXTURE = 0;//8*16+4; - public static int DEFUALT_RedStone_TEXTURE_POWERED = 0;//8*16+5; - public static String DEFUALT_RedStone_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/RS.png"; - public static String DEFUALT_RedStone_FILE_POWERED = "/net/minecraft/src/buildcraft/additionalpipes/gui/RSP.png"; - // Redstone Liquid - public static Item pipeRedStoneLiquid; - public static int DEFUALT_RedStoneLiquid_ID = 4042; - public static int DEFUALT_RedStoneLiquid_TEXTURE = 0;//8*16+1; - public static int DEFUALT_RedStoneLiquid_TEXTURE_POWERED = 0;//8*16+15; - public static String DEFUALT_RedStoneLiquid_FILE = "/net/minecraft/src/buildcraft/additionalpipes/gui/RSL.png"; - public static String DEFUALT_RedStoneLiquid_FILE_POWERED = "/net/minecraft/src/buildcraft/additionalpipes/gui/RSLP.png"; - - // Main Packet ID's - - public static int CurrentGUICount = 0; - public static Block blockChunkLoader; - public static int DEFUALT_CHUNK_LOADER_ID = 189; - private static Configuration config; - public static mod_AdditionalPipes instance; - public static boolean isInGame = false; - public static boolean lagFix = false; - public static boolean wrenchOpensGui = false; - public static boolean allowWPRemove = false; //Remove waterproofing/redstone - //Log - public static final int LOG_ERROR = 1; - public static final int LOG_WARNING = 2; - public static final int LOG_INFO = 3; - public int logLevel; - public static double PowerLossCfg = .995; - public static MinecraftServer mcs = ModLoader.getMinecraftServerInstance(); - public static List pipeIds = new LinkedList(); - - public mod_AdditionalPipes() { - - MinecraftForge.setGuiHandler(this, new GuiHandler()); - MinecraftForge.registerChunkLoadHandler(new ChunkLoadingHandler()); - MinecraftForge.registerConnectionHandler(new NetworkHandler()); - } - - public static File getSaveDirectory() { - return new File((new PropertyManager(new File("server.properties"))).getStringProperty("level-name", "world")); - } - - @Override - public void modsLoaded() { - - instance = this; - - config = new Configuration(new File(CoreProxy.getBuildCraftBase(), "config/AdditionalPipes.cfg")); - config.load(); - - lagFix = Boolean.parseBoolean(config.getOrCreateBooleanProperty("saveLagFix", Configuration.CATEGORY_GENERAL, false).value); - wrenchOpensGui = Boolean.parseBoolean(config.getOrCreateBooleanProperty("wrenchOpensGui", Configuration.CATEGORY_GENERAL, false).value); - allowWPRemove = Boolean.parseBoolean(config.getOrCreateBooleanProperty("EnableWaterProofRemoval", Configuration.CATEGORY_GENERAL, false).value); - logLevel = Integer.parseInt(config.getOrCreateProperty("logLevel", Configuration.CATEGORY_GENERAL, "1").value); - PowerLossCfg = Double.parseDouble(config.getOrCreateProperty("powerloss",Configuration.CATEGORY_GENERAL, Double.toString(PowerLossCfg)).value); - config.save(); - - //System.out.println("Teleport Pipes Power Loss Configuration: " + PowerLossCfg); - - boolean loadItemTeleport = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemTeleport", Configuration.CATEGORY_ITEM, true).value); - int ITEM_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemTeleport.Id", Configuration.CATEGORY_ITEM, DEFUALT_ITEM_TELEPORT_ID).value); - - boolean loadItemsAdvancedInsertion = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsAdvancedInsertion", Configuration.CATEGORY_ITEM, true).value); - int Insertion_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsAdvancedInsertion.Id", Configuration.CATEGORY_ITEM, DEFUALT_Insertion_ID).value); - - boolean loadItemsAdvancedWood = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsAdvancedWood", Configuration.CATEGORY_ITEM, true).value); - int ADVANCEDWOOD_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsAdvancedWood.Id", Configuration.CATEGORY_ITEM, DEFUALT_ADVANCEDWOOD_ID).value); - - boolean loadItemsDistributor = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsDistributor", Configuration.CATEGORY_ITEM, true).value); - int DISTRIBUTOR_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsDistributor.Id", Configuration.CATEGORY_ITEM, DEFUALT_DISTRIBUTOR_TELEPORT_ID).value); - - boolean loadItemsRedstone = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableItemsRedstone", Configuration.CATEGORY_ITEM, true).value); - int RedStone_ID = Integer.parseInt(config.getOrCreateIntProperty("ItemsRedstone.Id", Configuration.CATEGORY_ITEM, DEFUALT_RedStone_ID).value); - - boolean loadLiquidsRedstone = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableLiquidsRedstone", Configuration.CATEGORY_ITEM, true).value); - int RedStoneLiquid_ID = Integer.parseInt(config.getOrCreateIntProperty("LiquidsRedstone.Id", Configuration.CATEGORY_ITEM, DEFUALT_RedStoneLiquid_ID).value); - - boolean loadLiquidsTeleport = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enableLiquidsTeleport", Configuration.CATEGORY_ITEM, true).value); - int LIQUID_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("LiquidTeleport.Id", Configuration.CATEGORY_ITEM, DEFUALT_LIQUID_TELEPORT_ID).value); - - boolean loadPowerTeleport = Boolean.parseBoolean(config.getOrCreateBooleanProperty("enablePowerTeleport", Configuration.CATEGORY_ITEM, true).value); - int POWER_TELEPORT_ID = Integer.parseInt(config.getOrCreateIntProperty("PowerTeleport.Id", Configuration.CATEGORY_ITEM, DEFUALT_POWER_TELEPORT_ID).value); - - - CraftingManager craftingmanager = CraftingManager.getInstance(); - - // Item Teleport Pipe - if (loadItemTeleport) { - pipeItemTeleport = createPipe(ITEM_TELEPORT_ID, PipeItemTeleport.class, "Item Teleport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeItemTeleport, 8), new Object[]{"dgd", Character.valueOf('d'), BuildCraftCore.diamondGearItem, Character.valueOf('g'), Block.glass}); - } - - // Liquid Teleport Pipe - if (loadLiquidsTeleport) { - if (loadItemTeleport) { - pipeLiquidTeleport = createPipe(LIQUID_TELEPORT_ID, PipeLiquidsTeleport.class, "Waterproof Teleport Pipe"); - craftingmanager.addRecipe( - new ItemStack(pipeLiquidTeleport, 1), new Object[]{ - "w", "P", - Character.valueOf('w'), BuildCraftTransport.pipeWaterproof, - Character.valueOf('P'), pipeItemTeleport}); - } else { - ModLoader.getLogger().warning("Liquid Teleport Pipe cannot be enabled when Item Teleport Pipe is disabled."); - } - } - - // Power Teleport Pipe - if (loadPowerTeleport) { - if (loadItemTeleport) { - pipePowerTeleport = createPipe(POWER_TELEPORT_ID, PipePowerTeleport.class, "Power Teleport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipePowerTeleport, 1), new Object[]{"r", "P", Character.valueOf('r'), Item.redstone, Character.valueOf('P'), pipeItemTeleport}); - // Remove Redstone From Power TP Pipe - craftingmanager.addRecipe(new ItemStack(pipeItemTeleport, 1), new Object[]{"A", Character.valueOf('A'), pipePowerTeleport}); - } else { - ModLoader.getLogger().warning("Power Teleport Pipe cannot be enabled when Item Teleport Pipe is disabled."); - } - - // Distributor Pipe - if (loadItemsDistributor) { - pipeDistributor = createPipe(DISTRIBUTOR_TELEPORT_ID, PipeItemsDistributor.class, "Distribution Transport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeDistributor, 8), new Object[]{" r ", "IgI", Character.valueOf('r'), Item.redstone, Character.valueOf('I'), Item.ingotIron, Character.valueOf('g'), Block.glass}); - } - - // Advanced Wooded Pipe - if (loadItemsAdvancedWood) { - pipeAdvancedWood = createPipe(ADVANCEDWOOD_ID, PipeItemsAdvancedWood.class, "Advanced Wooden Transport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeAdvancedWood, 8), new Object[]{" r ", "WgW", Character.valueOf('r'), Item.redstone, Character.valueOf('W'), Block.planks, Character.valueOf('g'), Block.glass}); - } - - // Advanced Insertion Pipe - if (loadItemsAdvancedInsertion) { - pipeAdvancedInsertion = createPipe(Insertion_ID, PipeItemsAdvancedInsertion.class, "Advanced Insertion Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeAdvancedInsertion, 8), new Object[]{" r ", "SgS", Character.valueOf('r'), Item.redstone, Character.valueOf('S'), Block.stone, Character.valueOf('g'), Block.glass}); - } - - // Redstone Pipe - if (loadItemsRedstone) { - pipeRedStone = createPipe(RedStone_ID, PipeItemsRedstone.class, "Redstone Transport Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeRedStone, 8), new Object[]{"RgR", Character.valueOf('R'), Item.redstone, Character.valueOf('g'), Block.glass}); - } - - // Redstone Liquid Pipe - if (loadLiquidsRedstone) { - pipeRedStoneLiquid = createPipe(RedStoneLiquid_ID, PipeLiquidsRedstone.class, "Waterproof Redstone Pipe"); - craftingmanager.addRecipe(new ItemStack(pipeRedStoneLiquid, 1), new Object[]{"w", "P", Character.valueOf('w'), BuildCraftTransport.pipeWaterproof, Character.valueOf('P'), pipeRedStone}); - } - - if (allowWPRemove) { - - //Mine - craftingmanager.addRecipe(new ItemStack(pipeItemTeleport, 1), new Object[]{"A", Character.valueOf('A'), pipeLiquidTeleport}); - craftingmanager.addRecipe(new ItemStack(pipeRedStone, 1), new Object[]{"A", Character.valueOf('A'), pipeRedStoneLiquid}); - - //BC Liquid - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsCobblestone, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsCobblestone}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsGold, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsGold}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsIron, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsIron}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsStone, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsStone}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsWood, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipeLiquidsWood}); - - //BC Power - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsGold, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipePowerGold}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsStone, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipePowerStone}); - craftingmanager.addRecipe(new ItemStack(BuildCraftTransport.pipeItemsWood, 1), new Object[]{"A", Character.valueOf('A'), BuildCraftTransport.pipePowerWood}); - } - - //ChunkLoader - int ChunkLoaderID = Integer.parseInt(config.getOrCreateIntProperty("TeleportTether.id", Configuration.CATEGORY_BLOCK, DEFUALT_CHUNK_LOADER_ID).value); - boolean Craftable = Boolean.parseBoolean(config.getOrCreateBooleanProperty("TeleportTether.Enabled", Configuration.CATEGORY_BLOCK, true).value); - config.save(); - - ModLoader.registerTileEntity(net.minecraft.src.buildcraft.additionalpipes.chunkloader.TileChunkLoader.class, "Teleport Tether"); - blockChunkLoader = new BlockChunkLoader(ChunkLoaderID, 0); - ModLoader.registerBlock(blockChunkLoader); - blockChunkLoader.setBlockName("Teleport Tether"); - - if (Craftable){ - CraftingManager.getInstance().addRecipe(new ItemStack(blockChunkLoader, 4), new Object[]{"iii", "iLi", "iii", Character.valueOf('i'), Item.ingotIron, Character.valueOf('L'), new ItemStack(Item.dyePowder, 1, 4)}); - } - config.save(); - } - } - - public static int boolToInt(boolean a) { - if (a) { - return 1; - } - - return 0; - } - - public static boolean intToBool(int a) { - return (a == 1); - } - - private Item createPipe(int id, Class clas, String description) { - Item res = BlockGenericPipe.registerPipe(id, clas); - res.setItemName(clas.getSimpleName()); - CoreProxy.addName(res, description); - ModLoader.registerTileEntity(TileGenericPipe.class, "teleportPipe"); - return res; - } - - public static boolean isPipe(Item item) { - - if (BlockGenericPipe.pipes.containsKey(item.shiftedIndex)) { - return true; - } - - return false; - } - - @Override - public void load() { - } -} diff --git a/build.bat b/build.bat new file mode 100644 index 00000000..643fbb2a --- /dev/null +++ b/build.bat @@ -0,0 +1,8 @@ +@echo off +rem enable extended ASCII +chcp 1252 >nul + +echo Invoking gradle... +call gradle build deobfJar + +pause \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..8084998a --- /dev/null +++ b/build.gradle @@ -0,0 +1,114 @@ +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + } + dependencies { + classpath("com.anatawa12.forge:ForgeGradle:2.3-1.0.+") { + changing = true + } + } +} +apply plugin: 'net.minecraftforge.gradle.forge' + +version = "6.0.1" +group= "com.buildcraft.additionalpipes" +archivesBaseName = "additionalpipes" + +minecraft { + version = "${mc_version}-14.23.0.2544" + runDir = "minecraft" + mappings = "snapshot_20171120" + +} +// http://maven.apache.org/guides/mini/guide-naming-conventions.html +repositories { + + mavenCentral() + maven + { + // location of the maven that hosts JEI files + name = "Progwml6 maven" + url = "http://dvs1.progwml6.com/files/maven" + } + maven + { + // location of a maven mirror for JEI files, as a fallback + name = "ModMaven" + url = "modmaven.k-4u.nl" + } + + // Adding a "fake" ivy repository to allow downloading buildcraft from its URL + // See https://stackoverflow.com/a/34327202/7083698 + ivy { + url 'http://www.mod-buildcraft.com/releases/' + patternLayout { + artifact "[organization]/[revision]/[module]-main-[revision]-[classifier].jar" + } + metadataSources { artifact() } + } + +} + +dependencies { + compile 'BuildCraft:buildcraft:7.99.24.1:dev' + + // compile against the JEI API but do not include it at runtime + deobfProvided "mezz.jei:jei_${mc_version}:${jei_version}:api" + // at runtime, use the full JEI jar + runtime "mezz.jei:jei_${mc_version}:${jei_version}" +} +// 30 96 254 +sourceSets { + api { + java { + srcDir 'src/java/buildcraft/additionalpipes/api' + } + } +} + +sourceCompatibility = targetCompatibility = "1.8" // Need this here so eclipse task generates correctly. +compileJava { + sourceCompatibility = targetCompatibility = "1.8" +} + +processResources +{ + // this will ensure that this task is redone when the versions change. + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version + + //exclude Paint.NET pdn files + exclude '**/*.pdn' + + // replace stuff in mcmod.info + from(sourceSets.main.resources.srcDirs) { + + include 'mcmod.info' + include 'AdditionalPipes.java' + + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version + } + + // copy everything else, that's not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } +} + +task deobfJar(type: Jar) { + from sourceSets.main.output + classifier = 'dev' +} + +// Download source jars for Eclipse +eclipse { + classpath { + downloadJavadoc = true + downloadSources = true + } +} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/chunkloader/BlockChunkLoader.java b/common/net/minecraft/src/buildcraft/additionalpipes/chunkloader/BlockChunkLoader.java deleted file mode 100644 index 447e55d3..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/chunkloader/BlockChunkLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.chunkloader; - -import net.minecraft.src.BlockContainer; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraft.src.forge.ITextureProvider; - - -// Referenced classes of package net.minecraft.src: -// Block, Material - -public class BlockChunkLoader extends BlockContainer implements ITextureProvider { - - public BlockChunkLoader(int BlockID, int i) { - super(BlockID, i, Material.cloth); - } - - @Override - public void onBlockAdded(World world, int i, int j, int k) { - } - - @Override - public void onBlockRemoval(World world, int i, int j, int k) { - } - - @Override - public TileEntity getBlockEntity() { - return new TileChunkLoader(); - } - - @Override - public String getTextureFile() { - return "/net/minecraft/src/buildcraft/additionalpipes/gui/chunkloader.png"; - } - -} \ No newline at end of file diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/chunkloader/TileChunkLoader.java b/common/net/minecraft/src/buildcraft/additionalpipes/chunkloader/TileChunkLoader.java deleted file mode 100644 index 521195e5..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/chunkloader/TileChunkLoader.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.chunkloader; - -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import net.minecraft.src.Chunk; -import net.minecraft.src.ChunkCoordIntPair; -import net.minecraft.src.TileEntity; - -public class TileChunkLoader extends TileEntity { - - public static List chunkLoaderList = Collections.synchronizedList(new LinkedList()); - - public TileChunkLoader() { - } - - private synchronized void addToList() { - if (!chunkLoaderList.contains(this)) { - chunkLoaderList.add(this); - } - } - - private synchronized void removeFromList() { - if (chunkLoaderList.contains(this)) { - chunkLoaderList.remove(this); - } - } - - /* - * Returns a list of ChunkCoordPair that are the chunks around the block - * in a 3x3 area. - */ - public List getLoadArea() { - - List loadArea = new LinkedList(); - - Chunk centerChunk = worldObj.getChunkFromBlockCoords(xCoord, zCoord); - - for (int x = -1; x < 2; x++) { - for (int z = -1; z < 2; z++) { - ChunkCoordIntPair chunkCoords = new ChunkCoordIntPair(centerChunk.xPosition + x, centerChunk.zPosition + z); - loadArea.add(chunkCoords); - } - } - - return loadArea; - } - - @Override - public void updateEntity() { - super.updateEntity(); - addToList(); - } - - @Override - public void invalidate() { - super.invalidate(); - removeFromList(); - } -} - diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/gui/ContainerTeleportPipe.java b/common/net/minecraft/src/buildcraft/additionalpipes/gui/ContainerTeleportPipe.java deleted file mode 100644 index 2d11b29c..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/gui/ContainerTeleportPipe.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import net.minecraft.src.Container; -import net.minecraft.src.EntityPlayer; - -public class ContainerTeleportPipe extends Container { - - public boolean isUsableByPlayer(EntityPlayer entityplayer) { - return true; - } - public boolean canInteractWith(EntityPlayer entityplayer) { - // TODO Auto-generated method stub - return true; - } -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/gui/CraftingAdvancedWoodPipe.java b/common/net/minecraft/src/buildcraft/additionalpipes/gui/CraftingAdvancedWoodPipe.java deleted file mode 100644 index 335af803..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/gui/CraftingAdvancedWoodPipe.java +++ /dev/null @@ -1,51 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.gui; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.Slot; -import net.minecraft.src.buildcraft.core.BuildCraftContainer; - -public class CraftingAdvancedWoodPipe extends BuildCraftContainer { - - IInventory playerIInventory; - IInventory filterIInventory; - - public CraftingAdvancedWoodPipe (IInventory playerInventory, IInventory filterInventory) { - super (filterInventory.getSizeInventory()); - this.playerIInventory = playerInventory; - this.filterIInventory = filterInventory; - - int k = 0; - - for(int j1 = 0; j1 < 9; j1++) { - addSlot(new Slot(filterInventory, j1 + k * 9, 8 + j1 * 18, 18 + k * 18)); - } - - - for(int l = 0; l < 3; l++) { - for(int k1 = 0; k1 < 9; k1++) { - addSlot(new Slot(playerInventory, k1 + l * 9 + 9, 8 + k1 * 18, 76 + l * 18)); - } - - } - - for(int i1 = 0; i1 < 9; i1++) { - addSlot(new Slot(playerInventory, i1, 8 + i1 * 18, 134)); - } - } - - @Override - public boolean canInteractWith(EntityPlayer entityplayer) { - // TODO Auto-generated method stub - return true; - } - -} \ No newline at end of file diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicAdvancedInsertion.java b/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicAdvancedInsertion.java deleted file mode 100644 index 19c1d659..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicAdvancedInsertion.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.logic; - -import net.minecraft.src.BuildCraftTransport; -import net.minecraft.src.TileEntity; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogic; -import net.minecraft.src.buildcraft.transport.PipeLogicCobblestone; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; - -public class PipeLogicAdvancedInsertion extends PipeLogic { - - @Override - public boolean isPipeConnected(TileEntity tile) { - Pipe pipe2 = null; - - if (tile instanceof TileGenericPipe) { - pipe2 = ((TileGenericPipe) tile).pipe; - } - - if (BuildCraftTransport.alwaysConnectPipes) { - return super.isPipeConnected(tile); - } - else { - return (pipe2 == null || !(pipe2.logic instanceof PipeLogicCobblestone)) - && super.isPipeConnected(tile); - } - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicAdvancedWood.java b/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicAdvancedWood.java deleted file mode 100644 index 1852d354..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicAdvancedWood.java +++ /dev/null @@ -1,218 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.logic; - -import net.minecraft.src.buildcraft.additionalpipes.gui.GuiHandler; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogic; -import net.minecraft.src.buildcraft.transport.PipeLogicWood; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.*; - -public class PipeLogicAdvancedWood extends PipeLogic { - - @TileNetworkData (staticSize = 9) - public ItemStack [] items = new ItemStack [9]; - - @TileNetworkData - public boolean exclude = false; - - @TileNetworkData - public int nextTexture; - - public void switchSource () { - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int newMeta = 6; - - for (int i = meta + 1; i <= meta + 6; ++i) { - - Orientations o = Orientations.values() [i % 6]; - - Position pos = new Position (xCoord, yCoord, zCoord, o); - - pos.moveForwards(1); - - TileEntity tile = worldObj.getBlockTileEntity((int) pos.x, (int) pos.y, - (int) pos.z); - - if (isInput (tile)) { - newMeta = o.ordinal(); - break; - } - } - - if (newMeta != meta) { - worldObj.setBlockMetadata(xCoord, yCoord, zCoord, newMeta); - worldObj.markBlockNeedsUpdate(xCoord, yCoord, zCoord); - } - } - - public boolean isInput(TileEntity tile) { - return !(tile instanceof TileGenericPipe) - && (tile instanceof IInventory || tile instanceof ILiquidContainer) - && Utils.checkPipesConnections(worldObj, xCoord, yCoord, - zCoord, tile.xCoord, tile.yCoord, tile.zCoord); - } - - - @Override - public boolean blockActivated(EntityPlayer entityplayer) { - - ItemStack equippedItem = entityplayer.getCurrentEquippedItem(); - - if (equippedItem != null) { - - if (equippedItem.getItem() == BuildCraftCore.wrenchItem) { - switchSource(); - return true; - } - - if (mod_AdditionalPipes.isPipe(equippedItem.getItem())) { - return false; - } - } - - entityplayer.openGui(mod_AdditionalPipes.instance, NetworkID.GUI_PIPE_WOODEN_ADV, - container.worldObj, container.xCoord, container.yCoord, container.zCoord); - - return true; - } - - @Override - public boolean isPipeConnected(TileEntity tile) { - Pipe pipe2 = null; - - if (tile instanceof TileGenericPipe) { - pipe2 = ((TileGenericPipe) tile).pipe; - } - - if (BuildCraftTransport.alwaysConnectPipes) { - return super.isPipeConnected(tile); - } - else { - return (pipe2 == null || (!(pipe2.logic instanceof PipeLogicWood) && !(pipe2.logic instanceof PipeLogicAdvancedWood))) && super.isPipeConnected(tile); - } - } - - @Override - public void initialize () { - super.initialize(); - - switchSourceIfNeeded(); - } - - private void switchSourceIfNeeded () { - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if (meta > 5) { - switchSource(); - } - else { - Position pos = new Position(xCoord, yCoord, zCoord, - Orientations.values()[meta]); - pos.moveForwards(1); - - TileEntity tile = worldObj.getBlockTileEntity((int) pos.x, (int) pos.y, - (int) pos.z); - - if (!isInput(tile)) { - switchSource(); - } - } - } - - - @Override - public void onNeighborBlockChange () { - super.onNeighborBlockChange(); - - switchSourceIfNeeded(); - } - - @Override - public int getSizeInventory() { - return items.length; - } - - @Override - public ItemStack getStackInSlot(int i) { - return items [i]; - } - - @Override - public ItemStack decrStackSize(int i, int j) { - ItemStack stack = items [i].copy(); - stack.stackSize = j; - - items [i].stackSize -= j; - - if (items [i].stackSize == 0) { - items [i] = null; - } - - return stack; - } - - @Override - public void setInventorySlotContents(int i, ItemStack itemstack) { - items [i] = itemstack; - - } - - @Override - public String getInvName() { - return "Filters"; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - exclude = nbttagcompound.getBoolean("exclude"); - - NBTTagList nbttaglist = nbttagcompound.getTagList("items"); - - for (int j = 0; j < nbttaglist.tagCount(); ++j) { - NBTTagCompound nbttagcompound2 = (NBTTagCompound) nbttaglist.tagAt(j); - int index = nbttagcompound2.getInteger("index"); - items [index] = ItemStack.loadItemStackFromNBT(nbttagcompound2); - } - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - nbttagcompound.setBoolean("exclude", exclude); - - NBTTagList nbttaglist = new NBTTagList(); - - for (int j = 0; j < items.length; ++j) { - if (items [j] != null && items [j].stackSize > 0) { - NBTTagCompound nbttagcompound2 = new NBTTagCompound (); - nbttaglist.appendTag(nbttagcompound2); - nbttagcompound2.setInteger("index", j); - items [j].writeToNBT(nbttagcompound2); - } - } - - nbttagcompound.setTag("items", nbttaglist); - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicDistributor.java b/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicDistributor.java deleted file mode 100644 index 9bed5d31..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicDistributor.java +++ /dev/null @@ -1,170 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.logic; - -import net.minecraft.src.buildcraft.additionalpipes.gui.GuiHandler; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.additionalpipes.pipes.PipeItemsDistributor; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.IPipeEntry; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.transport.PipeLogic; -import net.minecraft.src.buildcraft.transport.PipeLogicWood; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.*; - -public class PipeLogicDistributor extends PipeLogic { - - @TileNetworkData - public int nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_0; - - @TileNetworkData (staticSize = 6) - public int distData[] = {1, 1, 1, 1, 1, 1}; - - @TileNetworkData - public int curTick = 0; - - public void switchPosition() { - - int metadata = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - int nextMetadata = metadata; - - for (int l = 0; l < 6; ++l) { - nextMetadata ++; - - if (nextMetadata > 5) { - nextMetadata = 0; - } - - Position pos = new Position(xCoord, yCoord, zCoord, Orientations.values()[nextMetadata]); - pos.moveForwards(1.0); - - TileEntity tile = worldObj.getBlockTileEntity((int) pos.x, (int) pos.y, (int) pos.z); - - if (tile instanceof TileGenericPipe) { - if (((TileGenericPipe) tile).pipe.logic instanceof PipeLogicWood || ((TileGenericPipe) tile).pipe.logic instanceof PipeLogicAdvancedWood) { - continue; - } - } - - if (tile instanceof IPipeEntry || tile instanceof IInventory || tile instanceof ILiquidContainer || tile instanceof TileGenericPipe) { - if (distData[nextMetadata] > 0) { - worldObj.setBlockMetadata(xCoord, yCoord, zCoord, nextMetadata); - return; - } - } - } - } - public void switchIfNeeded() { - int metadata = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - int nextMetadata = metadata; - - for (int l = 0; l < 6; ++l) { - if (nextMetadata > 5) { - nextMetadata = 0; - } - - Position pos = new Position(xCoord, yCoord, zCoord, Orientations.values()[nextMetadata]); - pos.moveForwards(1.0); - - TileEntity tile = worldObj.getBlockTileEntity((int) pos.x, (int) pos.y, (int) pos.z); - - if (tile instanceof TileGenericPipe) { - if (((TileGenericPipe) tile).pipe.logic instanceof PipeLogicWood || ((TileGenericPipe) tile).pipe.logic instanceof PipeLogicAdvancedWood) { - continue; - } - } - - if (tile instanceof IPipeEntry || tile instanceof IInventory || tile instanceof ILiquidContainer || tile instanceof TileGenericPipe) { - if (distData[nextMetadata] > 0) { - worldObj.setBlockMetadata(xCoord, yCoord, zCoord, nextMetadata); - return; - } - } - - nextMetadata ++; - } - } - - - @Override - public void onBlockPlaced() { - super.onBlockPlaced(); - - worldObj.setBlockMetadata(xCoord, yCoord, zCoord, 1); - switchPosition(); - } - - @Override - public boolean blockActivated(EntityPlayer entityplayer) { - - ItemStack equippedItem = entityplayer.getCurrentEquippedItem(); - - if (equippedItem != null) { - - if (equippedItem.getItem() == BuildCraftCore.wrenchItem) { - - switchPosition(); - worldObj.markBlockNeedsUpdate(xCoord, yCoord, zCoord); - - return true; - } - - if (mod_AdditionalPipes.isPipe(equippedItem.getItem())) { - return false; - } - } - - entityplayer.openGui(mod_AdditionalPipes.instance, NetworkID.GUI_PIPE_DIST, - container.worldObj, container.xCoord, container.yCoord, container.zCoord); - - return true; - } - - @Override - public boolean outputOpen(Orientations to) { - return to.ordinal() == worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - - super.writeToNBT(nbt); - - nbt.setInteger("curTick", curTick); - for (int i = 0; i < distData.length; i++) { - nbt.setInteger("distData" + i, distData[i]); - } - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - - super.readFromNBT(nbt); - curTick = nbt.getInteger("curTick"); - - boolean found = false; - for (int i = 0; i < distData.length; i++) { - int d = nbt.getInteger("distData" + i); - if (d > 0) found = true; - distData[i] = d; - } - - if (!found) { - for (int i = 0; i < distData.length; i++) { - distData[i] = 1; - } - } - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicTeleport.java b/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicTeleport.java deleted file mode 100644 index 28c527b8..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/logic/PipeLogicTeleport.java +++ /dev/null @@ -1,98 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.logic; - -import net.minecraft.src.BuildCraftCore; -import net.minecraft.src.BuildCraftTransport; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.additionalpipes.gui.GuiHandler; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogic; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; - -public class PipeLogicTeleport extends PipeLogic { - - @TileNetworkData public int freq = 0; - @TileNetworkData public boolean canReceive = false; - @TileNetworkData public String owner = ""; - - protected int guiId; - - public PipeLogicTeleport(int guiId) { - super(); - this.guiId = guiId; - } - - @Override - public boolean blockActivated(EntityPlayer entityplayer) { - - if (owner == null || owner.equalsIgnoreCase("")) { - owner = entityplayer.username; - } - - ItemStack equippedItem = entityplayer.getCurrentEquippedItem(); - - if (equippedItem != null) { - - if (mod_AdditionalPipes.isPipe(equippedItem.getItem())) { - return false; - } - - if (equippedItem.getItem() == BuildCraftCore.wrenchItem && !mod_AdditionalPipes.wrenchOpensGui) { - return false; - } - } - - entityplayer.openGui(mod_AdditionalPipes.instance, guiId, - container.worldObj, container.xCoord, container.yCoord, container.zCoord); - - return true; - } - - @Override - public boolean isPipeConnected(TileEntity tile) { - - Pipe pipe = null; - - if (tile instanceof TileGenericPipe) { - pipe = ((TileGenericPipe) tile).pipe; - } - - if (BuildCraftTransport.alwaysConnectPipes) { - return super.isPipeConnected(tile); - } - else { - - if (pipe == null) { - return false; - } - - if (this.container.pipe.getClass().equals(pipe.getClass()) && super.isPipeConnected(tile)) { - return true; - } - - - return true; - } - } - - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - - nbttagcompound.setInteger("freq", freq); - nbttagcompound.setBoolean("canReceive", canReceive); - nbttagcompound.setString("owner", owner); - } - - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - - freq = nbttagcompound.getInteger("freq"); - canReceive = nbttagcompound.getBoolean("canReceive"); - owner = nbttagcompound.getString("owner"); - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/network/NetworkID.java b/common/net/minecraft/src/buildcraft/additionalpipes/network/NetworkID.java deleted file mode 100644 index 234d6830..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/network/NetworkID.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.network; - -public class NetworkID { - - //Packet IDs - public static final int PACKET_PIPE_DESC = 1; - - //Gui IDs - public static final int GUI_PIPE_TP = 1; - public static final int GUI_PIPE_DIST = 2; - public static final int GUI_PIPE_WOODEN_ADV = 3; - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/network/PacketAdditionalPipes.java b/common/net/minecraft/src/buildcraft/additionalpipes/network/PacketAdditionalPipes.java deleted file mode 100644 index 5b115835..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/network/PacketAdditionalPipes.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.network; - -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import net.minecraft.src.Packet; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.buildcraft.core.network.PacketPayload; -import net.minecraft.src.buildcraft.core.network.PacketUpdate; -import net.minecraft.src.forge.packets.ForgePacket; - -public class PacketAdditionalPipes extends PacketUpdate { - - public PacketAdditionalPipes(int PacketId) { - super(PacketId); - this.channel = NetworkHandler.CHANNEL; - } - - public PacketAdditionalPipes(int packetId, PacketPayload payload) { - super(packetId, payload); - this.channel = NetworkHandler.CHANNEL; - } -} \ No newline at end of file diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemTeleport.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemTeleport.java deleted file mode 100644 index 8054cd18..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemTeleport.java +++ /dev/null @@ -1,212 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; -import java.util.List; -import java.util.Random; -import net.minecraft.src.IInventory; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.gui.GuiHandler; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicTeleport; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; -import net.minecraft.src.buildcraft.api.*; -import net.minecraft.src.buildcraft.core.StackUtil; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.core.network.PacketPayload; -import net.minecraft.src.buildcraft.core.network.PacketUpdate; -import net.minecraft.src.buildcraft.core.network.TilePacketWrapper; -import net.minecraft.src.buildcraft.transport.IPipeTransportItemsHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeTransportItems; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.mod_AdditionalPipes; - -public class PipeItemTeleport extends PipeTeleport implements IPipeTransportItemsHook { - - LinkedList idsToRemove = new LinkedList (); - - public PipeItemTeleport(int itemID) { - super(new PipeTransportItems(), new PipeLogicTeleport(NetworkID.GUI_PIPE_TP), itemID); - } - - @Override - public int getBlockTexture() { - return mod_AdditionalPipes.DEFUALT_ITEM_TELEPORT_TEXTURE; - } - - @Override - public void readjustSpeed(EntityPassiveItem item) { - ((PipeTransportItems) transport).defaultReajustSpeed(item); - } - - /* - @Override - public void setPosition (int xCoord, int yCoord, int zCoord) { - - LinkedList toRemove = new LinkedList (); - - for (int i = 0; i < ItemTeleportPipes.size(); i++) { - - if (ItemTeleportPipes.get(i).xCoord == xCoord && ItemTeleportPipes.get(i).yCoord == yCoord && ItemTeleportPipes.get(i).zCoord == zCoord) { - - toRemove.add(ItemTeleportPipes.get(i)); - } - } - - ItemTeleportPipes.removeAll(toRemove); - ItemTeleportPipes.add(this); - - super.setPosition(xCoord, yCoord, zCoord); - }*/ - - @Override - public void updateEntity() { - - super.updateEntity(); - - for (int theID : idsToRemove) { - ((PipeTransportItems)transport).travelingEntities.remove(theID); - } - - idsToRemove.clear(); - } - - - @Override - public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, EntityPassiveItem item) { - - List TempTeleport = getConnectedPipes(false); - LinkedList result = new LinkedList(); - - ////System.out.print("Pos: " + pos.toString() + "\n"); - if (TempTeleport.size() <= 0) { - result.add(pos.orientation.reverse()); - return result; - } - - Random pipeRand = new Random(); - int i = pipeRand.nextInt(TempTeleport.size()); - - LinkedList temp = new LinkedList(); - - Position pos1 = TempTeleport.get(i).getPosition(); - - for (int o = 0; o < 6; ++o) { - if (Orientations.values()[o] != pos1.orientation.reverse() - && container.pipe.outputOpen(Orientations.values()[o])) { - Position newPos = new Position(pos1); - newPos.orientation = Orientations.values()[o]; - newPos.moveForwards(1.0); - - if (((PipeTransportItems)transport).canReceivePipeObjects(newPos, item)) { - temp.add(newPos.orientation); - } - } - } - - ////System.out.println("Temp: " + Temp.size()); - if (temp.size() <= 0) { - result.add(pos.orientation.reverse()); - return result; - } - - Orientations newPos = temp.get(worldObj.rand.nextInt(temp.size())); - ////System.out.println(newPos.toString()); - Position destPos = new Position(TempTeleport.get(i).xCoord, TempTeleport.get(i).yCoord, TempTeleport.get(i).zCoord, newPos); - destPos.moveForwards(1.0); - - TileEntity tile = worldObj.getBlockTileEntity((int)destPos.x, (int)destPos.y, (int)destPos.z); - - if (tile instanceof TileGenericPipe) { - TileGenericPipe pipe = (TileGenericPipe)tile; - - if (pipe.pipe.transport instanceof PipeTransportItems) { - //This pipe can actually receive items - idsToRemove.add(item.entityId); - ((PipeTransportItems) this.transport).scheduleRemoval(item); - Position newItemPos = getNewItemPos(destPos, newPos, Utils.getPipeFloorOf(item.item)); - item.setPosition(newItemPos.x, newItemPos.y, newItemPos.z); - ((PipeTransportItems)pipe.pipe.transport).entityEntering(item, newPos); - } - } - else if (tile instanceof IPipeEntry) { - idsToRemove.add(item.entityId); - ((PipeTransportItems) this.transport).scheduleRemoval(item); - Position newItemPos = getNewItemPos(destPos, newPos, Utils.getPipeFloorOf(item.item)); - item.setPosition(newItemPos.x, newItemPos.y, newItemPos.z); - ((IPipeEntry) tile).entityEntering(item, newPos); - } - else if (tile instanceof IInventory) { - StackUtil utils = new StackUtil(item.item); - - if (!APIProxy.isClient(worldObj)) { - if (utils.checkAvailableSlot((IInventory) tile, true, destPos.orientation.reverse()) && utils.items.stackSize == 0) { - idsToRemove.add(item.entityId); - ((PipeTransportItems) this.transport).scheduleRemoval(item); - // Do nothing, we're adding the object to the world - } - else { - //Wont accept it return... - newPos = pos.orientation.reverse(); - } - } - } - - result.add(newPos); - - return result; - } - - public Position getNewItemPos(Position Old, Orientations newPos, float f) { - //Utils.getPipeFloorOf(data.item.item) - double x = Old.x; - double y = Old.y; - double z = Old.z; - - if (newPos == Orientations.XNeg) { - x += 1; - y += .5; - z += .5; - } - else if (newPos == Orientations.XPos) { - //x += .6; - y += f; - z += .5; - } - else if (newPos == Orientations.YNeg) { - x += .5; - y += 1; - z += .5; - } - else if (newPos == Orientations.YPos) { - x += .5; - //y += .6; - z += .5; - } - else if (newPos == Orientations.ZNeg) { - x += .5; - y += f; - z += 1; - } - else if (newPos == Orientations.ZPos) { - x += .5; - y += f; - //z += .6; - } - - return new Position(x, y, z); - } - - @Override - public void entityEntered(EntityPassiveItem item, Orientations orientation) {} - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsAdvancedInsertion.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsAdvancedInsertion.java deleted file mode 100644 index 6e120cf0..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsAdvancedInsertion.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; -import java.util.Random; - -import net.minecraft.src.IInventory; -import net.minecraft.src.TileEntity; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.APIProxy; -import net.minecraft.src.buildcraft.api.EntityPassiveItem; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.core.StackUtil; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.transport.IPipeTransportItemsHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogicStone; -import net.minecraft.src.buildcraft.transport.PipeTransportItems; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; - -public class PipeItemsAdvancedInsertion extends Pipe implements IPipeTransportItemsHook { - - public PipeItemsAdvancedInsertion(int itemID) { - super(new PipeTransportItems(), new PipeLogicStone (), itemID); - - } - - @Override - public int getBlockTexture() { - return mod_AdditionalPipes.DEFUALT_Insertion_TEXTURE; - } - - @Override - public void readjustSpeed (EntityPassiveItem item) { - if (item.speed > Utils.pipeNormalSpeed) { - item.speed = item.speed - Utils.pipeNormalSpeed / 2.0F; - } - - if (item.speed < Utils.pipeNormalSpeed) { - item.speed = Utils.pipeNormalSpeed; - } - } - @Override - public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, EntityPassiveItem item) { - return filterPossibleMovements(possibleOrientations, pos, item, 0); - } - - public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, EntityPassiveItem item, int Level) { - LinkedList newOris = new LinkedList(); - LinkedList nullReturn = new LinkedList(); - nullReturn.add(Orientations.values()[0]); - - for (int o = 0; o < 6; ++o) { - if (Orientations.values()[o] != pos.orientation.reverse()) { - Position newPos = new Position(pos); - newPos.orientation = Orientations.values()[o]; - newPos.moveForwards(1.0); - - TileEntity entity = worldObj.getBlockTileEntity((int) newPos.x, (int) newPos.y, (int) newPos.z); - - if (entity instanceof IInventory) { - if (new StackUtil(item.item).checkAvailableSlot((IInventory) entity, false, newPos.orientation.reverse())) { - newOris.add(newPos.orientation); - } - } - } - } - - - //System.out.println("NewOris Size: " + newOris.size() + " - PO Size: " + possibleOrientations.size() + " - Level: " + Level); - if (newOris.size() > 0) { - Position destPos = new Position(pos.x, pos.y, pos.z, newOris.get( (new Random()) .nextInt(newOris.size()) ) ); - destPos.moveForwards(1.0); - StackUtil utils = new StackUtil(item.item); - TileEntity tile = worldObj.getBlockTileEntity((int) destPos.x, (int) destPos.y, (int) destPos.z); - - if (!APIProxy.isClient(worldObj)) { - if (utils.checkAvailableSlot((IInventory) tile, true, destPos.orientation.reverse()) && utils.items.stackSize == 0) { - item.remove(); - ((PipeTransportItems) this.transport).scheduleRemoval(item); - } - else { - item.item = utils.items; - return this.filterPossibleMovements(possibleOrientations, pos, item, (Level + 1)); - //EntityItem dropped = item.toEntityItem(destPos.orientation); - } - } - - //System.out.println("Insertion Output 2 : " + destPos.orientation); - return nullReturn; - } - - if (Level == 0) { - return possibleOrientations; - } - - return ((PipeTransportItems)this.transport).getPossibleMovements(pos, item); - } - - @Override - public void entityEntered(EntityPassiveItem item, Orientations orientation) { - - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsAdvancedWood.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsAdvancedWood.java deleted file mode 100644 index 34b95df3..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsAdvancedWood.java +++ /dev/null @@ -1,209 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import net.minecraft.src.Block; -import net.minecraft.src.IInventory; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.EntityPassiveItem; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.IPowerReceptor; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.PowerFramework; -import net.minecraft.src.buildcraft.api.PowerProvider; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogicWood; -import net.minecraft.src.buildcraft.transport.PipeTransportItems; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicAdvancedWood; - -public class PipeItemsAdvancedWood extends Pipe implements IPowerReceptor { - - private PowerProvider powerProvider; - - private int baseTexture = mod_AdditionalPipes.DEFUALT_ADVANCEDWOOD_TEXTURE; - private int plainTexture = mod_AdditionalPipes.DEFUALT_ADVANCEDWOOD_TEXTURE_CLOSED; - - public PipeItemsAdvancedWood(int itemID) { - - super(new PipeTransportItems(), new PipeLogicAdvancedWood(), itemID); - - powerProvider = PowerFramework.currentFramework.createPowerProvider(); - powerProvider.configure(50, 1, 64, 1, 64); - powerProvider.configurePowerPerdition(64, 1); - - ((PipeLogicAdvancedWood) logic).nextTexture = baseTexture; - } - - @Override - public int getBlockTexture() { - return ((PipeLogicAdvancedWood) logic).nextTexture; - } - - @Override - public void prepareTextureFor(Orientations connection) { - - if (connection == Orientations.Unknown) { - ((PipeLogicAdvancedWood) logic).nextTexture = baseTexture; - } - else { - int metadata = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if (metadata == connection.ordinal()) { - ((PipeLogicAdvancedWood) logic).nextTexture = plainTexture; - } - else { - ((PipeLogicAdvancedWood) logic).nextTexture = baseTexture; - } - } - - } - - @Override - public void setPowerProvider(PowerProvider provider) { - provider = powerProvider; - } - - @Override - public PowerProvider getPowerProvider() { - return powerProvider; - } - - @Override - public void doWork() { - if (powerProvider.energyStored <= 0) { - return; - } - - World w = worldObj; - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if (meta > 5) { - return; - } - - Position pos = new Position(xCoord, yCoord, zCoord, - Orientations.values()[meta]); - pos.moveForwards(1); - int blockId = w.getBlockId((int) pos.x, (int) pos.y, (int) pos.z); - TileEntity tile = w.getBlockTileEntity((int) pos.x, (int) pos.y, - (int) pos.z); - - if (tile == null - || !(tile instanceof IInventory || tile instanceof ILiquidContainer) - || PipeLogicWood - .isExcludedFromExtraction(Block.blocksList[blockId])) { - return; - } - - if (tile instanceof IInventory) { - IInventory inventory = (IInventory) tile; - - ItemStack stack = checkExtract(inventory, true, - pos.orientation.reverse()); - - if (stack == null || stack.stackSize == 0) { - powerProvider.useEnergy(1, 1, false); - return; - } - - Position entityPos = new Position(pos.x + 0.5, pos.y - + Utils.getPipeFloorOf(stack), pos.z + 0.5, - pos.orientation.reverse()); - - entityPos.moveForwards(0.5); - - EntityPassiveItem entity = new EntityPassiveItem(w, entityPos.x, - entityPos.y, entityPos.z, stack); - - ((PipeTransportItems) transport).entityEntering(entity, - entityPos.orientation); - } - } - - /** - * Return the itemstack that can be if something can be extracted from this - * inventory, null if none. On certain cases, the extractable slot depends - * on the position of the pipe. - */ - public ItemStack checkExtract(IInventory inventory, boolean doRemove, - Orientations from) { - // if (inventory instanceof ISpecialInventory) { - // //At the moment we are going to let special inventorys handle there own. Might change if popular demand - // return ((ISpecialInventory) inventory).extractItem(doRemove, from); - // } - IInventory inv = Utils.getInventory(inventory); - ItemStack result = checkExtractGeneric(inv, doRemove, from); - return result; - } - - public ItemStack checkExtractGeneric(IInventory inventory, - boolean doRemove, Orientations from) { - for (int k = 0; k < inventory.getSizeInventory(); ++k) { - if (inventory.getStackInSlot(k) != null - && inventory.getStackInSlot(k).stackSize > 0) { - - ItemStack slot = inventory.getStackInSlot(k); - - if (slot != null && slot.stackSize > 0 && CanExtract(slot)) { - if (doRemove) { - return inventory.decrStackSize(k, powerProvider.useEnergy(1, slot.stackSize, true)); - } - else { - return slot; - } - } - } - } - - return null; - } - public boolean CanExtract(ItemStack item) { - for (int i = 0; i < logic.getSizeInventory(); i++) { - ItemStack stack = logic.getStackInSlot(i); - - if (stack != null && stack.itemID == item.itemID) { - if ((Item.itemsList[item.itemID].isDamageable())) { - return !((PipeLogicAdvancedWood)this.logic).exclude; - } - else if (stack.getItemDamage() == item.getItemDamage()) { - return !((PipeLogicAdvancedWood)this.logic).exclude; - } - } - } - - return ((PipeLogicAdvancedWood)this.logic).exclude; - } - - @Override - public int powerRequest() { - return getPowerProvider().maxEnergyReceived; - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - - } - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - - } -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsDistributor.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsDistributor.java deleted file mode 100644 index 54f33cce..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsDistributor.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; - -import net.minecraft.src.IInventory; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.EntityPassiveItem; -import net.minecraft.src.buildcraft.api.IPipeEntry; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.StackUtil; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.energy.TileEngine; -import net.minecraft.src.buildcraft.transport.IPipeTransportItemsHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeTransportItems; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicDistributor; - -public class PipeItemsDistributor extends Pipe implements IPipeTransportItemsHook { - - public PipeItemsDistributor(int itemID) { - super(new PipeTransportItems(), new PipeLogicDistributor(), itemID); - } - - @Override - public void prepareTextureFor(Orientations connection) { - - PipeLogicDistributor pipeLogic = (PipeLogicDistributor) logic; - - if (connection == Orientations.Unknown) { - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_0; - } - else { - switch(connection) { - case YNeg: - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_0; - break; - - case YPos: - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_1; - break; - - case ZNeg: - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_2; - break; - - case ZPos: - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_3; - break; - - case XNeg: - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_4; - break; - - case XPos: - pipeLogic.nextTexture = mod_AdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_5; - break; - - } - - //nextTexture = mod_zAdditionalPipes.DEFUALT_DISTRIBUTOR_TEXTURE_0 + connection.ordinal(); - } - - } - - @Override - public int getBlockTexture() { - PipeLogicDistributor pipeLogic = (PipeLogicDistributor) logic; - return pipeLogic.nextTexture; - } - - @Override - public LinkedList filterPossibleMovements(LinkedList possibleOrientations, Position pos, EntityPassiveItem item) { - - PipeLogicDistributor pipeLogic = (PipeLogicDistributor) logic; - - ((PipeLogicDistributor)this.logic).switchIfNeeded(); - - LinkedList result = new LinkedList(); - - for (int o = 0; o < 6; ++o) { - if (container.pipe.outputOpen(Orientations.values()[o])) { - Position newPos = new Position(pos); - newPos.orientation = Orientations.values()[o]; - newPos.moveForwards(1.0); - - if (canReceivePipeObjects(newPos, item)) { - result.add(newPos.orientation); - } - } - } - - pipeLogic.curTick++; - - if (pipeLogic.curTick >= pipeLogic.distData[worldObj.getBlockMetadata(xCoord, yCoord, zCoord)]) { - ((PipeLogicDistributor)this.logic).switchPosition(); - pipeLogic.curTick = 0; - } - - - worldObj.markBlockNeedsUpdate(xCoord, yCoord, zCoord); - return result; - } - - public boolean canReceivePipeObjects(Position p, - EntityPassiveItem item) { - TileEntity entity = worldObj.getBlockTileEntity((int) p.x, (int) p.y, - (int) p.z); - - if (!Utils.checkPipesConnections(worldObj, (int) p.x, (int) p.y, - (int) p.z, xCoord, yCoord, zCoord)) { - return false; - } - - if (entity instanceof IPipeEntry) { - return true; - } - else if (entity instanceof TileEngine) { - return false; - } - else if (entity instanceof TileGenericPipe) { - TileGenericPipe pipe = (TileGenericPipe) entity; - return pipe.pipe.transport instanceof PipeTransportItems; - } - else if (entity instanceof IInventory) { - if (new StackUtil(item.item).checkAvailableSlot((IInventory) entity, - false, p.orientation.reverse())) { - return true; - } - } - - return false; - } - @Override - public void entityEntered(EntityPassiveItem item, Orientations orientation) { - - } - - @Override - public void readjustSpeed(EntityPassiveItem item) { - } -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsRedstone.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsRedstone.java deleted file mode 100644 index dc2fb5e9..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeItemsRedstone.java +++ /dev/null @@ -1,136 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; - -import net.minecraft.src.BuildCraftTransport; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.World; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.EntityPassiveItem; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.additionalpipes.transport.IPipeProvideRedstonePowerHook; -import net.minecraft.src.buildcraft.transport.IPipeTransportItemsHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogicStone; -import net.minecraft.src.buildcraft.transport.PipeTransportItems; - -public class PipeItemsRedstone extends Pipe implements IPipeTransportItemsHook, IPipeProvideRedstonePowerHook { - - private @TileNetworkData int nextTexture = mod_AdditionalPipes.DEFUALT_RedStone_TEXTURE; - public @TileNetworkData boolean isPowering = false; - public PipeItemsRedstone(int itemID) { - super(new PipeTransportItems(), new PipeLogicStone (), itemID); - } - - @Override - public void prepareTextureFor(Orientations connection) { - if (!isPowering) { - nextTexture = mod_AdditionalPipes.DEFUALT_RedStone_TEXTURE; - } - else { - nextTexture = mod_AdditionalPipes.DEFUALT_RedStone_TEXTURE_POWERED; - } - } - @Override - public int getBlockTexture() { - return nextTexture; - } - - @Override - public void readjustSpeed (EntityPassiveItem item) { - if (item.speed > Utils.pipeNormalSpeed) { - item.speed = item.speed - Utils.pipeNormalSpeed / 2.0F; - } - - if (item.speed < Utils.pipeNormalSpeed) { - item.speed = Utils.pipeNormalSpeed; - } - } - - @Override - public LinkedList filterPossibleMovements( - LinkedList possibleOrientations, Position pos, - EntityPassiveItem item) { - return possibleOrientations; - } - - @Override - public void entityEntered(EntityPassiveItem item, Orientations orientation) { - } - - @Override - public void updateEntity() { - super.updateEntity(); - - if ( ((PipeTransportItems)this.transport).travelingEntities.size() == 0 && isPowering) { - isPowering = false; - UpdateTiles(this.container.xCoord, this.container.yCoord, this.container.zCoord); - } - else if ( ((PipeTransportItems)this.transport).travelingEntities.size() > 0 && !isPowering) { - isPowering = true; - UpdateTiles(this.container.xCoord, this.container.yCoord, this.container.zCoord); - } - } - - private void UpdateTiles(int i, int j, int k) { - worldObj.notifyBlocksOfNeighborChange(i, j, k, BuildCraftTransport.genericPipeBlock.blockID); - } - - @Override - public boolean isPoweringTo(int l) { - //System.out.println("RedStoneIsPoweringTo"); - if (((PipeTransportItems)this.transport).travelingEntities.size() == 0) { - isPowering = false; - return false; - } - - isPowering = true; - int i1 = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if(i1 == 5 && l == 1) { - return false; - } - - if(i1 == 3 && l == 3) { - return false; - } - - if(i1 == 4 && l == 2) { - return false; - } - - if(i1 == 1 && l == 5) { - return false; - } - - return i1 != 2 || l != 4; - } - - @Override - public boolean isIndirectlyPoweringTo(int l) { - return isPoweringTo(l); - } - - @Override - public boolean isPoweringTo(IBlockAccess iblockaccess, int i, int j, int k, - int l) { - return isPoweringTo(l); - } - - @Override - public boolean isIndirectlyPoweringTo(World world, int i, int j, int k, int l) { - return isIndirectlyPoweringTo(l); - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeLiquidsRedstone.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeLiquidsRedstone.java deleted file mode 100644 index 905eaf5a..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeLiquidsRedstone.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import net.minecraft.src.BuildCraftTransport; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.IPipeEntry; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.additionalpipes.transport.IPipeProvideRedstonePowerHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogicGold; -import net.minecraft.src.buildcraft.transport.PipeTransportLiquids; - -public class PipeLiquidsRedstone extends Pipe implements IPipeProvideRedstonePowerHook { - private @TileNetworkData int nextTexture = mod_AdditionalPipes.DEFUALT_RedStoneLiquid_TEXTURE; - public @TileNetworkData boolean isPowering = false; - public PipeLiquidsRedstone(int itemID) { - super(new PipeTransportLiquids(), new PipeLogicGold(), itemID); - - ((PipeTransportLiquids) transport).flowRate = 80; - ((PipeTransportLiquids) transport).travelDelay = 2; - } - - @Override - public void prepareTextureFor(Orientations connection) { - if (!isPowering) { - nextTexture = mod_AdditionalPipes.DEFUALT_RedStoneLiquid_TEXTURE; - } - else { - nextTexture = mod_AdditionalPipes.DEFUALT_RedStoneLiquid_TEXTURE_POWERED; - } - } - @Override - public int getBlockTexture() { - return nextTexture; - } - - private void UpdateTiles(int i, int j, int k) { - worldObj.notifyBlocksOfNeighborChange(i, j, k, BuildCraftTransport.genericPipeBlock.blockID); - } - - @Override - public boolean isPoweringTo(int l) { - //System.out.println("RedStoneIsPoweringTo"); - if (((PipeTransportLiquids)this.transport).getCenter() < 250) { - isPowering = false; - return false; - } - - isPowering = true; - int i1 = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - - if(i1 == 5 && l == 1) { - return false; - } - - if(i1 == 3 && l == 3) { - return false; - } - - if(i1 == 4 && l == 2) { - return false; - } - - if(i1 == 1 && l == 5) { - return false; - } - - return i1 != 2 || l != 4; - } - - @Override - public boolean isIndirectlyPoweringTo(int l) { - return isPoweringTo(l); - } - - @Override - public void updateEntity() { - super.updateEntity(); - - //System.out.println("Quantity: " + (((PipeTransportLiquids)this.transport).getLiquidQuantity()) + " - Wanted: " + computeMaxLiquid() + " - Qua2: " + computeEnds()[1]); - //System.out.println("Quantity: " + ((PipeTransportLiquids)this.transport).getCenter()); - if ( ((PipeTransportLiquids)this.transport).getCenter() < 250 && isPowering) { - isPowering = false; - UpdateTiles(this.container.xCoord, this.container.yCoord, this.container.zCoord); - } - else if (!isPowering) { - isPowering = true; - UpdateTiles(this.container.xCoord, this.container.yCoord, this.container.zCoord); - } - } - - private int[] computeEnds() { - int outputNumber = 0; - int total = 0; - int ret[] = new int[2]; - - for (int i = 0; i < 6; ++i) { - Position p = new Position(xCoord, yCoord, zCoord, Orientations.values()[i]); - p.moveForwards(1); - - if (canRec(p)) { - ret[0]++; - ret[1] += ((PipeTransportLiquids)this.transport).side[i].average; - } - } - - return ret; - } - public int computeMaxLiquid() { - return ((computeEnds()[0] + 1) * PipeTransportLiquids.LIQUID_IN_PIPE); - } - - public boolean canRec(Position p) { - TileEntity entity = worldObj.getBlockTileEntity((int) p.x, (int) p.y, - (int) p.z); - - if (!Utils.checkPipesConnections(worldObj, (int) p.x, (int) p.y, - (int) p.z, xCoord, yCoord, zCoord)) { - return false; - } - - if (entity instanceof IPipeEntry || entity instanceof ILiquidContainer) { - return true; - } - - return false; - } - - @Override - public boolean isPoweringTo(IBlockAccess iblockaccess, int i, int j, int k, - int l) { - return isPoweringTo(l); - } - - @Override - public boolean isIndirectlyPoweringTo(World world, int i, int j, int k, int l) { - return isIndirectlyPoweringTo(l); - } -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeLiquidsTeleport.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeLiquidsTeleport.java deleted file mode 100644 index cf35ea4d..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeLiquidsTeleport.java +++ /dev/null @@ -1,146 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.ILiquidContainer; -import net.minecraft.src.buildcraft.api.IPipeEntry; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.transport.IPipeTransportLiquidsHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeTransportLiquids; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicTeleport; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; - -public class PipeLiquidsTeleport extends PipeTeleport implements IPipeTransportLiquidsHook { - - class OilReturn { - public Orientations theOrientation; - public ILiquidContainer iliquid; - public OilReturn(Orientations a, ILiquidContainer b) { - theOrientation = a; - iliquid = b; - } - } - - public PipeLiquidsTeleport(int itemID) { - super(new PipeTransportLiquids(), new PipeLogicTeleport(NetworkID.GUI_PIPE_TP), itemID); - - ((PipeTransportLiquids) transport).flowRate = 80; - ((PipeTransportLiquids) transport).travelDelay = 2; - } - - @Override - public int getBlockTexture() { - return mod_AdditionalPipes.DEFUALT_LIQUID_TELEPORT_TEXTURE; - } - - /* - @Override - public void setPosition (int xCoord, int yCoord, int zCoord) { - - LinkedList toRemove = new LinkedList (); - - for (int i = 0; i < LiquidTeleportPipes.size(); i++) { - if (LiquidTeleportPipes.get(i).xCoord == xCoord && LiquidTeleportPipes.get(i).yCoord == yCoord && LiquidTeleportPipes.get(i).zCoord == zCoord) { - //System.out.println("Removed OldLoc: " + i); - toRemove.add(LiquidTeleportPipes.get(i)); - } - } - - LiquidTeleportPipes.removeAll(toRemove); - LiquidTeleportPipes.add(this); - - super.setPosition(xCoord, yCoord, zCoord); - //MutiPlayerProxy.AddChunkToList(xCoord, zCoord); - }*/ - - @Override - public int fill(Orientations from, int quantity, int id, boolean doFill) { - - List pipeList = getConnectedPipes(false); - - if (pipeList.size() == 0) { - return 0; - } - - //System.out.println("PipeList Size: " + pipeList.size()); - int i = worldObj.rand.nextInt(pipeList.size()); - LinkedList theList = getPossibleLiquidMovements(pipeList.get(i).getPosition()); - - if (theList.size() <= 0) { - return 0; - } - - //System.out.println("theList Size: " + theList.size()); - int used = 0; - int a = 0; - - while (theList.size() > 0 && used <= 0) { - a = worldObj.rand.nextInt(theList.size()); - //System.out.println("A: " + a); - used = theList.get(a).iliquid.fill(theList.get(a).theOrientation.reverse(), quantity, id, doFill); - theList.remove(a); - } - - //System.out.println("Fill " + used); - return used; - - } - - public LinkedList getPossibleLiquidMovements(Position pos) { - LinkedList result = new LinkedList(); - - for (int o = 0; o <= 5; ++o) { - Position newPos = new Position(pos); - newPos.orientation = Orientations.values()[o]; - newPos.moveForwards(1.0); - - if (canReceiveLiquid2(newPos)) { - - //For better handling in future - //int space = BuildCraftCore.OIL_BUCKET_QUANTITY / 4 - sideToCenter[((Orientations.values()[o]).reverse()).ordinal()] - centerToSide[((Orientations.values()[o]).reverse()).ordinal()] + flowRate; - result.add(new OilReturn(Orientations.values()[o], (ILiquidContainer) Utils.getTile(worldObj, newPos, Orientations.Unknown))); - } - } - - return result; - } - - public boolean canReceiveLiquid2(Position p) { - TileEntity entity = worldObj.getBlockTileEntity((int) p.x, (int) p.y, - (int) p.z); - - if (!Utils.checkPipesConnections(worldObj, (int) p.x, (int) p.y, - (int) p.z, xCoord, yCoord, zCoord)) { - return false; - } - - if (entity instanceof IPipeEntry || entity instanceof ILiquidContainer) { - return true; - } - - return false; - } - - public Position getPosition() { - return new Position (xCoord, yCoord, zCoord); - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipePowerTeleport.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipePowerTeleport.java deleted file mode 100644 index 9a7401e2..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipePowerTeleport.java +++ /dev/null @@ -1,241 +0,0 @@ -/** - * BuildCraft is open-source. It is distributed under the terms of the - * BuildCraft Open Source License. It grants rights to read, modify, compile - * or run the code. It does *NOT* grant the right to redistribute this software - * or its modifications in any form, binary or source, except if expressively - * granted by the copyright holder. - */ - -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.src.ModLoader; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.mod_AdditionalPipes; -import net.minecraft.src.buildcraft.api.IPowerReceptor; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.api.TileNetworkData; -import net.minecraft.src.buildcraft.core.Utils; -import net.minecraft.src.buildcraft.transport.IPipeTransportPowerHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeTransportPower; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; -import net.minecraft.src.buildcraft.additionalpipes.*; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicTeleport; -import net.minecraft.src.buildcraft.additionalpipes.network.NetworkID; - -public class PipePowerTeleport extends PipeTeleport implements IPipeTransportPowerHook { - - public class PowerReturn { - public TileEntity tile; - public Orientations ori; - - public PowerReturn(TileEntity te, Orientations o) { - tile = te; - ori = o; - } - } - - public PipePowerTeleport(int itemID) { - super(new PipeTransportPower(), new PipeLogicTeleport(NetworkID.GUI_PIPE_TP), itemID); - - } - - @Override - public int getBlockTexture() { - return mod_AdditionalPipes.DEFUALT_POWER_TELEPORT_TEXTURE; - } - - public double calculateLoss(int distance, double power) { - - return power; - } - - @Override - public void receiveEnergy(Orientations from, double val) { - - ((PipeTransportPower)this.transport).step(); - List pipeList = getConnectedPipes(false); - List sendingToList = new LinkedList(); - - if (pipeList.size() == 0) { - return; - } - - for (int a = 0; a < pipeList.size(); a++) { - if (TeleportNeedsPower(pipeList.get(a)).size() > 0) { - sendingToList.add(pipeList.get(a)); - } - } - - if (sendingToList.size() == 0) { - return; - } - - double powerToSend = val / sendingToList.size(); - - //System.out.println("SendingToList: " + sendingToList.size() + " - PowerToSend: " + powerToSend); - for (int a = 0; a < sendingToList.size(); a++) { - List needsPower = TeleportNeedsPower(sendingToList.get(a)); - - if (needsPower.size() == 0) { - return; - } - - double powerToSendAfterLoss = calculateLoss(getDistance(sendingToList.get(a).xCoord, sendingToList.get(a).yCoord, sendingToList.get(a).zCoord), powerToSend); - //System.out.println("Power After Loss: " + powerToSendAfterLoss); - double powerToSend2 = powerToSendAfterLoss / needsPower.size(); - - //System.out.println("needsPower: " + needsPower.size() + " - PowerToSend2: " + powerToSend2); - for (int b = 0; b < needsPower.size(); b++) { - if (needsPower.get(b).tile instanceof TileGenericPipe) { - TileGenericPipe nearbyTile = (TileGenericPipe) needsPower.get(b).tile; - PipeTransportPower nearbyTransport = (PipeTransportPower) nearbyTile.pipe.transport; - nearbyTransport.receiveEnergy(needsPower.get(b).ori, powerToSend); - } - else if (needsPower.get(b).tile instanceof IPowerReceptor) { - IPowerReceptor pow = (IPowerReceptor) needsPower.get(b); - pow.getPowerProvider().receiveEnergy((int)powerToSend); - } - } - - } - - } - - public List TeleportNeedsPower(PipeTeleport a) { - - LinkedList theList = getRealPossibleMovements(a.getPosition()); - List needsPower = new LinkedList(); - - if (theList.size() > 0) { - for (int b = 0; b < theList.size(); b++) { - Orientations newPos = theList.get(b); - Position destPos = new Position(a.xCoord, a.yCoord, a.zCoord, newPos); - destPos.moveForwards(1.0); - TileEntity tile = worldObj.getBlockTileEntity((int)destPos.x, (int)destPos.y, (int)destPos.z); - - if (TileNeedsPower(tile)) { - needsPower.add(new PowerReturn(tile, newPos.reverse())); - } - - } - } - - return needsPower; - } - - public boolean TileNeedsPower(TileEntity tile) { - - if (tile instanceof TileGenericPipe) { - PipeTransportPower ttb = (PipeTransportPower) ((TileGenericPipe)tile).pipe.transport; - - for (int i = 0; i < ttb.powerQuery.length; i++) - if (ttb.powerQuery[i] > 0) { - return true; - } - } - else if (tile instanceof IPowerReceptor) { - } - - return false; - } - - public LinkedList getRealPossibleMovements(Position pos) { - LinkedList result = new LinkedList(); - - for (int o = 0; o < 6; ++o) { - if (Orientations.values()[o] != pos.orientation.reverse() && container.pipe.outputOpen(Orientations.values()[o])) { - Position newPos = new Position(pos); - newPos.orientation = Orientations.values()[o]; - newPos.moveForwards(1.0); - - if (canReceivePower(newPos)) { - result.add(newPos.orientation); - } - } - } - - return result; - } - - public boolean canReceivePower(Position p) { - TileEntity entity = worldObj.getBlockTileEntity((int) p.x, (int) p.y, (int) p.z); - - if (entity instanceof TileGenericPipe || entity instanceof IPowerReceptor) { - if (Utils.checkPipesConnections(worldObj, (int) p.x, (int) p.y, (int) p.z, xCoord, yCoord, zCoord)) { - return true; - } - } - - return false; - } - /* - @Override - public void setPosition (int xCoord, int yCoord, int zCoord) { - - LinkedList toRemove = new LinkedList (); - - for (int i = 0; i < PowerTeleportPipes.size(); i++) { - if (PowerTeleportPipes.get(i).xCoord == xCoord && PowerTeleportPipes.get(i).yCoord == yCoord && PowerTeleportPipes.get(i).zCoord == zCoord) { - //System.out.println("Removed OldLoc: " + i); - toRemove.add(PowerTeleportPipes.get(i)); - } - } - - PowerTeleportPipes.removeAll(toRemove); - PowerTeleportPipes.add(this); - super.setPosition(xCoord, yCoord, zCoord); - }*/ - - public int getDistance(int x, int y, int z) { - return (int) Math.sqrt(((xCoord - x) * (xCoord - x)) + ((yCoord - y) * (yCoord - y)) + ((zCoord - z) * (zCoord - z))); - } - - public Position getPosition() { - return new Position (xCoord, yCoord, zCoord); - } - - @Override - public void requestEnergy(Orientations from, int is) { - - ((PipeTransportPower)this.transport).step(); - - if (!logic.canReceive) { //No need to waste CPU - return; - } - - List pipeList = getConnectedPipes(true); - - if (pipeList.size() == 0) { - return; - } - - for (int a = 0; a < pipeList.size(); a++) { - LinkedList theList = getRealPossibleMovements(pipeList.get(a).getPosition()); - - if (theList.size() > 0) { - for (int b = 0; b < theList.size(); b++) { - Orientations newPos = theList.get(b); - Position destPos = new Position(pipeList.get(a).xCoord, pipeList.get(a).yCoord, pipeList.get(a).zCoord, newPos); - destPos.moveForwards(1.0); - - //System.out.println(getPosition().toString() + " RequestEnergy: " + from.toString() + " - Val: " + is + " - Dest: " + destPos.toString()); - - TileEntity tile = worldObj.getBlockTileEntity((int)destPos.x, (int)destPos.y, (int)destPos.z); - - if (tile instanceof TileGenericPipe) { - TileGenericPipe nearbyTile = (TileGenericPipe) tile; - PipeTransportPower nearbyTransport = (PipeTransportPower) nearbyTile.pipe.transport; - nearbyTransport.requestEnergy(newPos.reverse(), is); - } - } - } - } - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeTeleport.java b/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeTeleport.java deleted file mode 100644 index a5dc7fd1..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/pipes/PipeTeleport.java +++ /dev/null @@ -1,88 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.pipes; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.src.buildcraft.additionalpipes.MutiPlayerProxy; -import net.minecraft.src.buildcraft.additionalpipes.logic.PipeLogicTeleport; -import net.minecraft.src.buildcraft.api.EntityPassiveItem; -import net.minecraft.src.buildcraft.api.Orientations; -import net.minecraft.src.buildcraft.api.Position; -import net.minecraft.src.buildcraft.transport.IPipeTransportItemsHook; -import net.minecraft.src.buildcraft.transport.Pipe; -import net.minecraft.src.buildcraft.transport.PipeLogic; -import net.minecraft.src.buildcraft.transport.PipeTransport; -import net.minecraft.src.buildcraft.transport.TileGenericPipe; - -public abstract class PipeTeleport extends Pipe { - - public final PipeLogicTeleport logic; - - public static List teleportPipes = new LinkedList(); - - public PipeTeleport(PipeTransport transport, PipeLogicTeleport logic, int itemID) { - super(transport, logic, itemID); - this.logic = logic; - } - - @Override - public void updateEntity() { - super.updateEntity(); - - if (!teleportPipes.contains(this)) { - teleportPipes.add(this); - } - } - - public List getConnectedPipes(boolean ignoreReceive) { - - List temp = new LinkedList(); - removeOldPipes(); - - PipeLogicTeleport logic = (PipeLogicTeleport) this.logic; - - for (PipeTeleport pipe : teleportPipes) { - - if (!this.getClass().equals(pipe.getClass())) { - continue; - } - - PipeLogicTeleport pipeLogic = (PipeLogicTeleport) pipe.logic; - - if (pipeLogic.owner.equalsIgnoreCase(logic.owner) || MutiPlayerProxy.isOnServer() == false) { - - if (pipeLogic.canReceive || ignoreReceive) { - - if (pipeLogic.freq == logic.freq) { - - if (xCoord != pipe.xCoord || yCoord != pipe.yCoord || zCoord != pipe.zCoord ) { - - temp.add(pipe); - } - } - } - } - } - - return temp; - } - - public void removeOldPipes() { - - LinkedList toRemove = new LinkedList (); - - for (PipeTeleport pipe : teleportPipes) { - - if (!(worldObj.getBlockTileEntity(pipe.xCoord, pipe.yCoord, pipe.zCoord) instanceof TileGenericPipe)) { - toRemove.add(pipe); - } - } - - teleportPipes.removeAll(toRemove); - } - - public Position getPosition() { - return new Position (xCoord, yCoord, zCoord); - } - -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/transport/IPipeProvideRedstonePowerHook.java b/common/net/minecraft/src/buildcraft/additionalpipes/transport/IPipeProvideRedstonePowerHook.java deleted file mode 100644 index 10cc9ade..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/transport/IPipeProvideRedstonePowerHook.java +++ /dev/null @@ -1,15 +0,0 @@ -// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. -// Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) braces deadcode - -package net.minecraft.src.buildcraft.additionalpipes.transport; - -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.World; - -public interface IPipeProvideRedstonePowerHook { - - public abstract boolean isPoweringTo(IBlockAccess iblockaccess, int i, int j, int k, int l); - - public abstract boolean isIndirectlyPoweringTo(World world, int i, int j, int k, int l); -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/transport/IPipeRandomDisplay.java b/common/net/minecraft/src/buildcraft/additionalpipes/transport/IPipeRandomDisplay.java deleted file mode 100644 index 08fcd7dd..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/transport/IPipeRandomDisplay.java +++ /dev/null @@ -1,14 +0,0 @@ -// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. -// Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) braces deadcode - -package net.minecraft.src.buildcraft.additionalpipes.transport; - -import java.util.Random; - -import net.minecraft.src.World; - -public interface IPipeRandomDisplay { - - public abstract void randomDisplayTick(World world, int i, int j, int k, Random random); -} diff --git a/common/net/minecraft/src/buildcraft/additionalpipes/utils/Logger.java b/common/net/minecraft/src/buildcraft/additionalpipes/utils/Logger.java deleted file mode 100644 index cd820148..00000000 --- a/common/net/minecraft/src/buildcraft/additionalpipes/utils/Logger.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.minecraft.src.buildcraft.additionalpipes.utils; - -public class Logger { - -} diff --git a/debugger.png b/debugger.png new file mode 100644 index 00000000..6942353b Binary files /dev/null and b/debugger.png differ diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..6985b1c3 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx4096M +mc_version=1.12.2 +jei_version=4.8.5.142 +net.minecraftforge.gradle.disableUpdateChecker=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..99340b4a Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..b9d52d8c --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 00000000..6e5d9efa --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" \ No newline at end of file diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..dee787c6 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega \ No newline at end of file diff --git a/lib/.gradle/2.4/taskArtifacts/cache.properties b/lib/.gradle/2.4/taskArtifacts/cache.properties new file mode 100644 index 00000000..9498802d --- /dev/null +++ b/lib/.gradle/2.4/taskArtifacts/cache.properties @@ -0,0 +1 @@ +#Mon Mar 14 07:29:46 PDT 2016 diff --git a/lib/.gradle/2.4/taskArtifacts/cache.properties.lock b/lib/.gradle/2.4/taskArtifacts/cache.properties.lock new file mode 100644 index 00000000..23f1fb58 Binary files /dev/null and b/lib/.gradle/2.4/taskArtifacts/cache.properties.lock differ diff --git a/lib/.gradle/2.4/taskArtifacts/fileSnapshots.bin b/lib/.gradle/2.4/taskArtifacts/fileSnapshots.bin new file mode 100644 index 00000000..2808cb2a Binary files /dev/null and b/lib/.gradle/2.4/taskArtifacts/fileSnapshots.bin differ diff --git a/lib/.gradle/2.4/taskArtifacts/taskArtifacts.bin b/lib/.gradle/2.4/taskArtifacts/taskArtifacts.bin new file mode 100644 index 00000000..4a62fbd4 Binary files /dev/null and b/lib/.gradle/2.4/taskArtifacts/taskArtifacts.bin differ diff --git a/lib/buildcraft-7.1.22-dev.jar b/lib/buildcraft-7.1.22-dev.jar new file mode 100644 index 00000000..25cb1ecd Binary files /dev/null and b/lib/buildcraft-7.1.22-dev.jar differ diff --git a/lib/buildcraft-7.1.22-sources.jar b/lib/buildcraft-7.1.22-sources.jar new file mode 100644 index 00000000..3195e425 Binary files /dev/null and b/lib/buildcraft-7.1.22-sources.jar differ diff --git a/lib/buildcraft-7.2.0-dev.jar b/lib/buildcraft-7.2.0-dev.jar new file mode 100644 index 00000000..cb7a5cd6 Binary files /dev/null and b/lib/buildcraft-7.2.0-dev.jar differ diff --git a/lib/buildcraft-7.2.0-sources.jar b/lib/buildcraft-7.2.0-sources.jar new file mode 100644 index 00000000..f696126f Binary files /dev/null and b/lib/buildcraft-7.2.0-sources.jar differ diff --git a/lib/buildcraft-7.2.0.jar b/lib/buildcraft-7.2.0.jar new file mode 100644 index 00000000..6517a2c2 Binary files /dev/null and b/lib/buildcraft-7.2.0.jar differ diff --git a/lib/buildcraft-compat-7.1.6-dev.jar b/lib/buildcraft-compat-7.1.6-dev.jar new file mode 100644 index 00000000..2267cb7d Binary files /dev/null and b/lib/buildcraft-compat-7.1.6-dev.jar differ diff --git a/src/main/java/buildcraft/additionalpipes/APConfiguration.java b/src/main/java/buildcraft/additionalpipes/APConfiguration.java new file mode 100644 index 00000000..e55d3012 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/APConfiguration.java @@ -0,0 +1,96 @@ +package buildcraft.additionalpipes; + +import java.io.File; + +import buildcraft.additionalpipes.utils.Log; +import buildcraft.lib.registry.RegistryConfig; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + + +public class APConfiguration +{ + public static int chunkSightRange; // config option + + public static boolean chunkSightAutorefresh = true; + + public static boolean enableDebugLog; + + public static boolean enableChunkloaderRecipe; + + // keybinding + public static int laserKeyCode; // config option (& in options menu) + + public static float powerTransmittanceCfg; // config option + + public static int waterPumpWaterPerTick; // in millibuckets / tick + + public static int gravityFeedPipeTicksPerPull; + + public static boolean enableTriggers = true; + + //set from config + public static boolean filterRightclicks = false; + + + public static void loadConfigs(File configFile) + { + Configuration config = new Configuration(configFile); + try + { + config.load(); + + Property powerTransmittance = config.get(Configuration.CATEGORY_GENERAL, "powerTransmittance", 90); + powerTransmittance.setComment("Percentage of power a power teleport pipe transmits. Between 0 and 100."); + powerTransmittanceCfg = powerTransmittance.getInt() / 100.0f; + if(powerTransmittanceCfg > 1.00) + { + powerTransmittanceCfg = 1f; + } + else if(powerTransmittanceCfg < 0.0) + { + powerTransmittanceCfg = 0.0f; + } + + Property chunkSightRangeProperty = config.get(Configuration.CATEGORY_GENERAL, "chunkSightRange", 8); + chunkSightRangeProperty.setComment("Range of chunk load boundaries."); + chunkSightRange = chunkSightRangeProperty.getInt(); + + Property laserKey = config.get(Configuration.CATEGORY_GENERAL, "laserKeyChar", 68); + laserKey.setComment("Default key to toggle chunk load boundaries."); + laserKeyCode = laserKey.getInt(); + + Property filterRightclicksProperty = config.get(Configuration.CATEGORY_GENERAL, "filterRightclicks", false); + filterRightclicksProperty.setComment("When right clicking on something with a gui, do not show the gui if you have a pipe in your hand"); + filterRightclicks = filterRightclicksProperty.getBoolean(); + + Property enableDebugLogProperty = config.get(Configuration.CATEGORY_GENERAL, "enableDebugLog", false); + enableDebugLogProperty.setComment("Enable debug logging for development"); + enableDebugLog = enableDebugLogProperty.getBoolean(); + + Property waterPerTickProperty = config.get(Configuration.CATEGORY_GENERAL, "waterPumpWaterPerTick", 90); + waterPerTickProperty.setComment("Amount of water the Water Pump Pipe produces in millibuckets/tick"); + waterPumpWaterPerTick = waterPerTickProperty.getInt(); + + Property gpPullRateProperty = config.get(Configuration.CATEGORY_GENERAL, "gravityFeedPipeTicksPerPull", 20); + gpPullRateProperty.setComment("How many ticks the Gravity Feed Pipe needs to extract an item"); + gravityFeedPipeTicksPerPull = gpPullRateProperty.getInt(); + + Property enableChunkloaderProperty = config.get(Configuration.CATEGORY_GENERAL, "enableChunkloaderRecipe", true); + enableChunkloaderProperty.setComment("Whether or not the chunkloader will have a crafting recipe. Set to false to make it a creative-only item."); + enableChunkloaderRecipe = enableChunkloaderProperty.getBoolean(); + } + catch(Exception e) + { + Log.error("Error loading Additional Pipes configs." + e); + } + finally + { + config.save(); + + // tell Buildcraft that this is our configuration file + RegistryConfig.setRegistryConfig(AdditionalPipes.MODID, config); + } + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/APPipeDefintions.java b/src/main/java/buildcraft/additionalpipes/APPipeDefintions.java new file mode 100644 index 00000000..6d5fea42 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/APPipeDefintions.java @@ -0,0 +1,177 @@ +package buildcraft.additionalpipes; + +import com.google.common.collect.ImmutableSet; + +import buildcraft.additionalpipes.pipes.PipeBehaviorAddition; +import buildcraft.additionalpipes.pipes.PipeBehaviorAdvWood; +import buildcraft.additionalpipes.pipes.PipeBehaviorClosed; +import buildcraft.additionalpipes.pipes.PipeBehaviorDistribution; +import buildcraft.additionalpipes.pipes.PipeBehaviorGravityFeed; +import buildcraft.additionalpipes.pipes.PipeBehaviorJeweled; +import buildcraft.additionalpipes.pipes.PipeBehaviorPriorityInsertion; +import buildcraft.additionalpipes.pipes.PipeBehaviorSwitch; +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleportFluids; +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleportItems; +import buildcraft.additionalpipes.pipes.PipeBehaviorWaterPump; +import buildcraft.additionalpipes.utils.PipeCreator; +import buildcraft.api.mj.MjAPI; +import buildcraft.api.recipes.AssemblyRecipeBasic; +import buildcraft.api.recipes.IngredientStack; +import buildcraft.api.transport.pipe.PipeApi; +import buildcraft.api.transport.pipe.PipeDefinition; +import buildcraft.api.transport.pipe.PipeDefinition.PipeDefinitionBuilder; +import buildcraft.lib.recipe.AssemblyRecipeRegistry; +import buildcraft.silicon.BCSiliconItems; +import buildcraft.transport.BCTransportConfig; +import buildcraft.transport.BCTransportItems; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; + +public class APPipeDefintions +{ + // Addition Pipe + public static Item additionPipeItem; + public static PipeDefinition additionPipeDef; + + // Advanced Wooden Pipe + public static Item advWoodPipeItem; + public static PipeDefinition advWoodPipeDef; + + // Closed Pipe + public static Item closedPipeItem; + public static PipeDefinition closedPipeDef; + + // Distribution Pipe + public static Item distributionPipeItem; + public static PipeDefinition distributionPipeDef; + + // Gravity Feed Pipe + public static Item gravityFeedPipeItem; + public static PipeDefinition gravityFeedPipeDef; + + // Priority Insertion Pipe + public static Item priorityPipeItem; + public static PipeDefinition priorityPipeDef; + + // Jeweled Pipe + public static Item jeweledPipeItem; + public static PipeDefinition jeweledPipeDef; + + // Item Teleport + public static Item itemsTeleportPipeItem; + public static PipeDefinition itemsTeleportPipeDef; + + // Liquid Teleport + public static Item liquidsTeleportPipeItem; + public static PipeDefinition liquidsTeleportPipeDef; + + // Power Teleport + public static Item powerTeleportPipeItem; + public static PipeDefinition powerTeleportPipeDef; + + // Switch pipes + // Switch Transport Pipe + public static Item itemsSwitchPipeItem; + public static PipeDefinition itemsSwitchPipeDef; + + // Switch Fluid Pipe + public static Item fluidsSwitchPipeItem; + public static PipeDefinition fluidsSwitchPipeDef; + + // Switch Transport Pipe + public static Item powerSwitchPipeItem; + public static PipeDefinition powerSwitchPipeDef; + + // water pump pipe + public static Item waterPumpPipeItem; + public static PipeDefinition waterPumpPipeDef; + + + public static void createPipes() + { + additionPipeDef = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_addition").logic(PipeBehaviorAddition::new, PipeBehaviorAddition::new).define(); + additionPipeItem = PipeCreator.createPipeItem(additionPipeDef); + + advWoodPipeDef = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_adv_wood").texSuffixes("_output", "_input").logic(PipeBehaviorAdvWood::new, PipeBehaviorAdvWood::new).define(); + advWoodPipeItem = PipeCreator.createPipeItem(advWoodPipeDef); + + closedPipeDef = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_closed").texSuffixes("_open", "_closed").logic(PipeBehaviorClosed::new, PipeBehaviorClosed::new).define(); + closedPipeItem = PipeCreator.createPipeItem(closedPipeDef); + + PipeDefinitionBuilder distPipeDefBuilder = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_distribution").logic(PipeBehaviorDistribution::new, PipeBehaviorDistribution::new); + attachSidedSuffixes(distPipeDefBuilder); + distPipeDefBuilder.itemTex(EnumFacing.EAST.ordinal()); + distributionPipeDef = distPipeDefBuilder.define(); + distributionPipeItem = PipeCreator.createPipeItem(distributionPipeDef); + + gravityFeedPipeDef = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_gravity_feed").texSuffixes("_up", "_sides").logic(PipeBehaviorGravityFeed::new, PipeBehaviorGravityFeed::new).define(); + gravityFeedPipeItem = PipeCreator.createPipeItem(gravityFeedPipeDef); + + PipeDefinitionBuilder priorityPipeDefBuilder = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_priority").logic(PipeBehaviorPriorityInsertion::new, PipeBehaviorPriorityInsertion::new); + attachSidedSuffixes(priorityPipeDefBuilder); + priorityPipeDef = priorityPipeDefBuilder.define(); + priorityPipeItem = PipeCreator.createPipeItem(priorityPipeDef); + + PipeDefinitionBuilder jeweledPipeDefBuilder = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_jeweled").logic(PipeBehaviorJeweled::new, PipeBehaviorJeweled::new); + attachSidedSuffixes(jeweledPipeDefBuilder); + jeweledPipeDef = jeweledPipeDefBuilder.define(); + jeweledPipeItem = PipeCreator.createPipeItem(jeweledPipeDef); + + itemsTeleportPipeDef = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_teleport").logic(PipeBehaviorTeleportItems::new, PipeBehaviorTeleportItems::new).define(); + itemsTeleportPipeItem = PipeCreator.createPipeItem(itemsTeleportPipeDef); + + // add assembly recipe for Item Teleport Pipe + ImmutableSet tpRecipeIngredients = ImmutableSet.of( + IngredientStack.of(new ItemStack(BCSiliconItems.redstoneChipset, 1, 4)), + IngredientStack.of(new ItemStack(BCTransportItems.pipeItemDiamond)), + IngredientStack.of(new ItemStack(BCSiliconItems.redstoneChipset, 1, 3))); + AssemblyRecipeRegistry.register(new AssemblyRecipeBasic("teleportPipe", 10000 * MjAPI.MJ, tpRecipeIngredients, new ItemStack(itemsTeleportPipeItem, 8))); + + liquidsTeleportPipeDef = new PipeDefinitionBuilder().flowFluid().idTexPrefix("pipe_fluids_teleport").logic(PipeBehaviorTeleportFluids::new, PipeBehaviorTeleportFluids::new).define(); + liquidsTeleportPipeItem = PipeCreator.createPipeItem(liquidsTeleportPipeDef); + + //powerTeleportPipeDef = new PipeDefinitionBuilder().flowPower().idTexPrefix("pipe_power_teleport").logic(PipeBehaviorTeleportPower::new, PipeBehaviorTeleportPower::new).define(); + //powerTeleportPipeItem = PipeCreator.createPipeItemAndRecipe(1, powerTeleportPipeDef, true, new Object[] {"dustRedstone", itemsTeleportPipeItem}); + + itemsSwitchPipeDef = new PipeDefinitionBuilder().flowItem().idTexPrefix("pipe_items_switch").texSuffixes("_closed", "_open").logic(PipeBehaviorSwitch::new, PipeBehaviorSwitch::new).define(); + itemsSwitchPipeItem = PipeCreator.createPipeItem(itemsSwitchPipeDef); + + fluidsSwitchPipeDef = new PipeDefinitionBuilder().flowFluid().idTexPrefix("pipe_fluids_switch").texSuffixes("_closed", "_open").logic(PipeBehaviorSwitch::new, PipeBehaviorSwitch::new).define(); + fluidsSwitchPipeItem = PipeCreator.createPipeItem(fluidsSwitchPipeDef); + + powerSwitchPipeDef = new PipeDefinitionBuilder().flowPower().idTexPrefix("pipe_power_switch").texSuffixes("_closed", "_open").logic(PipeBehaviorSwitch::new, PipeBehaviorSwitch::new).define(); + powerSwitchPipeItem = PipeCreator.createPipeItem(powerSwitchPipeDef); + + waterPumpPipeDef = new PipeDefinitionBuilder().flowFluid().idTexPrefix("pipe_fluids_water_pump").logic(PipeBehaviorWaterPump::new, PipeBehaviorWaterPump::new).define(); + waterPumpPipeItem = PipeCreator.createPipeItem(waterPumpPipeDef); + } + + public static void setFluidCapacities() + { + // set Liquids Teleport Pipe to be the same as the Diamond Fluid Pipe + PipeApi.fluidTransferData.put(liquidsTeleportPipeDef, new PipeApi.FluidTransferInfo(BCTransportConfig.baseFlowRate * 8, 10)); + + // set Switch Fluid Pipe to be halfway between the Iron and Gold FLuid Pipes + PipeApi.fluidTransferData.put(fluidsSwitchPipeDef, new PipeApi.FluidTransferInfo(BCTransportConfig.baseFlowRate * 6, 10)); + + // set Water Pump Pipe to match its output capacity + PipeApi.fluidTransferData.put(waterPumpPipeDef, new PipeApi.FluidTransferInfo(APConfiguration.waterPumpWaterPerTick, 10)); + } + + /** + * Attach "_down" through "_east" suffixes to a definition, with their indices corresponding to EnumFacing.values()[] ordering + * @param builder + */ + private static void attachSidedSuffixes(PipeDefinitionBuilder builder) + { + String[] suffixes = new String[6]; + + for(int dirIndex = 0; dirIndex < EnumFacing.VALUES.length; ++dirIndex) + { + suffixes[dirIndex] = "_" + EnumFacing.VALUES[dirIndex].getName(); + } + + builder.texSuffixes(suffixes); + } +} diff --git a/src/main/java/buildcraft/additionalpipes/AdditionalPipes.java b/src/main/java/buildcraft/additionalpipes/AdditionalPipes.java new file mode 100644 index 00000000..eaf029f7 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/AdditionalPipes.java @@ -0,0 +1,203 @@ +package buildcraft.additionalpipes; + +import java.io.File; + +import buildcraft.additionalpipes.api.TeleportManagerBase; +import buildcraft.additionalpipes.chunkloader.BlockTeleportTether; +import buildcraft.additionalpipes.chunkloader.ChunkLoadingHandler; +import buildcraft.additionalpipes.chunkloader.TileTeleportTether; +import buildcraft.additionalpipes.gates.GateProvider; +import buildcraft.additionalpipes.gates.TriggerPipeClosed; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.additionalpipes.item.ItemDogDeaggravator; +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.pipes.TeleportManager; +import buildcraft.additionalpipes.sound.APSounds; +import buildcraft.additionalpipes.test.TeleportManagerTest; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.statements.ITriggerInternal; +import buildcraft.api.statements.StatementManager; +import buildcraft.lib.registry.CreativeTabManager; +import buildcraft.lib.registry.CreativeTabManager.CreativeTabBC; +import buildcraft.silicon.BCSiliconItems; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.Mod.Instance; +import net.minecraftforge.fml.common.SidedProxy; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerStartingEvent; +import net.minecraftforge.fml.common.event.FMLServerStoppedEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.registry.GameRegistry; +import net.minecraftforge.oredict.ShapedOreRecipe; + +@Mod(modid = AdditionalPipes.MODID, name = AdditionalPipes.NAME, dependencies = "required-after:buildcrafttransport@[7.99.13,);required-after:buildcraftsilicon;required-after:buildcraftfactory", version = AdditionalPipes.VERSION) +public class AdditionalPipes { + public static final String MODID = "additionalpipes"; + public static final String NAME = "Additional Pipes"; + public static final String VERSION = "6.0.0.8"; + + @Instance(MODID) + public static AdditionalPipes instance; + + @SidedProxy(clientSide = "buildcraft.additionalpipes.MultiPlayerProxyClient", serverSide = "buildcraft.additionalpipes.MultiPlayerProxy") + public static MultiPlayerProxy proxy; + + public File configFile; + + // chunk load boundaries + //public ChunkLoadViewDataProxy chunkLoadViewer; + + public CreativeTabBC creativeTab; + + + + // obsidian fluid pipe + public Item pipeLiquidsObsidian; + + // chunk loader + public BlockTeleportTether blockTeleportTether; + + //dog deaggravator + public Item dogDeaggravator; + + public ITriggerInternal triggerPipeClosed; + + Block blockFoo; + + @EventHandler + public void preInit(FMLPreInitializationEvent event) + { + PacketHandler.init(); + + configFile = event.getSuggestedConfigurationFile(); + APConfiguration.loadConfigs(configFile); + MinecraftForge.EVENT_BUS.register(this); + + //create BuildCraft creative tab + creativeTab = CreativeTabManager.createTab("apcreativetab"); + + Log.info("Registering pipes"); + APPipeDefintions.createPipes(); + APPipeDefintions.setFluidCapacities(); + + Log.info("Registering gates"); + proxy.registerSprites(); + triggerPipeClosed = new TriggerPipeClosed(); + StatementManager.registerTriggerProvider(new GateProvider()); + + // create blocks + blockTeleportTether = new BlockTeleportTether(); + blockTeleportTether.setRegistryName("teleport_tether"); + + } + + @SubscribeEvent + public void registerBlocks(RegistryEvent.Register event) + { + Log.info("Registering blocks"); + + event.getRegistry().register(blockTeleportTether); + } + + @SubscribeEvent + public void registerItems(RegistryEvent.Register event) + { + + Log.info("Registering items"); + dogDeaggravator = new ItemDogDeaggravator(); + event.getRegistry().register(dogDeaggravator); + + event.getRegistry().register(new ItemBlock(blockTeleportTether).setRegistryName(blockTeleportTether.getRegistryName())); + } + + @SubscribeEvent + public void registerRecipes(RegistryEvent.Register event) + { + Log.info("Registering recipes"); + + if(APConfiguration.enableChunkloaderRecipe) + { + Log.debug("Chunkloader recipe enabled!"); + + ShapedOreRecipe chunkloaderRecipe = new ShapedOreRecipe(new ResourceLocation(MODID, "recipes/teleport_tether"), blockTeleportTether, "iii", "iLi", "ici", 'i', "ingotIron", 'L', "gemLapis", 'c', new ItemStack(BCSiliconItems.redstoneChipset, 1, 3)); + chunkloaderRecipe.setRegistryName("teleport_tether"); + event.getRegistry().register(chunkloaderRecipe); + } + } + + @SubscribeEvent + public void registerSounds(RegistryEvent.Register event) + { + Log.info("Registering sounds"); + + APSounds.register(event.getRegistry()); + } + + @EventHandler + public void init(FMLInitializationEvent event) + { + + NetworkRegistry.INSTANCE.registerGuiHandler(this, new GuiHandler()); + + + Log.info("Registering chunk load handler"); + ForgeChunkManager.setForcedChunkLoadingCallback(this, new ChunkLoadingHandler()); + //chunkLoadViewer = new ChunkLoadViewDataProxy(APConfiguration.chunkSightRange); + //MinecraftForge.EVENT_BUS.register(chunkLoadViewer); + + GameRegistry.registerTileEntity(TileTeleportTether.class, "teleport_tether"); + + // the lasers key function depends on the chunk loading code, so it can only be enabled if the chunk loader is + proxy.registerKeyHandler(); + + + //set creative tab icon + creativeTab.setItem(new ItemStack(APPipeDefintions.itemsTeleportPipeItem)); + + // having debug logging is a good indicator that we're in a development environment + if(APConfiguration.enableDebugLog) + { + Log.info("Running Teleport Manager Tests"); + TeleportManagerTest.runAllTests(); + } + + //set the reference in the API + TeleportManagerBase.INSTANCE = TeleportManager.instance; + + Log.info("Setting up renderings..."); + proxy.registerRendering(); + + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event) { + + } + + @EventHandler + public void onServerStart(FMLServerStartingEvent event) { + event.registerServerCommand(new CommandAdditionalPipes()); + } + + @EventHandler + public void onServerStopped(FMLServerStoppedEvent event) { + Log.debug("World unloaded, clearing teleport manager"); + TeleportManager.instance.reset(); + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/ChunkLoadViewDataProxy.java.disabled b/src/main/java/buildcraft/additionalpipes/ChunkLoadViewDataProxy.java.disabled new file mode 100644 index 00000000..e4431b22 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/ChunkLoadViewDataProxy.java.disabled @@ -0,0 +1,201 @@ +package buildcraft.additionalpipes; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.ConcurrentModificationException; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import com.google.common.collect.SetMultimap; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageChunkloadData; +import buildcraft.additionalpipes.network.message.MessageChunkloadRequest; +import buildcraft.additionalpipes.utils.Log; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.ChunkPos; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; +import net.minecraftforge.fml.common.gameevent.TickEvent.WorldTickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ChunkLoadViewDataProxy implements Comparator { + public static final int MAX_SIGHT_RANGE = 31; + + // used by server + private int sightRange; + + // used by client + private List lasers; + private Set persistentChunks; + private boolean active = false; + + public ChunkLoadViewDataProxy(int chunkSightRange) { + setSightRange(chunkSightRange); + lasers = new ArrayList(); + persistentChunks = new HashSet(); + active = false; + } + + private void addLasersToList(EntityLaser[] entityBlocks) + { + for(EntityLaser laser : entityBlocks) + { + lasers.add(laser); + } + } + + // laser methods + + @SideOnly(Side.CLIENT) + public void toggleLasers() { + if(lasersActive()) { + deactivateLasers(); + } else { + activateLasers(); + } + } + + @SideOnly(Side.CLIENT) + public void activateLasers() + { + try + { + deactivateLasers(); + EntityPlayerSP player = FMLClientHandler.instance().getClient().thePlayer; + int playerY = (int) player.posY - 1; + for(ChunkPos coords : persistentChunks) { + int xCoord = coords.chunkXPos * 16; + int zCoord = coords.chunkZPos * 16; + + + addLasersToList(Utils.createLaserBox(player.worldObj, xCoord, playerY, zCoord, xCoord + 16, playerY, zCoord + 16, buildcraft.core.LaserKind.Blue)); + addLasersToList(Utils.createLaserBox(player.worldObj, xCoord, playerY - 20, zCoord, xCoord + 16, playerY - 20, zCoord + 16, buildcraft.core.LaserKind.Blue)); + addLasersToList(Utils.createLaserBox(player.worldObj, xCoord, playerY + 20, zCoord, xCoord + 16, playerY + 20, zCoord + 16, buildcraft.core.LaserKind.Blue)); + + addLasersToList(Utils.createLaserBox(player.worldObj, xCoord + 7, playerY, zCoord + 7, xCoord + 9, playerY, zCoord + 9, buildcraft.core.LaserKind.Red)); + addLasersToList(Utils.createLaserBox(player.worldObj, xCoord + 7, playerY - 20, zCoord + 7, xCoord + 9, playerY - 20, zCoord + 9, buildcraft.core.LaserKind.Red)); + addLasersToList(Utils.createLaserBox(player.worldObj, xCoord + 7, playerY + 20, zCoord + 7, xCoord + 9, playerY + 20, zCoord + 9, buildcraft.core.LaserKind.Red)); + + + + } + active = true; + } + catch(ConcurrentModificationException ex) + { + // it seems like updates and reads of persistentChunks can crash together sometimes. + // we catch that here to prevent a game crash + Log.error("ConcurrentModificationException activating lasers"); + ex.printStackTrace(); + } + } + + @SideOnly(Side.CLIENT) + public void deactivateLasers() { + for(EntityLaser laser : lasers) { + laser.setDead(); + } + lasers.clear(); + active = false; + } + + @SideOnly(Side.CLIENT) + public boolean lasersActive() { + return active; + } + + // packet methods + + @SideOnly(Side.CLIENT) + public void requestPersistentChunks() { + + MessageChunkloadRequest message = new MessageChunkloadRequest(); + PacketHandler.INSTANCE.sendToServer(message); + } + + @SideOnly(Side.CLIENT) + public void receivePersistentChunks(Set chunks) + { + boolean changed = persistentChunks.equals(chunks); + + if(changed) { + persistentChunks = chunks; + if(active) { + activateLasers(); + } + } + } + + // sets how far the server will search for chunkloaded chunks + // when sending data to the player + public void setSightRange(int range) { + sightRange = range; + if(sightRange > MAX_SIGHT_RANGE) + sightRange = MAX_SIGHT_RANGE; + + } + + public void sendPersistentChunksToPlayer(EntityPlayerMP player) + { + if(sightRange > MAX_SIGHT_RANGE) + sightRange = MAX_SIGHT_RANGE; + + SetMultimap forgePersistentChunks = ForgeChunkManager.getPersistentChunksFor(player.getEntityWorld()); + HashSet chunksInRange = new HashSet(); + int playerX = (((int) player.posX) >> 4) - sightRange / 2, playerZ = (((int) player.posZ) >> 4) - sightRange / 2; + + // find all chunks in sight range + for(int i = -sightRange; i <= sightRange; i++) { + for(int j = -sightRange; j <= sightRange; j++) { + ChunkPos coords = new ChunkPos(playerX + i, playerZ + j); + if(forgePersistentChunks.containsKey(coords)) { + chunksInRange.add(coords); + } + } + } + + MessageChunkloadData message = new MessageChunkloadData(chunksInRange); + + PacketHandler.INSTANCE.sendTo(message, player); + + Log.debug("[ChunkLoadViewDataProxy] Sent chunks within " + sightRange + " of player."); + } + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void tickEnd(WorldTickEvent event) { + if(event.phase == Phase.END) + { + if(APConfiguration.chunkSightAutorefresh && lasersActive()) { + requestPersistentChunks(); + } + } + } + + + public String getLabel() { + return getClass().getSimpleName(); + } + + + public int nextTickSpacing() { + return 20 * 5; + } + + // Comparator + + // first - other + // assume non-null + @Override + public int compare(ChunkPos first, ChunkPos other) { + int dx = first.chunkXPos - other.chunkXPos; + return dx != 0 ? dx : first.chunkZPos - other.chunkZPos; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/CommandAdditionalPipes.java b/src/main/java/buildcraft/additionalpipes/CommandAdditionalPipes.java new file mode 100644 index 00000000..96776671 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/CommandAdditionalPipes.java @@ -0,0 +1,80 @@ +package buildcraft.additionalpipes; + +import java.util.Collection; + +import buildcraft.additionalpipes.api.TeleportPipeType; +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleport; +import buildcraft.additionalpipes.pipes.TeleportManager; +import net.minecraft.command.CommandBase; +import net.minecraft.command.CommandException; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentString; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.util.text.translation.I18n; + +public class CommandAdditionalPipes extends CommandBase { + + @Override + public String getName() { + return AdditionalPipes.MODID.toLowerCase(); + } + + @SuppressWarnings("rawtypes") + @Override + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException + { + if(args.length > 1 && "teleport".equals(args[0])) + { + //let's be a bit lenient with plurals + + TeleportPipeType type; + + if(args[1].equals("items") || args[1].equals("item")) + { + type = TeleportPipeType.ITEMS; + } + else if(args[1].equals("fluids") || args[1].equals("fluid")) + { + type = TeleportPipeType.FLUIDS; + } + else if(args[1].equals("power")) + { + type = TeleportPipeType.POWER; + } + else + { + return; + } + + Collection pipes = TeleportManager.instance.getAllPipesInNetwork(type); + + sender.sendMessage((ITextComponent) new TextComponentTranslation("command.ap.pipelist_header")); + for(Object pipeObject : pipes) + { + StringBuffer sb = new StringBuffer(); + PipeBehaviorTeleport pipe = (PipeBehaviorTeleport)pipeObject; + sb.append('['); + sb.append(pipe.getPosition().getX()).append(", "); + sb.append(pipe.getPosition().getY()).append(", "); + sb.append(pipe.getPosition().getZ()).append("] "); + sb.append(pipe.ownerName); + sender.sendMessage(new TextComponentString(sb.toString())); + } + } + else + { + sender.sendMessage(new TextComponentTranslation("command.ap.usage")); + } + } + + + @Override + public String getUsage(ICommandSender sender) + { + return I18n.translateToLocal("command.ap.usage"); + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/MultiPlayerProxy.java b/src/main/java/buildcraft/additionalpipes/MultiPlayerProxy.java new file mode 100644 index 00000000..4c5337ee --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/MultiPlayerProxy.java @@ -0,0 +1,21 @@ +package buildcraft.additionalpipes; + +public class MultiPlayerProxy { + + //none of these methods do anything on the server + + public void registerKeyHandler() { + } + + public void registerRendering() + { + // do nothing + } + + public void registerSprites() + { + // do nothing + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/MultiPlayerProxyClient.java b/src/main/java/buildcraft/additionalpipes/MultiPlayerProxyClient.java new file mode 100644 index 00000000..50a1d572 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/MultiPlayerProxyClient.java @@ -0,0 +1,48 @@ +package buildcraft.additionalpipes; + +import buildcraft.additionalpipes.item.ItemDogDeaggravator; +import buildcraft.additionalpipes.textures.Textures; +import buildcraft.lib.client.sprite.SpriteHolderRegistry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.item.Item; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class MultiPlayerProxyClient extends MultiPlayerProxy +{ + + @Override + public void registerKeyHandler() + { + // disabled since I cannot get this to work in 1.8 + //Log.info("Registering key handler(s)"); + + //Keybindings.lasers = new KeyBinding("key.lasers", APConfiguration.laserKeyCode, AdditionalPipes.NAME); + //ClientRegistry.registerKeyBinding(Keybindings.lasers); + + //MinecraftForge.EVENT_BUS.register(new KeyInputEventHandler()); + } + + @Override + public void registerRendering() + { + RenderItem renderItem = Minecraft.getMinecraft().getRenderItem(); + + renderItem.getItemModelMesher().register(Item.getItemFromBlock(AdditionalPipes.instance.blockTeleportTether), 0, + new ModelResourceLocation(AdditionalPipes.instance.blockTeleportTether.getRegistryName(), "inventory")); + + renderItem.getItemModelMesher().register(AdditionalPipes.instance.dogDeaggravator, 0, + new ModelResourceLocation(AdditionalPipes.MODID + ":" + ItemDogDeaggravator.NAME, "inventory")); + + + } + + @Override + public void registerSprites() + { + Textures.TRIGGER_PIPE_CLOSED = SpriteHolderRegistry.getHolder("additionalpipes:items/triggers/pipe_closed"); + } +} diff --git a/src/main/java/buildcraft/additionalpipes/api/ITeleportPipe.java b/src/main/java/buildcraft/additionalpipes/api/ITeleportPipe.java new file mode 100644 index 00000000..36476e31 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/api/ITeleportPipe.java @@ -0,0 +1,55 @@ +package buildcraft.additionalpipes.api; + +import java.util.UUID; + +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.util.math.BlockPos; + + +/** + * Interface that describes the functions of a Teleport Pipe. + * + * Mostly just getters and setters for the various properties. + * @author Jamie + * + */ +public interface ITeleportPipe +{ + public void setFrequency(int freq); + + public int getFrequency(); + + /** + * Gets the send-receive state of the teleport pipe. + * + * 0b0 = none, 0b1 = send, 0b10 = receive, 0b11 = both + * @param state + */ + public byte getState(); + + public void setState(byte state); + + + public boolean isPublic(); + + public void setPublic(boolean isPublic); + + public TeleportPipeType getType(); + + public BlockPos getPosition(); + + public boolean canReceive(); + + public boolean canSend(); + + public UUID getOwnerUUID(); + + public String getOwnerName(); + + public TilePipeHolder getContainer(); + + /** + * Checks two teleport pipes for equality. The teleport manager will remove entries that are equal according to this method when adding a new pipe. + */ + public boolean equals(Object obj); +} \ No newline at end of file diff --git a/src/main/java/buildcraft/additionalpipes/api/TeleportManagerBase.java b/src/main/java/buildcraft/additionalpipes/api/TeleportManagerBase.java new file mode 100644 index 00000000..63730d9a --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/api/TeleportManagerBase.java @@ -0,0 +1,65 @@ + +package buildcraft.additionalpipes.api; + +import java.util.ArrayList; + +/** + * This class defines the interface for the teleport pipe manager. + * + * It keeps track of all teleport pipes, and has functions to get all of them or certain ones connected to a pipe. + * + */ +public abstract class TeleportManagerBase +{ + //set at runtime when the mod initializes + public static TeleportManagerBase INSTANCE = null; + + /** + * Add a pipe to to the manager on the given frequency. + * + * Automatically called by the teleport pipe constructor. + * @param pipe + * @param frequency + */ + public abstract void add(ITeleportPipe pipe, int frequency); + + /** + * Remove a pipe from the manager on the given frequency. + * @param pipe + * @param frequency + */ + public abstract void remove(ITeleportPipe pipe, int frequency); + + /** + * Remove the knowledge of all pipes from the teleport manager. If called, pipes will stay in the world, but + * not send items to each other until the world is reloaded. + * + * This function is useful for testing the teleport manager. + */ + public abstract void reset(); + + /** + * Get pipes connected to the provided one. (template function version) + * @param pipe + * @param includeSend whether or not to return connected pipes that send stuff. + * @param includeReceive whether or not to return connected pipes that receive stuff. + * @return + */ + public abstract ArrayList getConnectedPipes(T pipe, boolean includeSend, boolean includeReceive); + + /** + * Get the name of the provided frequency. + * + * NOTE: frequency naming is not supported in the UI as of v4.6.0 + * @param frequency + * @return the name of the frequency, or an empty string if it has no name. + */ + public abstract String getFrequencyName(int frequency); + + /** + * Set the name of a frequency. + * @param frequency + * @param name + */ + public abstract void setFrequencyName(int frequency, String name); +} \ No newline at end of file diff --git a/src/main/java/buildcraft/additionalpipes/api/TeleportPipeType.java b/src/main/java/buildcraft/additionalpipes/api/TeleportPipeType.java new file mode 100644 index 00000000..bdd76d84 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/api/TeleportPipeType.java @@ -0,0 +1,8 @@ +package buildcraft.additionalpipes.api; + +public enum TeleportPipeType +{ + ITEMS, + FLUIDS, + POWER, +} diff --git a/src/main/java/buildcraft/additionalpipes/api/package-info.java b/src/main/java/buildcraft/additionalpipes/api/package-info.java new file mode 100644 index 00000000..753e8061 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/api/package-info.java @@ -0,0 +1,10 @@ +/** + * Additional Pipes API - just for teleport pipes at this point. + */ +@API(apiVersion = "3", owner = "additionalpipes", provides = "apAPI") +package buildcraft.additionalpipes.api; + +import net.minecraftforge.fml.common.API; + + + diff --git a/src/main/java/buildcraft/additionalpipes/chunkloader/BlockTeleportTether.java b/src/main/java/buildcraft/additionalpipes/chunkloader/BlockTeleportTether.java new file mode 100644 index 00000000..d654a781 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/chunkloader/BlockTeleportTether.java @@ -0,0 +1,63 @@ +package buildcraft.additionalpipes.chunkloader; + +import java.util.List; + +import javax.annotation.Nullable; + +import buildcraft.additionalpipes.APConfiguration; +import buildcraft.additionalpipes.AdditionalPipes; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumBlockRenderType; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class BlockTeleportTether extends BlockContainer { + + public BlockTeleportTether() + { + super(Material.CLOTH); + setCreativeTab(AdditionalPipes.instance.creativeTab); + setUnlocalizedName("teleport_tether"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileTeleportTether(); + } + + public boolean isFullCube() + { + return true; + } + + public boolean isOpaqueCube() + { + return true; + } + + /** + * The type of render function called. 3 for standard block models, 2 for TESR's, 1 for liquids, -1 is no render + */ + @Override + public EnumBlockRenderType getRenderType(IBlockState state) + { + return EnumBlockRenderType.MODEL; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List list, ITooltipFlag flagIn) + { + if(!APConfiguration.enableChunkloaderRecipe) { + list.add(I18n.format("tooltip.teleport_tether_crafting_disabled")); + } + } +} \ No newline at end of file diff --git a/src/main/java/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java b/src/main/java/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java new file mode 100644 index 00000000..d690cdb0 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/chunkloader/ChunkLoadingHandler.java @@ -0,0 +1,24 @@ +package buildcraft.additionalpipes.chunkloader; + +import java.util.List; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeChunkManager.LoadingCallback; +import net.minecraftforge.common.ForgeChunkManager.Ticket; + +public class ChunkLoadingHandler implements LoadingCallback { + @Override + public void ticketsLoaded(List tickets, World world) { + for(Ticket ticket : tickets) { + int x = ticket.getModData().getInteger("xCoord"); + int y = ticket.getModData().getInteger("yCoord"); + int z = ticket.getModData().getInteger("zCoord"); + TileEntity te = world.getTileEntity(new BlockPos(x, y, z)); + if(te instanceof TileTeleportTether) { + ((TileTeleportTether) te).forceChunkLoading(ticket); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/buildcraft/additionalpipes/chunkloader/TileTeleportTether.java b/src/main/java/buildcraft/additionalpipes/chunkloader/TileTeleportTether.java new file mode 100644 index 00000000..14d74d1b --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/chunkloader/TileTeleportTether.java @@ -0,0 +1,88 @@ +package buildcraft.additionalpipes.chunkloader; + +import java.util.LinkedList; +import java.util.List; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.utils.Log; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.ChunkPos; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Ticket; +import net.minecraftforge.common.ForgeChunkManager.Type; + +public class TileTeleportTether extends TileEntity { + + private Ticket chunkTicket; + private int loadDistance = 1; + + public List getLoadArea() { + List loadArea = new LinkedList(); + + for(int x = -loadDistance; x < loadDistance + 1; x++) { + for(int z = -loadDistance; z < loadDistance + 1; z++) { + ChunkPos chunkCoords = new ChunkPos((pos.getX() >> 4) + x, (pos.getZ() >> 4) + z); + + loadArea.add(chunkCoords); + } + } + + return loadArea; + } + + @Override + public void validate() { + super.validate(); + if(!getWorld().isRemote && chunkTicket == null) { + Ticket ticket = ForgeChunkManager.requestTicket(AdditionalPipes.instance, getWorld(), Type.NORMAL); + if(ticket != null) { + forceChunkLoading(ticket); + } + } + } + + @Override + public void invalidate() { + super.invalidate(); + stopChunkLoading(); + } + + public void setLoadDistance(int dist) { + loadDistance = dist; + forceChunkLoading(chunkTicket); + } + + public void forceChunkLoading(Ticket ticket) { + stopChunkLoading(); + chunkTicket = ticket; + for(ChunkPos coord : getLoadArea()) { + Log.info(String.format("Teleport Tether @ %s: Force loading chunk %s in %s", getPos().toString(), coord, getWorld().provider.getClass())); + ForgeChunkManager.forceChunk(chunkTicket, coord); + } + } + + public void unforceChunkLoading() { + for(Object obj : chunkTicket.getChunkList()) { + ChunkPos coord = (ChunkPos) obj; + ForgeChunkManager.unforceChunk(chunkTicket, coord); + } + } + + public void stopChunkLoading() { + if(chunkTicket != null) { + ForgeChunkManager.releaseTicket(chunkTicket); + chunkTicket = null; + } + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) { + super.readFromNBT(par1NBTTagCompound); + } + + @Override + public NBTTagCompound writeToNBT(NBTTagCompound par1NBTTagCompound) { + return super.writeToNBT(par1NBTTagCompound); + } +} diff --git a/src/main/java/buildcraft/additionalpipes/gates/APTrigger.java b/src/main/java/buildcraft/additionalpipes/gates/APTrigger.java new file mode 100644 index 00000000..9c559096 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gates/APTrigger.java @@ -0,0 +1,40 @@ +package buildcraft.additionalpipes.gates; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.api.statements.IStatement; +import buildcraft.api.statements.StatementManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.translation.I18n; + +@SuppressWarnings("deprecation") +public abstract class APTrigger implements IStatement { + + protected String id; //used as unique key in BC registry + protected String descriptionKey; //used for description translations + protected ResourceLocation texture; + + /** + * + * @param id the name of the trigger, without the "additionalpipes:" prefix. Also the name of the texture. + */ + public APTrigger(String idWithoutPrefix) + { + descriptionKey = "trigger." + idWithoutPrefix; + + this.id = AdditionalPipes.MODID + ":" + descriptionKey; + StatementManager.statements.put(this.id, this); } + + @Override + public String getUniqueTag() + { + return id; + } + + @Override + public String getDescription() + { + return I18n.translateToLocal(descriptionKey); + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/gates/GateProvider.java b/src/main/java/buildcraft/additionalpipes/gates/GateProvider.java new file mode 100644 index 00000000..76d66db5 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gates/GateProvider.java @@ -0,0 +1,46 @@ +package buildcraft.additionalpipes.gates; + +import java.util.Collection; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.pipes.PipeBehaviorClosed; +import buildcraft.api.statements.IStatementContainer; +import buildcraft.api.statements.ITriggerExternal; +import buildcraft.api.statements.ITriggerInternal; +import buildcraft.api.statements.ITriggerInternalSided; +import buildcraft.api.statements.ITriggerProvider; +import buildcraft.api.transport.pipe.PipeBehaviour; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; + +public class GateProvider implements ITriggerProvider { + + + @Override + public void addInternalTriggers(Collection triggers, IStatementContainer container) + { + PipeBehaviour behavior = ((TilePipeHolder)container.getTile()).getPipe().getBehaviour(); + + if(behavior instanceof PipeBehaviorClosed) + { + triggers.add(AdditionalPipes.instance.triggerPipeClosed); + } + } + + @Override + public void addInternalSidedTriggers(Collection triggers, IStatementContainer container, + EnumFacing side) + { + // do nothing + + } + + @Override + public void addExternalTriggers(Collection triggers, EnumFacing side, TileEntity tile) + { + // do nothing + + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gates/TriggerPipeClosed.java b/src/main/java/buildcraft/additionalpipes/gates/TriggerPipeClosed.java new file mode 100644 index 00000000..cc9c0e80 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gates/TriggerPipeClosed.java @@ -0,0 +1,80 @@ +package buildcraft.additionalpipes.gates; + +import buildcraft.additionalpipes.pipes.PipeBehaviorClosed; +import buildcraft.additionalpipes.textures.Textures; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.core.render.ISprite; +import buildcraft.api.statements.IStatement; +import buildcraft.api.statements.IStatementContainer; +import buildcraft.api.statements.IStatementParameter; +import buildcraft.api.statements.ITriggerInternal; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class TriggerPipeClosed extends APTrigger implements ITriggerInternal { + + public TriggerPipeClosed() + { + super("pipe_closed"); + } + + @Override + public boolean isTriggerActive(IStatementContainer statement, IStatementParameter[] parameters) + { + PipeBehaviorClosed closedPipe = null; + //this much casting feels unsafe + try + { + closedPipe = (PipeBehaviorClosed) ((TilePipeHolder)statement.getTile()).getPipe().getBehaviour(); + } + catch(RuntimeException ex) + { + Log.error("Failed to get reference to Closed Pipe:"); + ex.printStackTrace(); + return false; + } + + // if the first ItemStack is null, then there are no items in the pipe and the trigger should be inactive + return closedPipe.isClosed(); + } + + @Override + public int maxParameters() + { + return 0; + } + + @Override + public int minParameters() + { + return 0; + } + + @Override + public IStatementParameter createParameter(int index) + { + return null; + } + + @Override + public IStatement rotateLeft() + { + return this; + } + + @Override + @SideOnly(Side.CLIENT) + public ISprite getSprite() + { + return Textures.TRIGGER_PIPE_CLOSED; + } + + @Override + public IStatement[] getPossible() + { + return new IStatement[0]; + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/ContainerAdvancedWoodPipe.java b/src/main/java/buildcraft/additionalpipes/gui/ContainerAdvancedWoodPipe.java new file mode 100644 index 00000000..0ef236c0 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/ContainerAdvancedWoodPipe.java @@ -0,0 +1,84 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.gui; + +import buildcraft.additionalpipes.pipes.PipeBehaviorAdvWood; +import buildcraft.lib.gui.ContainerBC_Neptune; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IContainerListener; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public class ContainerAdvancedWoodPipe extends ContainerBC_Neptune { + + private boolean exclude; + private PipeBehaviorAdvWood pipe; + + public ContainerAdvancedWoodPipe(EntityPlayer player, IInventory playerInventory, PipeBehaviorAdvWood pipe) { + super(player); + this.pipe = pipe; + exclude = !pipe.getExclude(); // force a network update + int k = 0; + + for(int j1 = 0; j1 < 9; j1++) { + addSlotToContainer(new SlotItemHandler(pipe.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null), j1 + k * 9, 8 + j1 * 18, 18 + k * 18)); + } + + for(int l = 0; l < 3; l++) { + for(int k1 = 0; k1 < 9; k1++) { + addSlotToContainer(new Slot(playerInventory, k1 + l * 9 + 9, 8 + k1 * 18, 76 + l * 18)); + } + + } + + for(int i1 = 0; i1 < 9; i1++) { + addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 134)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) { + TilePipeHolder tile = (TilePipeHolder) pipe.pipe.getHolder(); + if(tile.getWorld().getTileEntity(tile.getPos()) != tile) return false; + if(entityplayer.getDistanceSq(tile.getPos().getX() + 0.5D, tile.getPos().getY() + 0.5D, tile.getPos().getZ() + 0.5D) > 64) return false; + return true; + } + + @Override + /** + * Called on the server, checks if the exclusion state has changed vs our cache + */ + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + for(IContainerListener crafter : listeners) { + if(exclude != pipe.getExclude()) { + crafter.sendWindowProperty(this, 0, pipe.getExclude() ? 1 : 0); + } + } + exclude = pipe.getExclude(); + } + + /** + * Called on the client to update the exclusion state. Information is transmitted in the other direction via MessageAdvWoodenPipe + */ + @Override + public void updateProgressBar(int i, int j) + { + switch(i) { + case 0: + pipe.setExclude(j == 1); + break; + } + } + +} \ No newline at end of file diff --git a/src/main/java/buildcraft/additionalpipes/gui/ContainerDistributionPipe.java b/src/main/java/buildcraft/additionalpipes/gui/ContainerDistributionPipe.java new file mode 100644 index 00000000..508f6b3e --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/ContainerDistributionPipe.java @@ -0,0 +1,22 @@ +package buildcraft.additionalpipes.gui; + +import buildcraft.additionalpipes.pipes.PipeBehaviorDistribution; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; + +public class ContainerDistributionPipe extends Container { + private PipeBehaviorDistribution pipe; + + public ContainerDistributionPipe(PipeBehaviorDistribution pipe) { + this.pipe = pipe; + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) { + TilePipeHolder tile = (TilePipeHolder) pipe.pipe.getHolder(); + if(tile.getWorld().getTileEntity(tile.getPos()) != tile) return false; + if(entityplayer.getDistanceSq(tile.getPos().getX() + 0.5D, tile.getPos().getY() + 0.5D, tile.getPos().getZ() + 0.5D) > 64) return false; + return true; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/ContainerJeweledPipe.java b/src/main/java/buildcraft/additionalpipes/gui/ContainerJeweledPipe.java new file mode 100644 index 00000000..3963ea41 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/ContainerJeweledPipe.java @@ -0,0 +1,153 @@ +package buildcraft.additionalpipes.gui; + +import java.util.ArrayList; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageJeweledPipeOptionsClient; +import buildcraft.additionalpipes.pipes.PipeBehaviorJeweled; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + + +public class ContainerJeweledPipe extends Container +{ + private final int PLAYER_INVENTORY_ROWS = 3; + private final int PLAYER_INVENTORY_COLUMNS = 9; + + //x coordinate where the slots start + private final int SLOT_START_X = 21; + + byte currentSide = 1; + + /* + * Mapping: + * 0 -> white -> down + * 1 -> light blue -> up + * 2 -> dark blue -> north + * 3 -> green -> south + * 4 -> yellow -> west + * 5 -> red -> east + */ + + PipeBehaviorJeweled pipeItemsJeweled; + + //holds references to the slots for each side + ArrayList> sideSlots; + + public ContainerJeweledPipe(InventoryPlayer inventoryPlayer, PipeBehaviorJeweled pipe) + { + sideSlots = new ArrayList>(); + + // Add the jeweled pipe slots + for(int side = 0; side < GuiJeweledPipe.NUM_TABS; ++side) + { + ArrayList currentSide = new ArrayList(); + + // add the slots off to the side initially + for(int filterRowIndex = 0; filterRowIndex < 3; ++filterRowIndex) + { + for(int filterColumnIndex = 0; filterColumnIndex < 9; ++filterColumnIndex) + { + Slot newSlot = new SlotItemHandler(pipe.filterData[side].getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null), + filterColumnIndex + filterRowIndex * 9, filterColumnIndex * 18, 1000 + ((3 * side) + filterRowIndex) * 18); + this.addSlotToContainer(newSlot); + currentSide.add(newSlot); + } + } + + sideSlots.add(currentSide); + } + + + // Add the player's inventory slots to the container + for (int inventoryRowIndex = 0; inventoryRowIndex < PLAYER_INVENTORY_ROWS; ++inventoryRowIndex) + { + for (int inventoryColumnIndex = 0; inventoryColumnIndex < PLAYER_INVENTORY_COLUMNS; ++inventoryColumnIndex) + { + this.addSlotToContainer(new Slot(inventoryPlayer, inventoryColumnIndex + inventoryRowIndex * 9 + 9, SLOT_START_X + inventoryColumnIndex * 18, 128 + inventoryRowIndex * 18)); + } + } + + // Add the player's action bar slots to the container + for (int actionBarSlotIndex = 0; actionBarSlotIndex < PLAYER_INVENTORY_COLUMNS; ++actionBarSlotIndex) + { + this.addSlotToContainer(new Slot(inventoryPlayer, actionBarSlotIndex, SLOT_START_X + actionBarSlotIndex * 18, 186)); + } + + pipeItemsJeweled = pipe; + + setFilterTab((byte) 1); + + //send the options to the client, since they are only loaded from NBT on the server + if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) + { + MessageJeweledPipeOptionsClient message = new MessageJeweledPipeOptionsClient(pipe.getPos(), pipe.filterData); + PacketHandler.INSTANCE.sendTo(message, (EntityPlayerMP) inventoryPlayer.player); + } + } + + + /** + * Change the pipe inventory slots to be the inventory in the specified tab. + * + * Updates the guiTab class variable + * @param tab + */ + public void setFilterTab(byte newTab) + { + if(newTab > pipeItemsJeweled.filterData.length) + { + throw new IllegalArgumentException(); + } + + ArrayList oldTabSlots = sideSlots.get(currentSide - 1); + ArrayList newTabSlots = sideSlots.get(newTab - 1); + + //move the old slots off to the side + for(int filterRowIndex = 0; filterRowIndex < 3; ++filterRowIndex) + { + for(int filterColumnIndex = 0; filterColumnIndex < 9; ++filterColumnIndex) + { + Slot currentSlot = oldTabSlots.get(9 * filterRowIndex + filterColumnIndex); + currentSlot.xPos = filterColumnIndex * 18; + currentSlot.yPos = 1000 + ((3 * (currentSide - 1)) + filterRowIndex) * 18; + } + } + + //move the new slots onto the GUI + for(int filterRowIndex = 0; filterRowIndex < 3; ++filterRowIndex) + { + for(int filterColumnIndex = 0; filterColumnIndex < 9; ++filterColumnIndex) + { + Slot currentSlot = newTabSlots.get(9 * filterRowIndex + filterColumnIndex); + currentSlot.xPos = SLOT_START_X + filterColumnIndex * 18; + currentSlot.yPos = 33 + filterRowIndex * 18; + } + } + + currentSide = newTab; + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) { + TilePipeHolder tile = (TilePipeHolder) pipeItemsJeweled.pipe.getHolder(); + if(tile.getWorld().getTileEntity(tile.getPos()) != tile) return false; + if(entityplayer.getDistanceSq(tile.getPos().getX() + 0.5D, tile.getPos().getY() + 0.5D, tile.getPos().getZ() + 0.5D) > 64) return false; + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slotIndex) + { + return ItemStack.EMPTY; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/ContainerPipeClosed.java b/src/main/java/buildcraft/additionalpipes/gui/ContainerPipeClosed.java new file mode 100644 index 00000000..10c55ee1 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/ContainerPipeClosed.java @@ -0,0 +1,63 @@ +package buildcraft.additionalpipes.gui; + +import buildcraft.additionalpipes.pipes.PipeBehaviorClosed; +import buildcraft.lib.gui.ContainerBC_Neptune; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +//NOTE: uses the same texture and slot positions as the vanilla Dispenser +public class ContainerPipeClosed extends ContainerBC_Neptune { + + private PipeBehaviorClosed pipe; + + public ContainerPipeClosed(EntityPlayer player, PipeBehaviorClosed pipe) + { + super(player); + this.pipe = (PipeBehaviorClosed) pipe; + int row; + int col; + + for(row = 0; row < 3; ++row) { + for(col = 0; col < 3; ++col) { + addSlotToContainer(new SlotItemHandler(this.pipe.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null), col + row * 3, 62 + col * 18, 17 + row * 18)); + } + } + + for(row = 0; row < 3; ++row) { + for(col = 0; col < 9; ++col) { + addSlotToContainer(new Slot(player.inventory, col + row * 9 + 9, 8 + col * 18, 84 + row * 18)); + } + } + + for(row = 0; row < 9; ++row) { + addSlotToContainer(new Slot(player.inventory, row, 8 + row * 18, 142)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) { + TilePipeHolder tile = (TilePipeHolder) pipe.pipe.getHolder(); + if(tile.getWorld().getTileEntity(tile.getPos()) != tile) return false; + if(entityplayer.getDistanceSq(tile.getPos().getX() + 0.5D, tile.getPos().getY() + 0.5D, tile.getPos().getZ() + 0.5D) > 64) return false; + return true; + } + + + + @Override + public void onContainerClosed(EntityPlayer playerIn) + { + super.onContainerClosed(playerIn); + + // update the pipe's texture if the user has added or removed items + if(!playerIn.world.isRemote) + { + pipe.updateClosedStatus(); + } + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/ContainerPriorityInsertionPipe.java b/src/main/java/buildcraft/additionalpipes/gui/ContainerPriorityInsertionPipe.java new file mode 100644 index 00000000..63785525 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/ContainerPriorityInsertionPipe.java @@ -0,0 +1,52 @@ +package buildcraft.additionalpipes.gui; + +import buildcraft.additionalpipes.pipes.PipeBehaviorPriorityInsertion; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IContainerListener; + +public class ContainerPriorityInsertionPipe extends Container { + private PipeBehaviorPriorityInsertion pipe; + public int[] lastPriorityData; + + public ContainerPriorityInsertionPipe(PipeBehaviorPriorityInsertion pipe) { + this.pipe = pipe; + lastPriorityData = new int[pipe.sidePriorities.length]; + for(int i = 0; i < lastPriorityData.length; i++) { + lastPriorityData[i] = -1; + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) { + TilePipeHolder tile = (TilePipeHolder) pipe.pipe.getHolder(); + if(tile.getWorld().getTileEntity(tile.getPos()) != tile) return false; + if(entityplayer.getDistanceSq(tile.getPos().getX() + 0.5D, tile.getPos().getY() + 0.5D, tile.getPos().getZ() + 0.5D) > 64) return false; + return true; + } + + @Override + public void detectAndSendChanges() + { + super.detectAndSendChanges(); + for(IContainerListener crafter : listeners) + { + for(int i = 0; i < lastPriorityData.length; i++) { + if(lastPriorityData[i] != pipe.sidePriorities[i]) { + crafter.sendWindowProperty(this, i, pipe.sidePriorities[i]); + } + } + } + for(int i = 0; i < lastPriorityData.length; i++) { + lastPriorityData[i] = pipe.sidePriorities[i]; + } + } + + @Override + public void updateProgressBar(int i, int j) { + if(i >= 0 && i < pipe.sidePriorities.length) { + pipe.sidePriorities[i] = (byte) j; + } + } +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/ContainerTeleportPipe.java b/src/main/java/buildcraft/additionalpipes/gui/ContainerTeleportPipe.java new file mode 100644 index 00000000..96e6ac2d --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/ContainerTeleportPipe.java @@ -0,0 +1,140 @@ +package buildcraft.additionalpipes.gui; + +import java.util.List; + +import buildcraft.additionalpipes.api.ITeleportPipe; +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageTelePipeData; +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleport; +import buildcraft.additionalpipes.pipes.TeleportManager; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.lib.gui.ContainerBC_Neptune; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IContainerListener; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; + +public class ContainerTeleportPipe extends ContainerBC_Neptune { + + public int connectedPipes = 0; + + private int ticks = 0; + public PipeBehaviorTeleport pipe; + private int freq; + private byte state; + private boolean isPublic; + + //true if the provided pipe is sending items to other pipes + //and output locations should be shown on the ledger + private boolean isSendingPipe; + + // only set on the server side + private int originalfreq; + + public ContainerTeleportPipe(EntityPlayer player, PipeBehaviorTeleport pipe) + { + super(player); + this.pipe = pipe; + + //set these variables to invalid values so that they will be updated + state = -1; + isPublic = !pipe.isPublic; + freq = -1; + + isSendingPipe = pipe.canSend(); + + if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) + { + List connectedPipes = TeleportManager.instance.getConnectedPipes(pipe, !isSendingPipe, isSendingPipe); + int[] locations = new int[connectedPipes.size() * 3]; + for(int i = 0; i < connectedPipes.size() && i < 9; i++) { + ITeleportPipe connectedPipe = connectedPipes.get(i); + locations[3 * i] = connectedPipe.getContainer().getPos().getX(); + locations[3 * i + 1] = connectedPipe.getContainer().getPos().getY(); + locations[3 * i + 2] = connectedPipe.getContainer().getPos().getZ(); + } + + MessageTelePipeData message = new MessageTelePipeData(pipe.getPos(), locations, pipe.ownerUUID, pipe.ownerName); + PacketHandler.INSTANCE.sendTo(message, (EntityPlayerMP) player); + + //save the pipe's old frequency so it can be removed later + originalfreq = pipe.getFrequency(); + + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + TilePipeHolder tile = pipe.getContainer(); + if(tile.getWorld().getTileEntity(tile.getPos()) != tile) return false; + if(entityplayer.getDistanceSq(tile.getPos().getX() + 0.5D, tile.getPos().getY() + 0.5D, tile.getPos().getZ() + 0.5D) > 64) return false; + return true; + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + int connectedPipesNew = connectedPipes; + if(ticks % 20 == 0) { // reduce lag + ticks = 0; + Log.debug("Old connected:" + connectedPipesNew); + connectedPipesNew = TeleportManager.instance.getConnectedPipes(pipe, !isSendingPipe, isSendingPipe).size(); + Log.debug("New connected:" + connectedPipesNew); + } + ticks++; + for(IContainerListener crafter : listeners) { + if(freq != pipe.getFrequency()) { + crafter.sendWindowProperty(this, 0, pipe.getFrequency()); + } + if(state != pipe.state) { + crafter.sendWindowProperty(this, 1, pipe.state); + } + if(connectedPipesNew != connectedPipes) { + crafter.sendWindowProperty(this, 2, connectedPipesNew); + } + if(isPublic != pipe.isPublic) { + crafter.sendWindowProperty(this, 3, pipe.isPublic ? 1 : 0); + } + } + state = pipe.state; + freq = pipe.getFrequency(); + isPublic = pipe.isPublic; + connectedPipes = connectedPipesNew; + } + + @Override + public void updateProgressBar(int i, int j) { + switch(i) { + case 0: + pipe.setFrequency(j); + break; + case 1: + pipe.state = (byte) j; + break; + case 2: + connectedPipes = j; + break; + case 3: + pipe.isPublic = (j == 1); + break; + } + } + + @Override + public void onContainerClosed(EntityPlayer player) + { + super.onContainerClosed(player); + if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) + { + //remove the pipe from the old frequency + TeleportManager.instance.remove(pipe, originalfreq); + //re-add the pipe to the new frequency + TeleportManager.instance.add(pipe, freq); + + } + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiAdvancedWoodPipe.java b/src/main/java/buildcraft/additionalpipes/gui/GuiAdvancedWoodPipe.java new file mode 100644 index 00000000..c8efd6f7 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiAdvancedWoodPipe.java @@ -0,0 +1,98 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.gui; + +import org.lwjgl.opengl.GL11; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageAdvWoodPipe; +import buildcraft.additionalpipes.pipes.PipeBehaviorAdvWood; +import buildcraft.additionalpipes.textures.Textures; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiAdvancedWoodPipe extends GuiContainer { + + int inventoryRows = 1; + IInventory playerInventory; + PipeBehaviorAdvWood pipe; + private GuiButton[] buttons = new GuiButton[1]; + + int guiX, guiY; + + public GuiAdvancedWoodPipe(EntityPlayer player, IInventory playerInventory, PipeBehaviorAdvWood pipe) + { + super(new ContainerAdvancedWoodPipe(player, playerInventory, pipe)); + this.playerInventory = playerInventory; + this.pipe = pipe; + // container = theContainer; + xSize = 175; + ySize = 156; + + } + + @Override + public void initGui() + { + super.initGui(); + guiX = (width - xSize) / 2; + guiY = (height - ySize) / 2; + buttons[0] = new GuiButton(1, guiX + 8, guiY + 40, 140, 20, ""); + buttonList.add(buttons[0]); + } + + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + @Override + protected void drawGuiContainerForegroundLayer(int p1, int p2) + { + if(pipe.getExclude()) + { + buttons[0].displayString = I18n.format("gui.advwood_pipe.blacklist"); + } + else + { + buttons[0].displayString = I18n.format("gui.advwood_pipe.whitelist"); + } + + fontRenderer.drawString(I18n.format("gui.advwood_pipe.title"), guiX + 42, guiY + 22, 4210752); + } + + @Override + protected void actionPerformed(GuiButton guibutton) { + if(guibutton.id == 1) + { + pipe.setExclude(!pipe.getExclude()); + MessageAdvWoodPipe packet = new MessageAdvWoodPipe(pipe.pipe.getHolder().getPipePos(), pipe.getExclude()); + PacketHandler.INSTANCE.sendToServer(packet); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(Textures.GUI_ADVANCEDWOOD); + int j1 = (width - xSize) / 2; + int k = (height - ySize) / 2; + drawTexturedModalRect(j1, k, 0, 0, xSize, ySize); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiButtonOnOff.java b/src/main/java/buildcraft/additionalpipes/gui/GuiButtonOnOff.java new file mode 100644 index 00000000..7a42f2de --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiButtonOnOff.java @@ -0,0 +1,59 @@ +package buildcraft.additionalpipes.gui; + +import net.minecraft.client.gui.GuiButton; + +/** + * GuiButton which can be set to a "permanently pressed" mode to indicate that the option it controls is enabled. + * + * Sort of like a poor man's checkbox + * @author Jamie + * + */ +public class GuiButtonOnOff extends GuiButton +{ + boolean pressed; + + public boolean isPressed() + { + return pressed; + } + + public void togglePressed() + { + pressed = !pressed; + } + + public void setPressed(boolean pressed) + { + this.pressed = pressed; + } + + public GuiButtonOnOff(int id, int x, int y, int width, boolean pressed, String text) + { + super(id, x, y, width, 20, text); + + this.pressed = pressed; + } + + /** + * Returns 0 if the button is disabled, 1 if the mouse is NOT hovering over this button and 2 if it IS hovering over + * this button. + */ + @Override + public int getHoverState(boolean isHoveredOver) + { + byte retval = 1; + + if (!this.enabled) + { + retval = 0; + } + else if(isHoveredOver || pressed) + { + retval = 2; + } + + return retval; + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiDistributionPipe.java b/src/main/java/buildcraft/additionalpipes/gui/GuiDistributionPipe.java new file mode 100644 index 00000000..a59566a6 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiDistributionPipe.java @@ -0,0 +1,134 @@ +package buildcraft.additionalpipes.gui; + +import org.lwjgl.opengl.GL11; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageDistPipe; +import buildcraft.additionalpipes.pipes.PipeBehaviorDistribution; +import buildcraft.additionalpipes.textures.Textures; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiDistributionPipe extends GuiContainer { + + protected int xSize; + protected int ySize; + private GuiButton[] buttons = new GuiButton[18]; + public int guiX = 0; + public int guiY = 0; + private final PipeBehaviorDistribution pipe; + + public GuiDistributionPipe(PipeBehaviorDistribution pipe) { + super(new ContainerDistributionPipe(pipe)); + this.pipe = pipe; + xSize = 117; + ySize = 130; + } + + @Override + public void initGui() { + super.initGui(); + // int bw = this.xSize - 20; + int guiX = (width - xSize) / 2 + 30; + int guiY = (height - ySize) / 2 - 10; + + buttonList.add(buttons[0] = new GuiButton(1, guiX + 1, guiY + 24, 20, 17, "-")); + buttonList.add(buttons[1] = new GuiButton(2, guiX + 3 + 20, guiY + 24, 30, 17, "0")); + buttonList.add(buttons[2] = new GuiButton(3, guiX + 5 + 50, guiY + 24, 20, 17, "+")); + + buttonList.add(buttons[3] = new GuiButton(4, guiX + 1, guiY + 25 + 17, 20, 17, "-")); + buttonList.add(buttons[4] = new GuiButton(5, guiX + 3 + 20, guiY + 25 + 17, 30, 17, "0")); + buttonList.add(buttons[5] = new GuiButton(6, guiX + 5 + 50, guiY + 25 + 17, 20, 17, "+")); + + buttonList.add(buttons[6] = new GuiButton(7, guiX + 1, guiY + 26 + 17 * 2, 20, 17, "-")); + buttonList.add(buttons[7] = new GuiButton(8, guiX + 3 + 20, guiY + 26 + 17 * 2, 30, 17, "0")); + buttonList.add(buttons[8] = new GuiButton(9, guiX + 5 + 50, guiY + 26 + 17 * 2, 20, 17, "+")); + + buttonList.add(buttons[9] = new GuiButton(10, guiX + 1, guiY + 27 + 17 * 3, 20, 17, "-")); + buttonList.add(buttons[10] = new GuiButton(11, guiX + 3 + 20, guiY + 27 + 17 * 3, 30, 17, "0")); + buttonList.add(buttons[11] = new GuiButton(12, guiX + 5 + 50, guiY + 27 + 17 * 3, 20, 17, "+")); + + buttonList.add(buttons[12] = new GuiButton(13, guiX + 1, guiY + 28 + 17 * 4, 20, 17, "-")); + buttonList.add(buttons[13] = new GuiButton(14, guiX + 3 + 20, guiY + 28 + 17 * 4, 30, 17, "0")); + buttonList.add(buttons[14] = new GuiButton(15, guiX + 5 + 50, guiY + 28 + 17 * 4, 20, 17, "+")); + + buttonList.add(buttons[15] = new GuiButton(16, guiX + 1, guiY + 29 + 17 * 5, 20, 17, "-")); + buttonList.add(buttons[16] = new GuiButton(17, guiX + 3 + 20, guiY + 29 + 17 * 5, 30, 17, "0")); + buttonList.add(buttons[17] = new GuiButton(18, guiX + 5 + 50, guiY + 29 + 17 * 5, 20, 17, "+")); + + } + + @Override + protected void drawGuiContainerForegroundLayer(int p1, int p2) + { + buttons[1].displayString = "" + pipe.distData[0]; + buttons[4].displayString = "" + pipe.distData[1]; + buttons[7].displayString = "" + pipe.distData[2]; + buttons[10].displayString = "" + pipe.distData[3]; + buttons[13].displayString = "" + pipe.distData[4]; + buttons[16].displayString = "" + pipe.distData[5]; + + fontRenderer.drawString(I18n.format("gui.distribution_pipe.title"), guiX + 42, guiY + 22, 4210752); + } + + @Override + protected void actionPerformed(GuiButton guibutton) + { + int index = (guibutton.id - 1) / 3; + + int newData = pipe.distData[index]; + if((guibutton.id - 1) % 3 == 0) + { + newData--; + } + else + { + newData++; + } + + if(newData < 0) + { + return; + } + + // make sure that one of the distData[] elements is at least 1 + boolean nonZeroFound = newData > 0; + + if(!nonZeroFound) + { + for(int i = 0; i < pipe.distData.length; i++) + { + if(i != index && pipe.distData[i] > 0) + { + nonZeroFound = true; + } + } + } + + if(nonZeroFound) + { + // save data and send packet + pipe.distData[index] = newData; + MessageDistPipe message = new MessageDistPipe(pipe.getPos(), (byte) index, newData); + PacketHandler.INSTANCE.sendToServer(message); + } + + + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(Textures.GUI_DISTRIBUTION); + int j = (width - xSize) / 2; + int k = (height - ySize) / 2; + drawTexturedModalRect(j, k, 0, 0, xSize, ySize); + + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiHandler.java b/src/main/java/buildcraft/additionalpipes/gui/GuiHandler.java new file mode 100644 index 00000000..444ade9f --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiHandler.java @@ -0,0 +1,81 @@ +package buildcraft.additionalpipes.gui; + +import buildcraft.additionalpipes.pipes.PipeBehaviorAdvWood; +import buildcraft.additionalpipes.pipes.PipeBehaviorClosed; +import buildcraft.additionalpipes.pipes.PipeBehaviorDistribution; +import buildcraft.additionalpipes.pipes.PipeBehaviorJeweled; +import buildcraft.additionalpipes.pipes.PipeBehaviorPriorityInsertion; +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleport; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.IGuiHandler; + +public class GuiHandler implements IGuiHandler { + // Gui IDs + public static final int PIPE_TP = 1; + public static final int PIPE_DIST = 2; + public static final int PIPE_WOODEN_ADV = 3; + public static final int PIPE_CLOSED = 4; + public static final int PIPE_PRIORITY = 5; + public static final int PIPE_JEWELED = 6; + + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + if(tile == null) { + return null; + } + + Log.debug("Opening Container " + ID + " on the server"); + + switch(ID) { + case PIPE_TP: + return new ContainerTeleportPipe(player, (PipeBehaviorTeleport) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_DIST: + return new ContainerDistributionPipe((PipeBehaviorDistribution) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_WOODEN_ADV: + return new ContainerAdvancedWoodPipe(player, player.inventory, (PipeBehaviorAdvWood) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_CLOSED: + return new ContainerPipeClosed(player, (PipeBehaviorClosed) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_PRIORITY: + return new ContainerPriorityInsertionPipe((PipeBehaviorPriorityInsertion) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_JEWELED: + return new ContainerJeweledPipe(player.inventory, ((PipeBehaviorJeweled)((TilePipeHolder) tile).getPipe().getBehaviour())); + default: + return null; + } + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + if(tile == null) { + return null; + } + + Log.debug("Opening GUI " + ID + " on the client"); + + switch(ID) + { + case PIPE_TP: + return new GuiTeleportPipe(player, ((PipeBehaviorTeleport)((TilePipeHolder) tile).getPipe().getBehaviour())); + case PIPE_DIST: + return new GuiDistributionPipe((PipeBehaviorDistribution) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_WOODEN_ADV: + return new GuiAdvancedWoodPipe(player, player.inventory, (PipeBehaviorAdvWood) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_CLOSED: + return new GuiPipeClosed(player, (PipeBehaviorClosed) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_PRIORITY: + return new GuiPriorityInsertionPipe((PipeBehaviorPriorityInsertion) ((TilePipeHolder) tile).getPipe().getBehaviour()); + case PIPE_JEWELED: + return new GuiJeweledPipe(player.inventory, ((PipeBehaviorJeweled)((TilePipeHolder) tile).getPipe().getBehaviour())); + default: + return null; + } + } +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiJeweledPipe.java b/src/main/java/buildcraft/additionalpipes/gui/GuiJeweledPipe.java new file mode 100644 index 00000000..9f4fdf17 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiJeweledPipe.java @@ -0,0 +1,221 @@ +package buildcraft.additionalpipes.gui; + +import java.io.IOException; + +import org.lwjgl.opengl.GL11; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageJeweledPipeOptionsServer; +import buildcraft.additionalpipes.pipes.PipeBehaviorJeweled; +import buildcraft.additionalpipes.pipes.SideFilterData; +import buildcraft.additionalpipes.textures.Textures; +import buildcraft.additionalpipes.utils.Log; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiJeweledPipe extends GuiContainer +{ + //1-indexed, the first number is the start of the tab row + final public static int NUM_TABS = 6; + + //note: the first two ff's are the alpha value. + final static int[] tabColorsMain = {0xFFd0d0d0, 0xff3fc2ff, 0xff3e3ee0, 0xff44be4e, 0xfff0db00, 0xffd20000}; + + final static int[] tabColorsOutline = {0xFFFFFFFF, 0xff20a2d0, 0xff1111c0, 0xff259f2f, 0xffe0cb00, 0xffc20000}; + + + final int tabY = 14; + final int tabHeight = 11; + final int totalSpaceBetweenTabs = 7; //total space between tab strings + final int halfSpaceBetweenTabs = MathHelper.floor(totalSpaceBetweenTabs / 2.0); + final int tabOutlineWidth = 2; + + int[] tabEndX = new int[NUM_TABS + 1]; + + final static int BUTTON_ID_NBT = 1; + final static int BUTTON_ID_UNSORTED = 2; + final static int BUTTON_ID_METADATA = 3; + + GuiButtonOnOff buttonAcceptUnsorted; + GuiButtonOnOff buttonMatchNBT; + GuiButtonOnOff buttonMatchMetadata; + + int xStart; + int yStart; + + //this is here so that we don't have to cast it + ContainerJeweledPipe container; + + public GuiJeweledPipe(InventoryPlayer inventoryPlayer, PipeBehaviorJeweled pipe) + { + super(new ContainerJeweledPipe(inventoryPlayer, pipe)); + xSize = 202; + ySize = 211; + + container = (ContainerJeweledPipe) inventorySlots; + } + + @Override + protected void drawGuiContainerForegroundLayer(int x, int y) + { + String containerName = I18n.format("gui.jeweled_pipe.title"); + fontRenderer.drawString(containerName, xSize / 2 - fontRenderer.getStringWidth(containerName) / 2, 6, 4210752); + fontRenderer.drawString(I18n.format("container.inventory"), 8, ySize - 93, 4210752); + + String match = I18n.format("gui.jeweled_pipe.match"); + fontRenderer.drawString(match, 105, 94, 4210752); + + //draw the actual tabs + for(int tabNumber = 1; tabNumber <= NUM_TABS; ++tabNumber) + { + //make the selected tab taller + int startY = container.currentSide == tabNumber ? tabY - 3 : tabY; + + //draw outer rectangle + drawRect(tabEndX[tabNumber- 1], startY, tabEndX[tabNumber] - 1, tabY + tabHeight, tabColorsOutline[tabNumber - 1]); + //draw inner rectangle + drawRect(tabEndX[tabNumber- 1] + tabOutlineWidth, startY + tabOutlineWidth, tabEndX[tabNumber] - tabOutlineWidth - 1, tabY + tabHeight, tabColorsMain[tabNumber - 1]); + } + + //add the tab labels + for(int tabNumber = 1; tabNumber <= NUM_TABS; ++tabNumber) + { + String tabName = I18n.format("gui.jeweled_pipe.tab." + EnumFacing.VALUES[tabNumber - 1].getName2()); + + fontRenderer.drawString(tabName, tabEndX[tabNumber- 1] + halfSpaceBetweenTabs, tabY + 3, 4210752); + } + + } + + @Override + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) + { + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.getTextureManager().bindTexture(Textures.GUI_JEWELED); + + this.drawTexturedModalRect(xStart, yStart, 0, 0, xSize, ySize); + + this.mc.getTextureManager().bindTexture(Textures.GUI_OUTLINE_JEWELED[container.currentSide - 1]); + this.drawTexturedModalRect(xStart + 5, yStart + 25, 0, 0, 192, 86); + + } + + public void initGui() + { + super.initGui(); + + xStart = (width - xSize) / 2; + yStart = (height - ySize) / 2; + + tabEndX[0] = 15; + + //calculate the tab widths + for(int tabNumber = 1; tabNumber <= NUM_TABS; ++tabNumber) + { + String tabName = I18n.format("gui.jeweled_pipe.tab." + EnumFacing.VALUES[tabNumber - 1].toString().toLowerCase()); + + //record the width of this tab + tabEndX[tabNumber] = tabEndX[tabNumber- 1] + fontRenderer.getStringWidth(tabName) - 1 + totalSpaceBetweenTabs; + } + + //add the buttons + buttonAcceptUnsorted = new GuiButtonOnOff(BUTTON_ID_UNSORTED, xStart + 8, yStart + 88, 95, + container.pipeItemsJeweled.filterData[container.currentSide - 1].acceptsUnsortedItems(), + I18n.format("gui.jeweled_pipe.acceptUnsorted")); + buttonMatchNBT = new GuiButtonOnOff(BUTTON_ID_NBT, xStart + 135, yStart + 88, 30, + container.pipeItemsJeweled.filterData[container.currentSide - 1].matchNBT(), I18n.format("gui.jeweled_pipe.NBT")); + buttonMatchMetadata = new GuiButtonOnOff(BUTTON_ID_METADATA, xStart + 165, yStart + 88, 30, + container.pipeItemsJeweled.filterData[container.currentSide - 1].matchMetadata(), I18n.format("gui.jeweled_pipe.metadata")); + + buttonList.add(buttonAcceptUnsorted); + buttonList.add(buttonMatchNBT); + buttonList.add(buttonMatchMetadata); + } + + @Override + protected void mouseClicked(int x, int y, int button) throws IOException + { + if (button == 0) + { + int xDistance = x - (this.guiLeft + tabEndX[0]); + int yDistance = y - (this.guiTop + tabY); + + //check if click was on a tab box + if(xDistance >= 0 && xDistance <= tabEndX[tabEndX.length - 1]) + { + if(yDistance >= 0 && yDistance <= tabHeight) + { + //find the tab the user clicked on + for(byte tabNumber = 1; tabNumber <= NUM_TABS; ++tabNumber) + { + if(tabEndX[tabNumber] > x - guiLeft) + { + container.setFilterTab(tabNumber); + updateButtonsForTab(); + break; + } + } + } + } + } + + super.mouseClicked(x, y, button); + } + + /** + * Change the buttons' pressed states to match the options of the side currently set in the container. + * + * tabNumber is 1-indexed. + */ + public void updateButtonsForTab() + { + SideFilterData newFilter = container.pipeItemsJeweled.filterData[container.currentSide - 1]; + buttonAcceptUnsorted.setPressed(newFilter.acceptsUnsortedItems()); + buttonMatchNBT.setPressed(newFilter.matchNBT()); + buttonMatchMetadata.setPressed(newFilter.matchMetadata()); + } + + public void drawScreen(int mouseX, int mouseY, float partialTicks) + { + this.drawDefaultBackground(); + super.drawScreen(mouseX, mouseY, partialTicks); + this.renderHoveredToolTip(mouseX, mouseY); + } + + @Override + protected void actionPerformed(GuiButton button) + { + SideFilterData currentSideFilter = container.pipeItemsJeweled.filterData[container.currentSide - 1]; + if(button.id == BUTTON_ID_NBT) + { + currentSideFilter.setMatchNBT(!currentSideFilter.matchNBT()); + } + else if(button.id == BUTTON_ID_METADATA) + { + currentSideFilter.setMatchMetadata(!currentSideFilter.matchMetadata()); + } + else if(button.id == BUTTON_ID_UNSORTED) + { + currentSideFilter.setAcceptUnsortedItems(!currentSideFilter.acceptsUnsortedItems()); + } + else + { + Log.error("...What? Got an unknown button index in GuiJeweledPipe.actionPerfomed()"); + return; + } + ((GuiButtonOnOff)button).togglePressed(); + + //send the current filter data to the server + MessageJeweledPipeOptionsServer message = new MessageJeweledPipeOptionsServer(container.pipeItemsJeweled.getPos(), (byte) container.currentSide, currentSideFilter); + PacketHandler.INSTANCE.sendToServer(message); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiPipeClosed.java b/src/main/java/buildcraft/additionalpipes/gui/GuiPipeClosed.java new file mode 100644 index 00000000..db58a026 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiPipeClosed.java @@ -0,0 +1,43 @@ +package buildcraft.additionalpipes.gui; + +import org.lwjgl.opengl.GL11; + +import buildcraft.additionalpipes.pipes.PipeBehaviorClosed; +import buildcraft.additionalpipes.textures.Textures; +import buildcraft.lib.gui.GuiBC8; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiPipeClosed extends GuiBC8 { + + public GuiPipeClosed(EntityPlayer player, PipeBehaviorClosed pipe) + { + super(new ContainerPipeClosed(player, pipe)); + } + + @Override + protected void drawForegroundLayer() + { + fontRenderer.drawString(I18n.format("gui.closed_pipe.title"), guiLeft + 60, guiTop + 6, 4210752); + fontRenderer.drawString(I18n.format("container.inventory"), guiLeft + 8, guiTop + ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the + * items) + */ + @Override + protected void drawBackgroundLayer(float partialTicks) + { + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(Textures.DISPENSER); + int var5 = (width - xSize) / 2; + int var6 = (height - ySize) / 2; + drawTexturedModalRect(var5, var6, 0, 0, xSize, ySize); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiPriorityInsertionPipe.java b/src/main/java/buildcraft/additionalpipes/gui/GuiPriorityInsertionPipe.java new file mode 100644 index 00000000..15cc84bf --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiPriorityInsertionPipe.java @@ -0,0 +1,110 @@ +package buildcraft.additionalpipes.gui; + +import org.lwjgl.opengl.GL11; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessagePriorityPipe; +import buildcraft.additionalpipes.pipes.PipeBehaviorPriorityInsertion; +import buildcraft.additionalpipes.textures.Textures; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + + +@SideOnly(Side.CLIENT) +public class GuiPriorityInsertionPipe extends GuiContainer { + + protected int xSize; + protected int ySize; + private GuiButton[] buttons = new GuiButton[18]; + public int guiX = 0; + public int guiY = 0; + private final PipeBehaviorPriorityInsertion pipe; + + public GuiPriorityInsertionPipe(PipeBehaviorPriorityInsertion pipe) { + super(new ContainerPriorityInsertionPipe(pipe)); + this.pipe = pipe; + xSize = 132; + ySize = 130; + } + + @Override + public void initGui() { + super.initGui(); + // int bw = this.xSize - 20; + int guiX = (width - xSize) / 2 + 30; + int guiY = (height - ySize) / 2 - 10; + + buttonList.add(buttons[0] = new GuiButton(1, guiX + 6, guiY + 24, 20, 17, "-")); + buttonList.add(buttons[1] = new GuiButton(2, guiX + 8 + 20, guiY + 24, 30, 17, "0")); + buttonList.add(buttons[2] = new GuiButton(3, guiX + 10 + 50, guiY + 24, 20, 17, "+")); + + buttonList.add(buttons[3] = new GuiButton(4, guiX + 6, guiY + 25 + 17, 20, 17, "-")); + buttonList.add(buttons[4] = new GuiButton(5, guiX + 8 + 20, guiY + 25 + 17, 30, 17, "0")); + buttonList.add(buttons[5] = new GuiButton(6, guiX + 10 + 50, guiY + 25 + 17, 20, 17, "+")); + + buttonList.add(buttons[6] = new GuiButton(7, guiX + 6, guiY + 26 + 17 * 2, 20, 17, "-")); + buttonList.add(buttons[7] = new GuiButton(8, guiX + 8 + 20, guiY + 26 + 17 * 2, 30, 17, "0")); + buttonList.add(buttons[8] = new GuiButton(9, guiX + 10 + 50, guiY + 26 + 17 * 2, 20, 17, "+")); + + buttonList.add(buttons[9] = new GuiButton(10, guiX + 6, guiY + 27 + 17 * 3, 20, 17, "-")); + buttonList.add(buttons[10] = new GuiButton(11, guiX + 8 + 20, guiY + 27 + 17 * 3, 30, 17, "0")); + buttonList.add(buttons[11] = new GuiButton(12, guiX + 10 + 50, guiY + 27 + 17 * 3, 20, 17, "+")); + + buttonList.add(buttons[12] = new GuiButton(13, guiX + 6, guiY + 28 + 17 * 4, 20, 17, "-")); + buttonList.add(buttons[13] = new GuiButton(14, guiX + 8 + 20, guiY + 28 + 17 * 4, 30, 17, "0")); + buttonList.add(buttons[14] = new GuiButton(15, guiX + 10 + 50, guiY + 28 + 17 * 4, 20, 17, "+")); + + buttonList.add(buttons[15] = new GuiButton(16, guiX + 6, guiY + 29 + 17 * 5, 20, 17, "-")); + buttonList.add(buttons[16] = new GuiButton(17, guiX + 8 + 20, guiY + 29 + 17 * 5, 30, 17, "0")); + buttonList.add(buttons[17] = new GuiButton(18, guiX + 10 + 50, guiY + 29 + 17 * 5, 20, 17, "+")); + + } + + @Override + protected void drawGuiContainerForegroundLayer(int p1, int p2) + { + for(int side = 0; side < EnumFacing.VALUES.length; ++side) + { + int buttonIndex = 3 * side + 1; + buttons[buttonIndex].displayString = "" + pipe.sidePriorities[side]; + + // display the button text in red if it is zero, indicating that the side is completely disabled + buttons[buttonIndex].packedFGColour = pipe.sidePriorities[side] == 0 ? 0xa04e4e : 0xe0e0e0; + } + + fontRenderer.drawString(I18n.format("gui.priority_insertion.title"), guiX + 33, guiY + 22, 4210752); + } + + @Override + protected void actionPerformed(GuiButton guibutton) { + int index = (guibutton.id - 1) / 3; + byte newData = pipe.sidePriorities[index]; + if((guibutton.id - 1) % 3 == 0) { + newData--; + } else { + newData++; + } + + if(newData < 0 || newData > 6) + return; + + MessagePriorityPipe message = new MessagePriorityPipe(pipe.getPos(), (byte) index, newData); + PacketHandler.INSTANCE.sendToServer(message); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(Textures.GUI_PRIORITY); + int j = (width - xSize) / 2; + int k = (height - ySize) / 2; + drawTexturedModalRect(j, k, 0, 0, xSize, ySize); + + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/gui/GuiTeleportPipe.java b/src/main/java/buildcraft/additionalpipes/gui/GuiTeleportPipe.java new file mode 100644 index 00000000..e23122a8 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/gui/GuiTeleportPipe.java @@ -0,0 +1,176 @@ +package buildcraft.additionalpipes.gui; + +import org.lwjgl.opengl.GL11; + +import buildcraft.additionalpipes.network.PacketHandler; +import buildcraft.additionalpipes.network.message.MessageTelePipeUpdate; +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleport; +import buildcraft.additionalpipes.textures.Textures; +import buildcraft.lib.BCLibSprites; +import buildcraft.lib.gui.GuiBC8; +import buildcraft.lib.gui.GuiIcon; +import buildcraft.lib.gui.ledger.Ledger_Neptune; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiTeleportPipe extends GuiBC8 { + + protected class TeleportPipeLedger extends Ledger_Neptune + { + + int headerColour = 0xe1c92f; + int subheaderColour = 0xaaafb8; + int textColour = 0x000000; + + final static int OVERLAY_COLOR = 0xffd46c1f; + + public TeleportPipeLedger() { + super(GuiTeleportPipe.this.mainGui, OVERLAY_COLOR, true); + this.title = "gui.teleport.ledger.title"; + + appendText(() -> ((pipe.state & 0x1) >= 1) ? I18n.format("gui.teleport.ledger.outputs", container.connectedPipes) : I18n.format("gui.teleport.ledger.inputs", container.connectedPipes), headerColour); + + // print up to the first 3 connected pipes, with 3 coords each + for(int coordIndex = 0; coordIndex < 3; coordIndex += 3) + { + final int capturedIdx = coordIndex; + appendText( () -> + { + StringBuilder text = new StringBuilder(); + if(pipe.network.length >= capturedIdx + 2) + { + text.append("(").append(pipe.network[capturedIdx]).append(", ").append(pipe.network[capturedIdx + 1]).append(", ").append(pipe.network[capturedIdx + 2]).append(")"); + } + + return text.toString(); + }, textColour); + } + + + calculateMaxSize(); + + } + + @Override + protected void drawIcon(double x, double y) + { + GuiIcon.draw(BCLibSprites.ENGINE_ACTIVE, x, y, x + 16, y + 16); + } + + } + + private final PipeBehaviorTeleport pipe; + private final ContainerTeleportPipe container; + private final GuiButton[] buttons = new GuiButton[8]; + + public GuiTeleportPipe(EntityPlayer player, PipeBehaviorTeleport pipe) { + super(new ContainerTeleportPipe(player, pipe)); + this.pipe = pipe; + container = (ContainerTeleportPipe) inventorySlots; + xSize = 228; + ySize = 117; + + mainGui.shownElements.add(new TeleportPipeLedger()); + } + + @Override + public void initGui() { + super.initGui(); + int x = (width - xSize) / 2; + int bw = xSize - 24; + + final int freqButtonTop = 78; + + buttonList.add(buttons[0] = new GuiButton(1, x + 12, guiTop + freqButtonTop, bw / 6, 20, "-100")); + buttonList.add(buttons[1] = new GuiButton(2, x + 12 + bw / 6, guiTop + freqButtonTop, bw / 6, 20, "-10")); + buttonList.add(buttons[2] = new GuiButton(3, x + 12 + bw * 2 / 6, guiTop + freqButtonTop, bw / 6, 20, "-1")); + buttonList.add(buttons[3] = new GuiButton(4, x + 12 + bw * 3 / 6, guiTop + freqButtonTop, bw / 6, 20, "+1")); + buttonList.add(buttons[4] = new GuiButton(5, x + 12 + bw * 4 / 6, guiTop + freqButtonTop, bw / 6, 20, "+10")); + buttonList.add(buttons[5] = new GuiButton(6, x + 12 + bw * 5 / 6, guiTop + freqButtonTop, bw / 6, 20, "+100")); + + buttonList.add(buttons[6] = new GuiButton(7, x + 12, guiTop + 35, bw / 2, 20, "")); + buttonList.add(buttons[7] = new GuiButton(8, x + 12 + bw * 3 / 6, guiTop + 35, bw / 2, 20, "")); + } + + @Override + protected void drawForegroundLayer() + { + fontRenderer.drawString(I18n.format(pipe.getUnlocalizedName()), guiLeft + 70, guiTop + 6, 0x0a0c84, false); + fontRenderer.drawString(I18n.format("gui.teleport.frequency", pipe.getFrequency()), guiLeft + 16, guiTop + 66, 0x404040); + fontRenderer.drawString(I18n.format("gui.teleport.coordPair", pipe.getPos().getX(), pipe.getPos().getY(), pipe.getPos().getZ()), guiLeft + 110, guiTop + 20, 0x404040); + + fontRenderer.drawString(I18n.format("gui.teleport.ledger.owner", pipe.ownerName), guiLeft + 12, guiTop + 20, 0x404040); + + switch(pipe.state) { + case 3: + buttons[6].displayString = I18n.format("gui.teleport.send_and_receive"); + break; + case 2: + buttons[6].displayString = I18n.format("gui.teleport.receive_only"); + break; + case 1: + buttons[6].displayString = I18n.format("gui.teleport.send_only"); + break; + default: + buttons[6].displayString = I18n.format("gui.teleport.disabled"); + break; + } + if(pipe.isPublic) { + buttons[7].displayString = I18n.format("gui.teleport.public"); + } else { + buttons[7].displayString = I18n.format("gui.teleport.private"); + } + } + + @Override + protected void actionPerformed(GuiButton guibutton) { + int freq = pipe.getFrequency(); + byte state = pipe.state; + boolean isPublic = pipe.isPublic; + switch(guibutton.id) { + case 1: + freq -= 100; + break; + case 2: + freq -= 10; + break; + case 3: + freq -= 1; + break; + case 4: + freq += 1; + break; + case 5: + freq += 10; + break; + case 6: + freq += 100; + break; + case 7: + state = (byte) ((state + 1) % 4); + break; + case 8: + isPublic = !isPublic; + break; + } + if(freq < 0) { + freq = 0; + } + + MessageTelePipeUpdate packet = new MessageTelePipeUpdate(pipe.getPos(), freq, isPublic, state); + PacketHandler.INSTANCE.sendToServer(packet); + } + + @Override + protected void drawBackgroundLayer(float partialTicks) + { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(Textures.GUI_TELEPORT); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/item/ItemDogDeaggravator.java b/src/main/java/buildcraft/additionalpipes/item/ItemDogDeaggravator.java new file mode 100644 index 00000000..1050d471 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/item/ItemDogDeaggravator.java @@ -0,0 +1,73 @@ +package buildcraft.additionalpipes.item; + +import java.util.Iterator; +import java.util.List; + +import javax.annotation.Nullable; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.sound.APSounds; +import buildcraft.additionalpipes.utils.Log; +import net.minecraft.client.resources.I18n; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.entity.passive.EntityWolf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ItemDogDeaggravator extends Item +{ + public static final String NAME = "dog_deaggravator"; + + public ItemDogDeaggravator() + { + setRegistryName(NAME); + setUnlocalizedName(NAME); + setCreativeTab(AdditionalPipes.instance.creativeTab); + setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) + { + //this code adapted from EntityAIHurtByTarget.startExecuting() + double horizontalRange = 16; + List list = world.getEntitiesWithinAABB(EntityWolf.class, new AxisAlignedBB(player.posX, player.posY + 1.0D, player.posZ, + player.posX, player.posY + 1.0D, player.posZ).grow(horizontalRange, 10.0D, horizontalRange)); + Iterator iterator = list.iterator(); + int wolfCounter = 0; + + while(iterator.hasNext()) + { + EntityWolf wolf = iterator.next(); + + if(wolf.isTamed() && wolf.isOnSameTeam(player)) + { + ++wolfCounter; + wolf.setAttackTarget(null); + } + } + + world.playSound(player, player.getPosition(), APSounds.dogDeaggravatorBell, SoundCategory.PLAYERS, 1, 1); + Log.debug("Cleared attack target on " + wolfCounter + " wolves."); + + return ActionResult.newResult(EnumActionResult.SUCCESS, hand == EnumHand.MAIN_HAND ? player.getHeldItemMainhand() : player.getHeldItemOffhand()); + + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, @Nullable World worldIn, List list, ITooltipFlag flagIn) + { + list.add(I18n.format("tooltip.dog_deaggravator")); + } + +} \ No newline at end of file diff --git a/src/main/java/buildcraft/additionalpipes/keyboard/KeyInputEventHandler.java b/src/main/java/buildcraft/additionalpipes/keyboard/KeyInputEventHandler.java new file mode 100644 index 00000000..c3384f44 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/keyboard/KeyInputEventHandler.java @@ -0,0 +1,35 @@ +package buildcraft.additionalpipes.keyboard; + +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.InputEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + + +@SideOnly(Side.CLIENT) +public class KeyInputEventHandler +{ + + @SubscribeEvent + public void handleKeyInputEvent(InputEvent.KeyInputEvent event) + { + if (FMLClientHandler.instance().getClient().inGameHasFocus) + { + if (FMLClientHandler.instance().getClientPlayerEntity() != null) + { + if(Keybindings.lasers.isPressed()) + { + /* + ChunkLoadViewDataProxy viewer = AdditionalPipes.instance.chunkLoadViewer; + if(!viewer.lasersActive()) + { + viewer.requestPersistentChunks(); + } + viewer.toggleLasers(); + */ + } + } + } + } +} diff --git a/src/main/java/buildcraft/additionalpipes/keyboard/Keybindings.java b/src/main/java/buildcraft/additionalpipes/keyboard/Keybindings.java new file mode 100644 index 00000000..b01d0779 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/keyboard/Keybindings.java @@ -0,0 +1,11 @@ +package buildcraft.additionalpipes.keyboard; + +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class Keybindings +{ + public static KeyBinding lasers; +} diff --git a/src/main/java/buildcraft/additionalpipes/network/PacketHandler.java b/src/main/java/buildcraft/additionalpipes/network/PacketHandler.java new file mode 100644 index 00000000..399444ce --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/PacketHandler.java @@ -0,0 +1,33 @@ +package buildcraft.additionalpipes.network; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.network.message.MessageAdvWoodPipe; +import buildcraft.additionalpipes.network.message.MessageDistPipe; +import buildcraft.additionalpipes.network.message.MessageJeweledPipeOptionsClient; +import buildcraft.additionalpipes.network.message.MessageJeweledPipeOptionsServer; +import buildcraft.additionalpipes.network.message.MessagePriorityPipe; +import buildcraft.additionalpipes.network.message.MessageTelePipeData; +import buildcraft.additionalpipes.network.message.MessageTelePipeUpdate; +import net.minecraftforge.fml.common.network.NetworkRegistry; +import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; +import net.minecraftforge.fml.relauncher.Side; + + +public class PacketHandler +{ + public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel(AdditionalPipes.MODID.toLowerCase()); + + public static void init() + { + INSTANCE.registerMessage(MessageDistPipe.class, MessageDistPipe.class, 0, Side.SERVER); + INSTANCE.registerMessage(MessageTelePipeUpdate.class, MessageTelePipeUpdate.class, 1, Side.SERVER); + INSTANCE.registerMessage(MessageAdvWoodPipe.class, MessageAdvWoodPipe.class, 2, Side.SERVER); + INSTANCE.registerMessage(MessageTelePipeData.class, MessageTelePipeData.class, 3, Side.CLIENT); + // INSTANCE.registerMessage(MessageChunkloadRequest.class, MessageChunkloadRequest.class, 4, Side.SERVER); + // INSTANCE.registerMessage(MessageChunkloadData.class, MessageChunkloadData.class, 5, Side.CLIENT); + INSTANCE.registerMessage(MessagePriorityPipe.class, MessagePriorityPipe.class, 6, Side.SERVER); + INSTANCE.registerMessage(MessageJeweledPipeOptionsServer.class, MessageJeweledPipeOptionsServer.class, 7, Side.SERVER); + INSTANCE.registerMessage(MessageJeweledPipeOptionsClient.class, MessageJeweledPipeOptionsClient.class, 8, Side.CLIENT); + + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageAdvWoodPipe.java b/src/main/java/buildcraft/additionalpipes/network/message/MessageAdvWoodPipe.java new file mode 100644 index 00000000..4b6c2864 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageAdvWoodPipe.java @@ -0,0 +1,66 @@ +package buildcraft.additionalpipes.network.message; + +import buildcraft.additionalpipes.pipes.PipeBehaviorAdvWood; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +/** + * Message that signals an AdvWoodenPipe to change its include/exclude state + * + */ +public class MessageAdvWoodPipe implements IMessage, IMessageHandler +{ + public BlockPos position; + public boolean exclude; + + public MessageAdvWoodPipe() + { + } + + public MessageAdvWoodPipe(BlockPos position, boolean exclude) + { + this.position = position; + this.exclude = exclude; + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + exclude = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + buf.writeBoolean(exclude); + } + + @Override + public IMessage onMessage(MessageAdvWoodPipe message, MessageContext ctx) + { + World world = ctx.getServerHandler().player.getEntityWorld(); + TileEntity te = world.getTileEntity(message.position); + + if(te instanceof TilePipeHolder) { + PipeBehaviorAdvWood pipe = (PipeBehaviorAdvWood) ((TilePipeHolder) te).getPipe().getBehaviour(); + + pipe.setExclude(message.exclude); + } + + return null; + } + + @Override + public String toString() + { + return "MessageAdvWoodPipe"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageChunkloadData.java.disabled b/src/main/java/buildcraft/additionalpipes/network/message/MessageChunkloadData.java.disabled new file mode 100644 index 00000000..222d5045 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageChunkloadData.java.disabled @@ -0,0 +1,63 @@ +package buildcraft.additionalpipes.network.message; + +import java.util.HashSet; + +import buildcraft.additionalpipes.AdditionalPipes; +import io.netty.buffer.ByteBuf; +import net.minecraft.util.math.ChunkPos; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +public class MessageChunkloadData implements IMessage, IMessageHandler +{ + HashSet _chunksInRange; + + public MessageChunkloadData() + { + } + + public MessageChunkloadData(HashSet chunksInRange) + { + _chunksInRange = chunksInRange; + } + + @Override + public IMessage onMessage(MessageChunkloadData message, MessageContext ctx) + { + AdditionalPipes.instance.chunkLoadViewer.receivePersistentChunks(message._chunksInRange); + + return null; + } + + @Override + public String toString() + { + return "MessageChunkloadData"; + } + + @Override + public void fromBytes(ByteBuf buf) + { + int _chunksInRangeLength = buf.readInt(); + + _chunksInRange = new HashSet(_chunksInRangeLength); + + for(int counter = 0; counter < _chunksInRangeLength; ++counter) + { + _chunksInRange.add(new ChunkPos(buf.readInt(), buf.readInt())); + } + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeInt(_chunksInRange.size()); + + for(ChunkPos pair : _chunksInRange) + { + buf.writeInt(pair.chunkXPos); + buf.writeInt(pair.chunkZPos); + } + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageChunkloadRequest.java.disabled b/src/main/java/buildcraft/additionalpipes/network/message/MessageChunkloadRequest.java.disabled new file mode 100644 index 00000000..f4c1e410 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageChunkloadRequest.java.disabled @@ -0,0 +1,40 @@ +package buildcraft.additionalpipes.network.message; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import buildcraft.additionalpipes.AdditionalPipes; + +public class MessageChunkloadRequest implements IMessage, IMessageHandler +{ + public MessageChunkloadRequest() + { + } + + @Override + public IMessage onMessage(MessageChunkloadRequest message, MessageContext ctx) + { + AdditionalPipes.instance.chunkLoadViewer.sendPersistentChunksToPlayer(ctx.getServerHandler().playerEntity); + + return null; + } + + @Override + public String toString() + { + return "MessageChunkloadRequest"; + } + + @Override + public void fromBytes(ByteBuf buf) { + //Empty + + } + + @Override + public void toBytes(ByteBuf buf) { + //Empty + + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageDistPipe.java b/src/main/java/buildcraft/additionalpipes/network/message/MessageDistPipe.java new file mode 100644 index 00000000..d3b47389 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageDistPipe.java @@ -0,0 +1,89 @@ +package buildcraft.additionalpipes.network.message; + +import buildcraft.additionalpipes.pipes.PipeBehaviorDistribution; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +/** + * Message that sets the properties of a Distribution Pipe from the GUI + * + */ +public class MessageDistPipe implements IMessage, IMessageHandler +{ + public BlockPos position; + byte _index; + int _newData; + + public MessageDistPipe() + { + } + + public MessageDistPipe(BlockPos position, byte index, int newData) + { + this.position = position; + _index = index; + _newData = newData; + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + _index = buf.readByte(); + _newData = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + buf.writeByte(_index); + buf.writeInt(_newData); + } + + @Override + public IMessage onMessage(MessageDistPipe message, MessageContext ctx) + { + + World world = ctx.getServerHandler().player.getEntityWorld(); + TileEntity te = world.getTileEntity(message.position); + if(te instanceof TilePipeHolder) + { + PipeBehaviorDistribution pipe = (PipeBehaviorDistribution) ((TilePipeHolder) te).getPipe().getBehaviour(); + + if(message._newData >= 0 && message._index >= 0 && message._index < pipe.distData.length) + { + // make sure that there would still be a 1 in at least one distData element + pipe.distData[message._index] = message._newData; + boolean found = message._newData > 0; + if(!found) { + for(int i = 0; i < pipe.distData.length; i++) { + if(pipe.distData[i] > 0) { + found = true; + } + } + } + if(!found) { + for(int i = 0; i < pipe.distData.length; i++) { + pipe.distData[i] = 1; + } + } + + } + } + + return null; + } + + @Override + public String toString() + { + return "MessageDistPipe"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageJeweledPipeOptionsClient.java b/src/main/java/buildcraft/additionalpipes/network/message/MessageJeweledPipeOptionsClient.java new file mode 100644 index 00000000..4f4a455e --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageJeweledPipeOptionsClient.java @@ -0,0 +1,99 @@ +package buildcraft.additionalpipes.network.message; + +import buildcraft.additionalpipes.gui.GuiJeweledPipe; +import buildcraft.additionalpipes.pipes.PipeBehaviorJeweled; +import buildcraft.additionalpipes.pipes.SideFilterData; +import buildcraft.additionalpipes.utils.NetworkUtils; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + + +/** + * Message that sets the three option booleans of a Jeweled Pipe + * + */ +public class MessageJeweledPipeOptionsClient implements IMessage, IMessageHandler +{ + BlockPos position; + boolean[] acceptUnsorted; + boolean[] matchNBT; + boolean[] matchMeta; + + public MessageJeweledPipeOptionsClient() + { + } + + public MessageJeweledPipeOptionsClient(BlockPos position, SideFilterData[] sideFilters) + { + this.position = position; + + acceptUnsorted = new boolean[GuiJeweledPipe.NUM_TABS]; + matchNBT = new boolean[GuiJeweledPipe.NUM_TABS]; + matchMeta = new boolean[GuiJeweledPipe.NUM_TABS]; + + for(int sideNumber = 0; sideNumber < GuiJeweledPipe.NUM_TABS; ++sideNumber) + { + acceptUnsorted[sideNumber] = sideFilters[sideNumber].acceptsUnsortedItems(); + matchNBT[sideNumber] = sideFilters[sideNumber].matchNBT(); + matchMeta[sideNumber] = sideFilters[sideNumber].matchMetadata(); + } + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + acceptUnsorted = NetworkUtils.readBooleanArray(buf, GuiJeweledPipe.NUM_TABS); + matchNBT = NetworkUtils.readBooleanArray(buf, GuiJeweledPipe.NUM_TABS); + matchMeta = NetworkUtils.readBooleanArray(buf, GuiJeweledPipe.NUM_TABS); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + NetworkUtils.writeBooleanArray(buf, acceptUnsorted); + NetworkUtils.writeBooleanArray(buf, matchNBT); + NetworkUtils.writeBooleanArray(buf, matchMeta); + } + + @Override + public IMessage onMessage(MessageJeweledPipeOptionsClient message, MessageContext ctx) + { + + TileEntity te = FMLClientHandler.instance().getClient().world.getTileEntity(message.position); + if(te instanceof TilePipeHolder) + { + PipeBehaviorJeweled pipe = (PipeBehaviorJeweled) ((TilePipeHolder) te).getPipe().getBehaviour(); + + for(int sideNumber = 0; sideNumber < GuiJeweledPipe.NUM_TABS; ++sideNumber) + { + pipe.filterData[sideNumber].setAcceptUnsortedItems(message.acceptUnsorted[sideNumber]); + pipe.filterData[sideNumber].setMatchNBT(message.matchNBT[sideNumber]); + pipe.filterData[sideNumber].setMatchMetadata(message.matchMeta[sideNumber]); + } + + //update client GUI to reflect the new options + GuiScreen currentScreen = FMLClientHandler.instance().getClient().currentScreen; + if(currentScreen != null && currentScreen instanceof GuiJeweledPipe) + { + ((GuiJeweledPipe)currentScreen).updateButtonsForTab(); + } + } + + return null; + } + + @Override + public String toString() + { + return "MessageJeweledPipe"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageJeweledPipeOptionsServer.java b/src/main/java/buildcraft/additionalpipes/network/message/MessageJeweledPipeOptionsServer.java new file mode 100644 index 00000000..7c1b2f49 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageJeweledPipeOptionsServer.java @@ -0,0 +1,84 @@ +package buildcraft.additionalpipes.network.message; + +import buildcraft.additionalpipes.pipes.PipeBehaviorJeweled; +import buildcraft.additionalpipes.pipes.SideFilterData; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +/** + * Message that sets the three option booleans of a Jeweled Pipe on the client for a single side + * + */ +public class MessageJeweledPipeOptionsServer implements IMessage, IMessageHandler +{ + public BlockPos position; + byte index; //1-indexed index of filter data that we are updating + + boolean acceptUnsorted; + boolean matchNBT; + boolean matchMeta; + public MessageJeweledPipeOptionsServer() + { + } + + public MessageJeweledPipeOptionsServer(BlockPos position, byte index, SideFilterData filterData) + { + this.position = position; + this.index = index; + + acceptUnsorted = filterData.acceptsUnsortedItems(); + matchMeta = filterData.matchMetadata(); + matchNBT = filterData.matchNBT(); + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + index = buf.readByte(); + acceptUnsorted = buf.readBoolean(); + matchNBT = buf.readBoolean(); + matchMeta = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + buf.writeByte(index); + buf.writeBoolean(acceptUnsorted); + buf.writeBoolean(matchNBT); + buf.writeBoolean(matchMeta); + } + + @Override + public IMessage onMessage(MessageJeweledPipeOptionsServer message, MessageContext ctx) + { + + World world = ctx.getServerHandler().player.getEntityWorld(); + TileEntity te = world.getTileEntity(message.position); + if(te instanceof TilePipeHolder) + { + PipeBehaviorJeweled pipe = (PipeBehaviorJeweled) ((TilePipeHolder) te).getPipe().getBehaviour(); + + SideFilterData dataToUpdate = pipe.filterData[message.index - 1]; + dataToUpdate.setAcceptUnsortedItems(message.acceptUnsorted); + dataToUpdate.setMatchNBT(message.matchNBT); + dataToUpdate.setMatchMetadata(message.matchMeta); + } + + return null; + } + + @Override + public String toString() + { + return "MessageJeweledPipeOptionsServer"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessagePriorityPipe.java b/src/main/java/buildcraft/additionalpipes/network/message/MessagePriorityPipe.java new file mode 100644 index 00000000..44eb7f6c --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessagePriorityPipe.java @@ -0,0 +1,88 @@ +package buildcraft.additionalpipes.network.message; + +import buildcraft.additionalpipes.pipes.PipeBehaviorPriorityInsertion; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + + +/** + * Message that sets the properties of a Distribution Pipe from the GUI + * + */ +public class MessagePriorityPipe implements IMessage, IMessageHandler +{ + public BlockPos position; + byte _index; + byte _newData; + + public MessagePriorityPipe() + { + } + + public MessagePriorityPipe(BlockPos position, byte index, byte newData) + { + this.position = position; + _index = index; + _newData = newData; + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + _index = buf.readByte(); + _newData = buf.readByte(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + buf.writeByte(_index); + buf.writeByte(_newData); + } + + @Override + public IMessage onMessage(MessagePriorityPipe message, MessageContext ctx) + { + + World world = ctx.getServerHandler().player.getEntityWorld(); + TileEntity te = world.getTileEntity(message.position); + if(te instanceof TilePipeHolder) + { + PipeBehaviorPriorityInsertion pipe = (PipeBehaviorPriorityInsertion) ((TilePipeHolder) te).getPipe().getBehaviour(); + + if(message._newData >= 0 && message._index >= 0 && message._index < pipe.sidePriorities.length) { + pipe.sidePriorities[message._index] = message._newData; + boolean found = message._newData > 0; + if(!found) { + for(int i = 0; i < pipe.sidePriorities.length; i++) { + if(pipe.sidePriorities[i] > 0) { + found = true; + } + } + } + if(!found) { + for(int i = 0; i < pipe.sidePriorities.length; i++) { + pipe.sidePriorities[i] = 1; + } + } + + } + } + + return null; + } + + @Override + public String toString() + { + return "MessagePriorityPipe"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageTelePipeData.java b/src/main/java/buildcraft/additionalpipes/network/message/MessageTelePipeData.java new file mode 100644 index 00000000..e027e677 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageTelePipeData.java @@ -0,0 +1,83 @@ +package buildcraft.additionalpipes.network.message; + +import java.util.UUID; + +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleport; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.client.FMLClientHandler; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +public class MessageTelePipeData implements IMessage, IMessageHandler +{ + public BlockPos position; + public int[] locations; + public String ownerUUID; + public String ownerName; + + public MessageTelePipeData() + { + } + + public MessageTelePipeData(BlockPos position, int[] locations, UUID ownerUUID, String ownerName) + { + this.position = position; + this.locations = locations; + this.ownerUUID = ownerUUID.toString(); + this.ownerName = ownerName; + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + int locationsLength = buf.readInt(); + + this.locations = new int[locationsLength]; + + for(int counter = 0; counter < locationsLength; ++counter) + { + locations[counter] = buf.readInt(); + } + + ownerUUID = ByteBufUtils.readUTF8String(buf); + ownerName = ByteBufUtils.readUTF8String(buf); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + buf.writeInt(locations.length); + for(int location : locations) + { + buf.writeInt(location); + } + ByteBufUtils.writeUTF8String(buf, ownerUUID); + ByteBufUtils.writeUTF8String(buf, ownerName); + } + + @Override + public IMessage onMessage(MessageTelePipeData message, MessageContext ctx) + { + TileEntity te = FMLClientHandler.instance().getClient().world.getTileEntity(message.position); + + PipeBehaviorTeleport pipe = (PipeBehaviorTeleport) ((TilePipeHolder) te).getPipe().getBehaviour(); + pipe.ownerUUID = UUID.fromString(message.ownerUUID); + pipe.ownerName = message.ownerName; + pipe.network = message.locations; + + return null; + } + + @Override + public String toString() + { + return "MessageTelePipeData"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/network/message/MessageTelePipeUpdate.java b/src/main/java/buildcraft/additionalpipes/network/message/MessageTelePipeUpdate.java new file mode 100644 index 00000000..3189c5e1 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/network/message/MessageTelePipeUpdate.java @@ -0,0 +1,86 @@ +package buildcraft.additionalpipes.network.message; + +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleport; +import buildcraft.transport.tile.TilePipeHolder; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentString; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +/** + * Message that sets the properties of a Teleport Pipe from the GUI + * + */ +public class MessageTelePipeUpdate implements IMessage, IMessageHandler +{ + public BlockPos position; + int _freq; + boolean _isPublic; + byte _state; + int _newData; + + public MessageTelePipeUpdate() + { + } + + public MessageTelePipeUpdate(BlockPos position, int freq, boolean isPublic, byte index) + { + this.position = position; + _freq = freq; + _isPublic = isPublic; + _state = index; + } + + @Override + public void fromBytes(ByteBuf buf) + { + position = BlockPos.fromLong(buf.readLong()); + _freq = buf.readInt(); + _isPublic = buf.readBoolean(); + _state = buf.readByte(); + } + + @Override + public void toBytes(ByteBuf buf) + { + buf.writeLong(position.toLong()); + buf.writeInt(_freq); + buf.writeBoolean(_isPublic); + buf.writeByte(_state); + } + + @Override + public IMessage onMessage(MessageTelePipeUpdate message, MessageContext ctx) + { + TileEntity te = ctx.getServerHandler().player.getEntityWorld().getTileEntity(message.position); + if(te instanceof TilePipeHolder) { + PipeBehaviorTeleport pipe = (PipeBehaviorTeleport) ((TilePipeHolder) te).getPipe().getBehaviour(); + // only allow the owner to change pipe state + EntityPlayerMP entityPlayer = (EntityPlayerMP) ctx.getServerHandler().player; + if(!PipeBehaviorTeleport.canPlayerModifyPipe(entityPlayer, pipe)) + { + entityPlayer.sendMessage(new TextComponentString("Sorry, You may not change pipe state.")); + return null; + } + int frequency = message._freq; + if(frequency < 0) { + frequency = 0; + } + pipe.setFrequency(frequency); + pipe.state = (byte) message._state; + pipe.isPublic = message._isPublic; + } + + return null; + } + + @Override + public String toString() + { + return "MessageTelePipeUpdate"; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/APPipe.java b/src/main/java/buildcraft/additionalpipes/pipes/APPipe.java new file mode 100644 index 00000000..bd5ed8da --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/APPipe.java @@ -0,0 +1,83 @@ +package buildcraft.additionalpipes.pipes; + +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeBehaviour; +import buildcraft.transport.pipe.flow.PipeFlowItems; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; + +public abstract class APPipe extends PipeBehaviour +{ + public APPipe(IPipe pipe) { + super(pipe); + } + + public APPipe(IPipe pipe, NBTTagCompound nbt) { + super(pipe, nbt); + } + + /** + * Inject an item into the pipe. Don't call this if the pipe isn't an item pipe! + * + * @param toInject the ItemStack to inject + * @param fromSide the side that the item should come from. + * @return the items that could not be injected for whatever reason + */ + protected ItemStack injectItem(ItemStack toInject, EnumFacing fromSide) + { + return ((PipeFlowItems)pipe.getFlow()).injectItem(toInject, true, fromSide.getOpposite(), null, .1f); + } + + /** + * Shorthand to get position of pipe + */ + public BlockPos getPos() + { + if(pipe!= null && pipe.getHolder() != null) + { + return pipe.getHolder().getPipePos(); + } + else + { + return null; + } + } + + /** + * + * @return The translation key for the localized name of the pipe + */ + public String getUnlocalizedName() + { + return "item.pipe.ap." + pipe.getDefinition().identifier.getResourcePath() + ".name"; + } + + /** + * Returns true if this behavior is instantiated on the client + * @return + */ + protected boolean isClient() + { + if(pipe == null) + { + return false; + } + return pipe.getHolder().getPipeWorld().isRemote; + } + + /** + * Returns true if this behavior is instantiated on a dedicated or integrated server + * @return + */ + protected boolean isServer() + { + if(pipe == null) + { + return false; + } + + return !pipe.getHolder().getPipeWorld().isRemote; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorAddition.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorAddition.java new file mode 100644 index 00000000..8c4967c2 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorAddition.java @@ -0,0 +1,62 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import buildcraft.api.inventory.IItemTransactor; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipe.ConnectedType; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.lib.inventory.ItemTransactorHelper; +import buildcraft.lib.inventory.filter.ArrayStackFilter; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class PipeBehaviorAddition extends APPipe +{ + + public PipeBehaviorAddition(IPipe pipe) { + super(pipe); + } + + public PipeBehaviorAddition(IPipe pipe, NBTTagCompound nbt) { + super(pipe, nbt); + } + + @PipeEventHandler + public void orderSides(PipeEventItem.SideCheck ordering) { + for (EnumFacing face : EnumFacing.VALUES) + { + if(face != ordering.from) + { + ConnectedType type = pipe.getConnectedType(face); + if (type == ConnectedType.TILE) + { + IItemTransactor trans = ItemTransactorHelper.getTransactor(pipe.getConnectedTile(face), face.getOpposite()); + ItemStack possible = trans.extract(new ArrayStackFilter(ordering.stack), 1, 1, true); + + if(!possible.isEmpty()) + { + // cause the pipe to prefer this face above all others + ordering.increasePriority(face, 100); + } + else + { + ordering.decreasePriority(face, 100); + } + + + } + } + + } + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorAdvWood.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorAdvWood.java new file mode 100644 index 00000000..935e0911 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorAdvWood.java @@ -0,0 +1,151 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.additionalpipes.utils.InventoryUtils; +import buildcraft.additionalpipes.utils.ItemHandlerPresenceFilter; +import buildcraft.api.core.EnumPipePart; +import buildcraft.api.core.IStackFilter; +import buildcraft.api.transport.pipe.IFlowItems; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipeHolder.PipeMessageReceiver; +import buildcraft.lib.misc.EntityUtil; +import buildcraft.transport.pipe.behaviour.PipeBehaviourWood; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class PipeBehaviorAdvWood extends PipeBehaviourWood implements ICapabilityProvider +{ + public PipeBehaviorAdvWood(IPipe pipe) { + super(pipe); + initFilter(); + } + + public PipeBehaviorAdvWood(IPipe pipe, NBTTagCompound nbt) { + super(pipe, nbt); + + setExclude(nbt.getBoolean("exclude")); + items.deserializeNBT(nbt.getCompoundTag("filterItems")); + } + + public static final int INVENTORY_SIZE = 9; + public ItemStackHandler items = new ItemStackHandler(INVENTORY_SIZE); + private IStackFilter filter; + + private boolean exclude = false; + + /** + * Creates the filter using the current value of exclude + */ + private void initFilter() + { + filter = new ItemHandlerPresenceFilter(items, exclude); + } + + /** + * Sets whether the pipe should be in exclude/blacklist mode, or include/whitelist mode + * @param exclude + */ + public void setExclude(boolean exclude) + { + this.exclude = exclude; + initFilter(); + } + + public boolean getExclude() + { + return exclude; + } + + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbttagcompound = super.writeToNbt(); + + nbttagcompound.setBoolean("exclude", exclude); + + nbttagcompound.setTag("filterItems", items.serializeNBT()); + + return nbttagcompound; + } + + /** + * Override the wooden pipe's extraction behavior to use our filter + */ + @Override + protected int extractItems(IFlowItems flow, EnumFacing dir, int count, boolean simulate) { + + int extracted = flow.tryExtractItems(count, dir, null, filter, simulate); + if (extracted > 0 && !simulate) { + pipe.getHolder().scheduleNetworkUpdate(PipeMessageReceiver.BEHAVIOUR); + } + return extracted; + } + + @Override + public void addDrops(NonNullList toDrop, int fortune) + { + super.addDrops(toDrop, fortune); + toDrop.addAll(InventoryUtils.getItems(items)); + } + + @Override + public boolean onPipeActivate(EntityPlayer player, RayTraceResult trace, float hitX, float hitY, float hitZ, EnumPipePart part) + { + if (EntityUtil.getWrenchHand(player) != null) + { + return super.onPipeActivate(player, trace, hitX, hitY, hitZ, part); + } + + if (player.isServerWorld()) + { + BlockPos pipePos = pipe.getHolder().getPipePos(); + player.openGui(AdditionalPipes.instance, GuiHandler.PIPE_WOODEN_ADV, pipe.getHolder().getPipeWorld(), pipePos.getX(), pipePos.getY(), pipePos.getZ()); + } + return true; + } + + @SuppressWarnings("unchecked") + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + return (T) items; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + return true; + } + + return super.hasCapability(capability, facing); + } + + + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorClosed.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorClosed.java new file mode 100644 index 00000000..96d739f3 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorClosed.java @@ -0,0 +1,201 @@ +package buildcraft.additionalpipes.pipes; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.additionalpipes.utils.InventoryUtils; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.core.EnumPipePart; +import buildcraft.api.inventory.IItemTransactor; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipeHolder.PipeMessageReceiver; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.lib.inventory.ItemTransactorHelper; +import buildcraft.lib.misc.EntityUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +public class PipeBehaviorClosed extends APPipe implements ICapabilityProvider { + + // note: if you change this, you will also have to change the GUI code + public static final int INVENTORY_SIZE = 9; + + ItemStackHandler inventory = new ItemStackHandler(INVENTORY_SIZE); + + // true if the pipe has any "stuffed" (to use the Thermal Expansion term) items, and should display the appropriate texture. + // calculated on the server, gets updated through the network on the client + boolean isClosed; + + public boolean isClosed() + { + return isClosed; + } + + public PipeBehaviorClosed(IPipe pipe) + { + super(pipe); + } + + public PipeBehaviorClosed(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + + inventory.deserializeNBT(nbt.getCompoundTag("closedInventory")); + + if(isServer()) + { + updateClosedStatus(); + } + } + + @Override + public boolean onPipeActivate(EntityPlayer player, RayTraceResult trace, float hitX, float hitY, float hitZ, EnumPipePart part) + { + if (EntityUtil.getWrenchHand(player) != null) + { + return super.onPipeActivate(player, trace, hitX, hitY, hitZ, part); + } + + if (!player.world.isRemote) + { + BlockPos pipePos = pipe.getHolder().getPipePos(); + player.openGui(AdditionalPipes.instance, GuiHandler.PIPE_CLOSED, pipe.getHolder().getPipeWorld(), pipePos.getX(), pipePos.getY(), pipePos.getZ()); + } + return true; + } + + @Override + public void addDrops(NonNullList toDrop, int fortune) + { + super.addDrops(toDrop, fortune); + toDrop.addAll(InventoryUtils.getItems(inventory)); + } + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbttagcompound = super.writeToNbt(); + + nbttagcompound.setTag("closedInventory", inventory.serializeNBT()); + + return nbttagcompound; + } + + @PipeEventHandler + public void onDrop(PipeEventItem.Drop event) + { + if(isClient()) + { + return; + } + + IItemTransactor transactor = ItemTransactorHelper.getTransactor(this, EnumFacing.UP); // note: face argument doesn't actually matter + ItemStack overflow = transactor.insert(event.getStack(), true, true); + + if(overflow != ItemStack.EMPTY) + { + // move every stack backward, and delete the last stack, to make room for the new stack + for(int i = INVENTORY_SIZE - 1; i > 1; --i) + { + inventory.setStackInSlot(i, inventory.getStackInSlot(i - 1)); + } + + inventory.setStackInSlot(0, ItemStack.EMPTY); + } + + // now guaranteed to work + transactor.insert(event.getStack(), false, false); + + event.setStack(ItemStack.EMPTY); + updateClosedStatus(); + } + + /** + * Call this on the server whenever the inventory contents change. + * Detects if there any items left in the pipe and updates clients about this so that the texture can change. + */ + public void updateClosedStatus() + { + + boolean newIsClosed = false; + + for(int i = 0; i < INVENTORY_SIZE; i++) + { + if(!inventory.getStackInSlot(i).isEmpty()) + { + newIsClosed = true; + break; + } + } + + if(newIsClosed != isClosed) + { + isClosed = newIsClosed; + pipe.getHolder().scheduleNetworkUpdate(PipeMessageReceiver.BEHAVIOUR); + } + } + + + @Override + public void writePayload(PacketBuffer buffer, Side side) + { + Log.debug("wrote payload"); + + buffer.writeBoolean(isClosed); + } + + @Override + public void readPayload(PacketBuffer buffer, Side side, MessageContext ctx) + { + Log.debug("read payload"); + + isClosed = buffer.readBoolean(); + pipe.markForUpdate(); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if(capability.equals(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)) + { + return true; + } + else + { + return super.hasCapability(capability, facing); + } + } + + @SuppressWarnings("unchecked") + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if(capability.equals(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)) + { + return (T) inventory; + } + else + { + return super.getCapability(capability, facing); + } + } + + @Override + public int getTextureIndex(EnumFacing direction) + { + return (isClosed ? 1 : 0); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorDistribution.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorDistribution.java new file mode 100644 index 00000000..378c999c --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorDistribution.java @@ -0,0 +1,262 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.core.EnumPipePart; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipeHolder.PipeMessageReceiver; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.api.transport.pipe.PipeEventItem.ItemEntry; +import buildcraft.lib.misc.EntityUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import net.minecraftforge.fml.relauncher.Side; + +public class PipeBehaviorDistribution extends APPipe { + + public int distData[] = { 1, 1, 1, 1, 1, 1 }; + public EnumFacing distSide = EnumFacing.UP; // will get initialized on first toNextOpenSide() call + public int itemsThisSide = Integer.MAX_VALUE; // normally ranges from 0 to distData[distSide] - 1 + + public PipeBehaviorDistribution(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + + itemsThisSide = nbt.getInteger("itemsThisSide"); + distSide = EnumFacing.VALUES[nbt.getInteger("distSide")]; + for(int i = 0; i < distData.length; i++) { + distData[i] = nbt.getInteger("distData" + i); + } + sanityCheck(); + } + + public PipeBehaviorDistribution(IPipe pipe) + { + super(pipe); + } + + @Override + public int getTextureIndex(EnumFacing connection) + { + if(connection == null) + { + return EnumFacing.EAST.ordinal(); + } + + return connection.ordinal(); + } + + /** + * @brief Event handler for the SideCheck event, which is called before the Split event. + */ + @PipeEventHandler + public void sideCheck(PipeEventItem.SideCheck sideCheckEvent) + { + // Disallow all sides that have a distData value of 0 (all items disallowed). + // This is important to do so that if all distData values for connected sides are 0, we will just drop the item as it has nowhere to go. + // Note that we could also "bounce" the item back out of the distribution pipe by handling the TryBounce event, but dropping them + // seems simpler for now. + for(int o = 0; o < distData.length; ++o) + { + if(distData[o] == 0) + { + sideCheckEvent.disallow(EnumFacing.VALUES[o]); + } + } + } + + @PipeEventHandler + public void splitStacks(PipeEventItem.Split splitEvent) + { + ArrayList newDistribution = new ArrayList<>(); + + + for(ItemEntry entry : splitEvent.items) + { + Log.debug("[PipeDistribution] current side: " + distSide.getName() + " items left this side: " + getItemsLeftThisSide()); + + if(entry.to == null) + { + entry.to = new ArrayList(); + } + + + if(getItemsLeftThisSide() > 0 && entry.stack.getCount() <= getItemsLeftThisSide()) + { + // easy + entry.to.clear(); + entry.to.add(distSide); + itemsThisSide += entry.stack.getCount(); + + newDistribution.add(entry); + } + else // if there are more items in this stack than there are left for this side, we will have to split the stack + { + while(entry.stack.getCount() > 0) + { + if(getItemsLeftThisSide() <= 0) + { + if(!toNextOpenSide()) + { + // *shouldn't* be possible to get here due to the sideCheck() event handler, but keeping this logic just in case as + // otherwise we would hit an infinite hang. + Log.error("Failed to distribute itemstack. Allowing it to be routed randomly."); + entry.to.clear(); + newDistribution.add(entry); + break; + } + } + + ItemEntry stackPartThisSide = new ItemEntry(null, entry.stack.copy(), entry.from); + stackPartThisSide.to = new ArrayList<>(); + + stackPartThisSide.stack.setCount(Math.min(getItemsLeftThisSide(), entry.stack.getCount())); // take as many items as the distribution will allow + entry.stack.setCount(entry.stack.getCount() - stackPartThisSide.stack.getCount()); // and leave event.stack with the remainder + + newDistribution.add(stackPartThisSide); + itemsThisSide += stackPartThisSide.stack.getCount(); + stackPartThisSide.to.add(distSide); + } + } + + } + + splitEvent.items.clear(); + splitEvent.items.addAll(newDistribution); + } + + + /** + * Moves the pipe to the next open side. + * + * @return true if there is another open side that can accept an item stack, false otherwise. + */ + private boolean toNextOpenSide() + { + itemsThisSide = 0; + for(int o = 0; o < distData.length; ++o) + { + distSide = EnumFacing.VALUES[(distSide.ordinal() + 1) % distData.length]; + if(distData[distSide.ordinal()] > 0 && pipe.isConnected(distSide)) + { + return true; + } + } + + return false; + } + + /** + * + * @return the number of items left that this side can output before switching to the next one + */ + private int getItemsLeftThisSide() + { + if(!pipe.isConnected(distSide)) + { + return 0; + } + + return distData[distSide.ordinal()] - itemsThisSide; + } + + @Override + public boolean onPipeActivate(EntityPlayer player, RayTraceResult trace, float hitX, float hitY, float hitZ, EnumPipePart part) + { + if (EntityUtil.getWrenchHand(player) != null) + { + return super.onPipeActivate(player, trace, hitX, hitY, hitZ, part); + } + + if(!player.world.isRemote) + { + // fire off an update packet to the client + pipe.getHolder().scheduleNetworkUpdate(PipeMessageReceiver.BEHAVIOUR); + + BlockPos pipePos = pipe.getHolder().getPipePos(); + player.openGui(AdditionalPipes.instance, GuiHandler.PIPE_DIST, pipe.getHolder().getPipeWorld(), pipePos.getX(), pipePos.getY(), pipePos.getZ()); + } + return true; + } + + private void sanityCheck() + { + for(int d : distData) { + if(d > 0) { + return; + } + } + for(int i = 0; i < distData.length; i++) { + Arrays.fill(distData, 1); + } + } + + @Override + public NBTTagCompound writeToNbt() { + NBTTagCompound nbt = super.writeToNbt(); + + nbt.setInteger("itemsThisSide", itemsThisSide); + nbt.setInteger("distSide", distSide.ordinal()); + for(int i = 0; i < distData.length; i++) + { + nbt.setInteger("distData" + i, distData[i]); + } + + return nbt; + } + + + @Override + public void writePayload(PacketBuffer buffer, Side side) + { + super.writePayload(buffer, side); + if (side == Side.SERVER) + { + buffer.writeInt(itemsThisSide); + buffer.writeInt(distSide.ordinal()); + + for(int i = 0; i < distData.length; i++) + { + buffer.writeInt(distData[i]); + } + } + } + + @Override + public void readPayload(PacketBuffer buffer, Side side, MessageContext ctx) throws IOException + { + super.readPayload(buffer, side, ctx); + if (side == Side.CLIENT) + { + itemsThisSide = buffer.readInt(); + distSide = EnumFacing.values()[buffer.readInt()]; + + for(int i = 0; i < distData.length; i++) + { + distData[i] = buffer.readInt(); + } + } + } + + + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorGravityFeed.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorGravityFeed.java new file mode 100644 index 00000000..ba46af68 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorGravityFeed.java @@ -0,0 +1,77 @@ +package buildcraft.additionalpipes.pipes; + +import buildcraft.additionalpipes.APConfiguration; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipe.ConnectedType; +import buildcraft.lib.inventory.filter.StackFilter; +import buildcraft.transport.pipe.flow.PipeFlowItems; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class PipeBehaviorGravityFeed extends APPipe +{ + + private int ticksSincePull = 0; + + + + public PipeBehaviorGravityFeed(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + + ticksSincePull = nbt.getInteger("ticksSincePull"); + } + + public PipeBehaviorGravityFeed(IPipe pipe) + { + super(pipe); + } + + private boolean shouldTick() + { + return ticksSincePull >= APConfiguration.gravityFeedPipeTicksPerPull; + } + + @Override + public void onTick() + { + if(pipe.getHolder().getPipeWorld().isRemote) + { + return; + } + + ticksSincePull++; + + if(shouldTick()) + { + if(pipe.isConnected(EnumFacing.UP) && pipe.getConnectedType(EnumFacing.UP) == ConnectedType.TILE) + { + ((PipeFlowItems)pipe.getFlow()).tryExtractItems(1, EnumFacing.UP, null, StackFilter.ALL, false); + } + ticksSincePull = 0; + } + } + + @Override + public int getTextureIndex(EnumFacing direction) + { + if(direction == EnumFacing.UP) + { + return 0; + } + else + { + return 1; + } + } + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbt = super.writeToNbt(); + + nbt.setInteger("ticksSincePull", ticksSincePull); + + return nbt; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorJeweled.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorJeweled.java new file mode 100644 index 00000000..ffeeaae0 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorJeweled.java @@ -0,0 +1,163 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import java.util.EnumSet; +import java.util.List; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.additionalpipes.gui.GuiJeweledPipe; +import buildcraft.additionalpipes.utils.InventoryUtils; +import buildcraft.api.core.EnumPipePart; +import buildcraft.api.tiles.IDebuggable; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.lib.misc.EntityUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraftforge.items.CapabilityItemHandler; + +public class PipeBehaviorJeweled extends APPipe implements IDebuggable { + + public SideFilterData[] filterData = new SideFilterData[GuiJeweledPipe.NUM_TABS]; + + public PipeBehaviorJeweled(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + init(); + + NBTTagList filterList = nbt.getTagList("filterList", 10); + for(int index = 0; index < filterData.length; ++index) + { + NBTTagCompound filterTag = filterList.getCompoundTagAt(index); + filterData[index].readFromNBT(filterTag); + } + } + + public PipeBehaviorJeweled(IPipe pipe) + { + super(pipe); + init(); + } + + private void init() + { + for(int index = 0; index < filterData.length; ++index) + { + filterData[index] = new SideFilterData(); + } + } + + @Override + public int getTextureIndex(EnumFacing connection) + { + if(connection == null) + { + return 0; + } + + return connection.ordinal(); + } + + @PipeEventHandler + public void onSideCheck(PipeEventItem.SideCheck event) + { + EnumSet disallowedSides = EnumSet.noneOf(EnumFacing.class); + + for(EnumFacing dir : EnumFacing.VALUES) + { + SideFilterData data = filterData[dir.ordinal()]; + + if(!data.matchesStack(event.stack)) + { + disallowedSides.add(dir); + } + } + + // if no sides were allowed, find sides that accept unsorted items + if(disallowedSides.size() == 6) + { + for(EnumFacing dir : EnumFacing.VALUES) + { + SideFilterData data = filterData[dir.ordinal()]; + + if(data.acceptsUnsortedItems()) + { + disallowedSides.remove(dir); + } + } + } + + // pass results to event + event.disallowAll(disallowedSides); + } + + + @Override + public boolean onPipeActivate(EntityPlayer player, RayTraceResult trace, float hitX, float hitY, float hitZ, EnumPipePart part) + { + if (EntityUtil.getWrenchHand(player) != null) + { + return super.onPipeActivate(player, trace, hitX, hitY, hitZ, part); + } + + if (!player.world.isRemote) + { + BlockPos pipePos = pipe.getHolder().getPipePos(); + player.openGui(AdditionalPipes.instance, GuiHandler.PIPE_JEWELED, pipe.getHolder().getPipeWorld(), pipePos.getX(), pipePos.getY(), pipePos.getZ()); + } + return true; + } + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbt = super.writeToNbt(); + + NBTTagList filterList = new NBTTagList(); + for(int index = 0; index < filterData.length; ++index) + { + NBTTagCompound filterTag = new NBTTagCompound(); + filterData[index].writeToNBT(filterTag); + filterList.appendTag(filterTag); + } + + nbt.setTag("filterList", filterList); + + return nbt; + } + + @Override + public void addDrops(NonNullList toDrop, int fortune) + { + super.addDrops(toDrop, fortune); + for(SideFilterData sideFilter : filterData) + { + toDrop.addAll(InventoryUtils.getItems(sideFilter.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null))); + } + } + + @Override + public void getDebugInfo(List info, List param2, EnumFacing side) + { + SideFilterData clickedSide = filterData[side.ordinal()]; + info.add("Accepts unsorted items: " + clickedSide.acceptsUnsortedItems()); + info.add("Matches NBT: " + clickedSide.matchNBT()); + info.add("Matches metadata: " + clickedSide.matchMetadata()); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorPriorityInsertion.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorPriorityInsertion.java new file mode 100644 index 00000000..164b9c4e --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorPriorityInsertion.java @@ -0,0 +1,184 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import java.util.ArrayList; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.api.core.EnumPipePart; +import buildcraft.api.inventory.IItemTransactor; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipe.ConnectedType; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.api.transport.pipe.PipeEventItem.ItemEntry; +import buildcraft.lib.inventory.ItemTransactorHelper; +import buildcraft.lib.misc.EntityUtil; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; + +public class PipeBehaviorPriorityInsertion extends APPipe { + + public byte sidePriorities[] = { 1, 1, 1, 1, 1, 1 }; + + + public PipeBehaviorPriorityInsertion(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + + sidePriorities = nbt.getByteArray("prioritiesArray"); + } + + public PipeBehaviorPriorityInsertion(IPipe pipe) + { + super(pipe); + } + + @Override + public int getTextureIndex(EnumFacing connection) + { + if(connection == null) + { + return 0; + } + + return connection.ordinal(); + } + + @PipeEventHandler + public void splitStacks(PipeEventItem.Split splitEvent) + { + ArrayList newDistribution = new ArrayList<>(); + + + for(ItemEntry entry : splitEvent.items) + { + if(entry.to == null) + { + entry.to = new ArrayList(); + } + + ItemStack itemsRemaining = entry.stack.copy(); + + // keep looping until we run out of sides, or of items + for(int checkingPriority = 6; checkingPriority >= 1 && itemsRemaining.getCount() > 0; --checkingPriority) + { + for(EnumFacing side : EnumFacing.VALUES) + { + if(sidePriorities[side.ordinal()] == checkingPriority) + { + if(pipe.isConnected(side)) + { + if(pipe.getConnectedType(side) == ConnectedType.TILE) + { + // add as many items as will fit to this side + IItemTransactor transactor = ItemTransactorHelper.getTransactor(pipe.getConnectedTile(side), side.getOpposite()); + ItemStack overflow = transactor.insert(itemsRemaining, false, true); + + if(overflow == ItemStack.EMPTY) + { + // we can add the entire thing + itemsRemaining.setCount(0); + entry.to.add(side); + newDistribution.add(entry); + } + else if(overflow.getCount() < itemsRemaining.getCount()) + { + // at least some can fit, so split the itementry and add the items that can fit + ItemStack partialStack = itemsRemaining.copy(); + partialStack.setCount(itemsRemaining.getCount() - overflow.getCount()); + + itemsRemaining.setCount(overflow.getCount()); + + ItemEntry newEntry = new ItemEntry(null, partialStack, entry.from); + newEntry.to = new ArrayList<>(); + newEntry.to.add(side); + newDistribution.add(newEntry); + } + } + } + } + } + } + + // if there are still items left after that, just leave them on their default route since they have nowhere to go + if(itemsRemaining.getCount() > 0) + { + entry.stack.setCount(itemsRemaining.getCount()); + newDistribution.add(entry); + } + } + + splitEvent.items.clear(); + splitEvent.items.addAll(newDistribution); + } + /* + @PipeEventHandler + public void orderSides(PipeEventItem.SideCheck ordering) + { + for (EnumFacing face : EnumFacing.VALUES) + { + // don't send items back where they came from + if(face != ordering.from) + { + continue; + } + + boolean shouldIncreasePriority = false; + + if(pipe.isConnected(face)) + { + if(pipe.getConnectedType(face) == ConnectedType.PIPE) + { + // pipes always have space for more items, so we should always send items to them + shouldIncreasePriority = true; + } + else + { + // if we are connected to a tile on this side, we must ensure it has space for + } + } + + ordering.increasePriority(face, 100 + 10 * sidePriorities[face.ordinal()]); // note: PipeBehaviourClay adds 100 to priorities to override filters and things, so I'm following that precedent + + } + } +*/ + @Override + public boolean onPipeActivate(EntityPlayer player, RayTraceResult trace, float hitX, float hitY, float hitZ, EnumPipePart part) + { + if (EntityUtil.getWrenchHand(player) != null) + { + return super.onPipeActivate(player, trace, hitX, hitY, hitZ, part); + } + + if (!player.world.isRemote) + { + BlockPos pipePos = pipe.getHolder().getPipePos(); + player.openGui(AdditionalPipes.instance, GuiHandler.PIPE_PRIORITY, pipe.getHolder().getPipeWorld(), pipePos.getX(), pipePos.getY(), pipePos.getZ()); + } + return true; + } + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbt = super.writeToNbt(); + + nbt.setByteArray("prioritiesArray", sidePriorities); + + return nbt; + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorSwitch.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorSwitch.java new file mode 100644 index 00000000..c116ff1c --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorSwitch.java @@ -0,0 +1,89 @@ +package buildcraft.additionalpipes.pipes; + +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeBehaviour; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import net.minecraftforge.fml.relauncher.Side; + +/** + * Class for all 3 types of switch pipe + * @author jamie + * + */ +public class PipeBehaviorSwitch extends APPipe +{ + + private boolean canConnect; + + public PipeBehaviorSwitch(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + } + + public PipeBehaviorSwitch(IPipe pipe) + { + super(pipe); + } + + @Override + public int getTextureIndex(EnumFacing direction) + { + return (canConnect ? 0 : 1); + } + + public void onTick() + { + // run only on the server + if(pipe.getHolder().getPipeWorld().isRemote) + { + return; + } + + boolean newCanConnect = !pipe.getHolder().getPipeWorld().isBlockPowered(getPos()); + + if(canConnect != newCanConnect) + { + canConnect = newCanConnect; + pipe.markForUpdate(); + } + } + + + + /* + @Override + public boolean canConnectRedstone() { + return true; + } + */ + + + @Override + public void writePayload(PacketBuffer buffer, Side side) + { + buffer.writeBoolean(canConnect); + } + + @Override + public void readPayload(PacketBuffer buffer, Side side, MessageContext ctx) + { + canConnect = buffer.readBoolean(); + } + + @Override + public boolean canConnect(EnumFacing face, PipeBehaviour other) + { + return canConnect; + } + + @Override + public boolean canConnect(EnumFacing face, TileEntity oTile) + { + return canConnect; + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleport.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleport.java new file mode 100644 index 00000000..bdd84e92 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleport.java @@ -0,0 +1,322 @@ +package buildcraft.additionalpipes.pipes; + +import java.util.Objects; +import java.util.Random; +import java.util.UUID; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.additionalpipes.api.ITeleportPipe; +import buildcraft.additionalpipes.api.TeleportPipeType; +import buildcraft.additionalpipes.gui.GuiHandler; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.additionalpipes.utils.PlayerUtils; +import buildcraft.api.core.EnumPipePart; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeBehaviour; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventTileState; +import buildcraft.lib.misc.EntityUtil; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.TextComponentTranslation; + + +public abstract class PipeBehaviorTeleport extends APPipe implements ITeleportPipe +{ + protected static final Random rand = new Random(); + + private int frequency = 0; + // 0b0 = none, 0b1 = send, 0b10 = receive, 0b11 = both + public byte state = 1; + + public UUID ownerUUID; + public String ownerName = ""; + + public int[] network = new int[0]; // coordinates of connected pipes. Used as a sort of cache variable by the teleport pipe GUI. + public boolean isPublic = false; + + public final TeleportPipeType type; + + public PipeBehaviorTeleport(IPipe pipe, TeleportPipeType type) + { + super(pipe); + this.type = type; + } + + public PipeBehaviorTeleport(IPipe pipe, NBTTagCompound tagCompound, TeleportPipeType type) + { + super(pipe, tagCompound); + this.type = type; + + frequency = tagCompound.getInteger("freq"); + state = tagCompound.getByte("state"); + if(tagCompound.hasKey("ownerUUID")) + { + ownerUUID = UUID.fromString(tagCompound.getString("ownerUUID")); + ownerName = tagCompound.getString("ownerName"); + } + isPublic = tagCompound.getBoolean("isPublic"); + } + + @Override + public byte getState() + { + return state; + } + + @Override + public void setState(byte state) + { + this.state = state; + } + + @Override + public UUID getOwnerUUID() + { + return ownerUUID; + } + + public void setOwnerUUID(UUID ownerUUID) + { + this.ownerUUID = ownerUUID; + } + + @Override + public String getOwnerName() + { + return ownerName; + } + + public void setOwnerName(String ownerName) + { + this.ownerName = ownerName; + } + + @Override + public boolean isPublic() + { + return isPublic; + } + + @Override + public void setPublic(boolean isPublic) + { + this.isPublic = isPublic; + } + + @Override + public TeleportPipeType getType() + { + return type; + } + + @PipeEventHandler + public void onInvalidate(PipeEventTileState.Invalidate event) + { + if(isServer()) + { + Log.debug("Teleport pipe at " + getPos() + " invalidated"); + TeleportManager.instance.remove(this, frequency); + } + } + + @PipeEventHandler + public void onChunkUnload(PipeEventTileState.ChunkUnload event) + { + if(isServer()) + { + Log.debug("Teleport pipe at " + getPos() + " unloaded"); + TeleportManager.instance.remove(this, frequency); + } + } + + @PipeEventHandler + public void onValidate(PipeEventTileState.Validate event) + { + if(isServer()) + { + Log.debug("Teleport pipe at " + getPos() + " validated"); + TeleportManager.instance.add(this, frequency); + } + } + + /*@Override + public void initialize() { + super.initialize(); + TeleportManager.instance.add(this, frequency); + } + + @Override + public void invalidate() { + super.invalidate(); + + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + TeleportManager.instance.remove(this, frequency); + }*/ + + + + @Override + public boolean onPipeActivate(EntityPlayer player, RayTraceResult trace, float hitX, float hitY, float hitZ, EnumPipePart part) + { + if(player.world.isRemote) + { + return true; + } + + if(ownerUUID == null) + { + // set owner of pipe + ownerUUID = PlayerUtils.getUUID(player); + ownerName = player.getName(); + } + + if(!isPublic) + { + //test for player name change + if(PlayerUtils.getUUID(player).equals(ownerUUID)) + { + if(!player.getName().equals(ownerName)) + { + ownerName = player.getName(); + } + } + else + { + //access denied + player.sendMessage(new TextComponentTranslation("message.ap.accessdenied", ownerName)); + + //if we return false, this method can get called again with a different side, and it will show the message again + return true; + } + } + + if (EntityUtil.getWrenchHand(player) != null) + { + return super.onPipeActivate(player, trace, hitX, hitY, hitZ, part); + } + + if (!player.world.isRemote) + { + BlockPos pipePos = pipe.getHolder().getPipePos(); + player.openGui(AdditionalPipes.instance, GuiHandler.PIPE_TP, pipe.getHolder().getPipeWorld(), pipePos.getX(), pipePos.getY(), pipePos.getZ()); + } + return true; + } + + /** + * Checks two teleport pipes for equality. The teleport manager will remove entries that are equal according to this method when adding a new pipe. + */ + @Override + public boolean equals(Object obj) + { + if(obj instanceof ITeleportPipe) + { + ITeleportPipe pipe = (ITeleportPipe)obj; + + if(pipe.getType() == getType()) + { + if(pipe.getState() == getState()) + { + if(pipe.isPublic() == isPublic()) + { + if(Objects.equals(pipe.getOwnerUUID(), getOwnerUUID())) + { + if(Objects.equals(pipe.getPosition(), getPosition())) + { + if(pipe.getFrequency() == getFrequency()) + { + return true; + } + } + } + } + } + } + } + + return false; + } + + public void setFrequency(int freq) { + frequency = freq; + } + + @Override + public int getFrequency() { + return frequency; + } + + @Override + public TilePipeHolder getContainer() + { + // if unit tests are being run, pipe will be null + if(pipe != null) + { + return (TilePipeHolder) pipe.getHolder(); + } + else + { + return null; + } + } + + @Override + public boolean canConnect(EnumFacing face, PipeBehaviour other) + { + if(other instanceof PipeBehaviorTeleport) + { + return false; + } + + return super.canConnect(face, other); + } + + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbttagcompound = super.writeToNbt(); + nbttagcompound.setInteger("freq", frequency); + nbttagcompound.setByte("state", state); + if(ownerUUID != null) + { + nbttagcompound.setString("ownerUUID", ownerUUID.toString()); + nbttagcompound.setString("ownerName", ownerName); + } + nbttagcompound.setBoolean("isPublic", isPublic); + + return nbttagcompound; + } + + public static boolean canPlayerModifyPipe(EntityPlayer player, PipeBehaviorTeleport pipe) + { + if(pipe.isPublic || pipe.ownerUUID.equals(PlayerUtils.getUUID(player)) || player.capabilities.isCreativeMode) + return true; + return false; + } + + public BlockPos getPosition() { + return getPos(); + } + + @Override + public boolean canReceive() + { + return (state & 0x2) > 0; + } + + @Override + public boolean canSend() + { + return (state & 0x1) > 0; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportFluids.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportFluids.java new file mode 100644 index 00000000..9d50ca74 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportFluids.java @@ -0,0 +1,147 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import java.util.ArrayList; +import java.util.Iterator; + +import buildcraft.additionalpipes.api.TeleportPipeType; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeEventFluid; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.transport.pipe.flow.PipeFlowFluids; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +public class PipeBehaviorTeleportFluids extends PipeBehaviorTeleport +{ + + public PipeBehaviorTeleportFluids(IPipe pipe, NBTTagCompound tagCompound) + { + super(pipe, tagCompound, TeleportPipeType.FLUIDS); + } + + public PipeBehaviorTeleportFluids(IPipe pipe) + { + super(pipe, TeleportPipeType.FLUIDS); + } + + + /** + * Thsi event handler only allows as much fluid to move to the center as can move to other teleport pipes + * @param event + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + @PipeEventHandler + public void preMoveCenter(PipeEventFluid.PreMoveToCentre event) + { + if(canSend()) + { + ArrayList connectedPipes = (ArrayList)TeleportManager.instance.getConnectedPipes(this, false, true); + + // make our request based off the total number of MB that other pipes have space for + int totalMBNeeded = 0; + for(PipeBehaviorTeleportFluids pipe : connectedPipes) + { + totalMBNeeded += pipe.getMaxAcceptableMB(event.fluid.getFluid()); + } + + Log.debug("[FluidTeleportPipe] Requested " + totalMBNeeded + " MB of fluid"); + + for(EnumFacing side : EnumFacing.VALUES) + { + int fluidFromThisSide = Math.min(event.totalOffered[side.ordinal()], totalMBNeeded); + + event.actuallyOffered[side.ordinal()] = fluidFromThisSide; + totalMBNeeded -= fluidFromThisSide; + } + } + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @PipeEventHandler + public void onMoveCenter(PipeEventFluid.OnMoveToCentre event) + { + if(canSend()) + { + ArrayList connectedPipes = (ArrayList)TeleportManager.instance.getConnectedPipes(this, false, true); + + Log.debug("[FluidTeleportPipe] Got " + event.fluid.amount + " MB of fluid"); + + FluidStack remaining = event.fluid.copy(); + + // loop until we're out of fluid, or until no pipes need it + while(remaining.amount > 0 && connectedPipes.size() > 0) + { + + // divide the fluid into apportionments for each pipe + FluidStack maxPerIteration = remaining.copy(); + maxPerIteration.amount /= connectedPipes.size(); // it's OK if we have rounding errors, it will get resolved eventually + + // insert one allocation into each pipe that needs it + Iterator pipeIter = connectedPipes.iterator(); + while(pipeIter.hasNext()) + { + PipeBehaviorTeleportFluids pipe = pipeIter.next(); + + int inserted = ((PipeFlowFluids) pipe.pipe.getFlow()).insertFluidsForce(maxPerIteration, null, false); + + if(inserted == 0) + { + // this pipe is done, remove it + pipeIter.remove(); + } + else + { + remaining.amount -= inserted; + } + + } + } + + if(remaining.amount > 0) + { + Log.debug("PipeLiquidsTeleport's PreMoveToCentre event handler requested more fluid than can be handled! " + remaining.amount + " MB is left and will be rejected."); + } + + // update event data + for(EnumFacing side : EnumFacing.VALUES) + { + // allow no fluid to enter the center, regardless + event.fluidEnteringCentre[side.ordinal()] = 0; + + if(remaining.amount > 0) + { + // decrease the amount of fluid entering the side to match what was actually consumed + int fluidBlockedFromEntering = Math.min(event.fluidLeavingSide[side.ordinal()], remaining.amount); + + event.fluidLeavingSide[side.ordinal()] -= fluidBlockedFromEntering; + remaining.amount -= fluidBlockedFromEntering; + } + } + + + } + } + + /** + * Returns the number of millibuckets of the given fluid that this pipe's center tank can accept + * @param fluid + * @return + */ + public int getMaxAcceptableMB(Fluid fluid) + { + // try inserting an infinite amount, and see how much is returned + return ((PipeFlowFluids) pipe.getFlow()).insertFluidsForce(new FluidStack(fluid, Integer.MAX_VALUE), null, true); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportItems.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportItems.java new file mode 100644 index 00000000..b6e1257f --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportItems.java @@ -0,0 +1,228 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import java.util.ArrayList; +import java.util.LinkedList; + +import buildcraft.additionalpipes.api.TeleportPipeType; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeBehaviour; +import buildcraft.api.transport.pipe.PipeEventHandler; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.transport.pipe.flow.PipeFlowItems; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class PipeBehaviorTeleportItems extends PipeBehaviorTeleport +{ + final private static double TELEPORTED_ITEM_SPEED = .1; + + // side of the pipe that teleported items enter and exit from + private EnumFacing teleportSide = null; + + public PipeBehaviorTeleportItems(IPipe pipe, NBTTagCompound tagCompound) + { + super(pipe, tagCompound, TeleportPipeType.ITEMS); + + teleportSide = EnumFacing.VALUES[tagCompound.getByte("teleportSide")]; + } + + public PipeBehaviorTeleportItems(IPipe pipe) + { + super(pipe, TeleportPipeType.ITEMS); + } + + @Override + public NBTTagCompound writeToNbt() + { + NBTTagCompound nbt = super.writeToNbt(); + + if(getTeleportSide() != null) + { + nbt.setByte("teleportSide", (byte) getTeleportSide().ordinal()); + } + + return nbt; + } + + @Override + public boolean canConnect(EnumFacing face, PipeBehaviour other) + { + // can't connect to all 6 sides since one side has to be the teleport side + int numConnectedSides = 0; + for(EnumFacing direction : EnumFacing.VALUES) + { + if(pipe.isConnected(direction)) + { + ++numConnectedSides; + } + } + + if(numConnectedSides >= 5) + { + return false; + } + + return super.canConnect(face, other); + } + + /** + * Get the side of the pipe that items are teleported into and out of. + * Items that come from this side are not teleported again. + * + * The teleport side will change only if a pipe is connected to teleportSide, or disconnected from the opposite of teleportSide. + * + * If this returns null, then the pipe is connected on no sides. + * @return + */ + public EnumFacing getTeleportSide() + { + // teleportSide can only be calculated on the server + if(isClient()) + { + return null; + } + + // check if we need to recalculate the teleport side + if(teleportSide == null || pipe.isConnected(teleportSide) || !pipe.isConnected(teleportSide.getOpposite())) + { + Log.debug("[ItemTeleportPipe]" + getPosition().toString() + " Recalculating teleport side..."); + teleportSide = null; + + boolean allSidesConnected = true; + + // for recalculation: + // find the first unconnected side that is opposite to a connected side + for(EnumFacing side : EnumFacing.VALUES) + { + //Log.debug("isConnected(" + side + ") = " + pipe.isConnected(side)); + if(!pipe.isConnected(side) && pipe.isConnected(side.getOpposite())) + { + teleportSide = side; + break; + } + + allSidesConnected = allSidesConnected && pipe.isConnected(side); + } + + if(teleportSide == null && allSidesConnected) + { + // should never happen -- just arbitrarily choose down. + teleportSide = EnumFacing.DOWN; + } + + Log.debug("[ItemTeleportPipe]" + getPosition().toString() + " Teleport side set to " + String.valueOf(teleportSide)); + + } + + return teleportSide; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @PipeEventHandler + public void onReachCenter(PipeEventItem.ReachCenter event) + { + // only process event on server side + if(pipe.getHolder().getPipeWorld().isRemote || !canSend()) + { + return; + } + + // if the item is coming from the teleportSide, it has already been teleported, so leave it be + if(event.from == getTeleportSide()) + { + return; + } + + ArrayList connectedTeleportPipes = (ArrayList)TeleportManager.instance.getConnectedPipes(this, false, true); + + // no teleport pipes connected, use default + if(connectedTeleportPipes.size() <= 0 || (state & 0x1) == 0) { + return; + } + + // output to random pipe + LinkedList outputOrientations = new LinkedList(); + PipeBehaviorTeleportItems otherPipe; + + int originalPipeNumber = pipe.getHolder().getPipeWorld().rand.nextInt(connectedTeleportPipes.size()); + int currentPipeNumber = originalPipeNumber; + + boolean found = false; + int numberOfTries = 0; + + // find a pipe with something connected to it + // The logic for this is... pretty complicated, actually. + do + { + ++numberOfTries; + otherPipe = connectedTeleportPipes.get(currentPipeNumber); + + for(EnumFacing o : EnumFacing.values()) + { + if(otherPipe.pipe.isConnected(o)) + { + outputOrientations.add(o); + } + } + + // no outputs found, try again + if(outputOrientations.size() <= 0) + { + ++currentPipeNumber; + + //loop back to the start + if(currentPipeNumber >= connectedTeleportPipes.size()) + { + currentPipeNumber = 0; + } + } + else + { + found = true; + } + } + while(numberOfTries < connectedTeleportPipes.size() && !found); + + //couldn't find any, so give up + if(!found) + { + Log.debug("[ItemTeleportPipe]" + getPosition().toString() + "Unable to find a destination, dropping item " + event.getStack()); + return; + } + + ((PipeFlowItems)otherPipe.pipe.getFlow()).insertItemsForce(event.getStack(), otherPipe.getTeleportSide(), event.colour, TELEPORTED_ITEM_SPEED); + Log.debug("[ItemTeleportPipe]" + getPosition().toString() + event.getStack() + " from " + getPosition() + " to " + otherPipe.getPosition()); + event.setStack(ItemStack.EMPTY); + } + + @PipeEventHandler + public void orderSides(PipeEventItem.SideCheck event) + { + // if an item is going to be teleported, make sure it goes toward the teleport side and not another pipe input + if(event.from != getTeleportSide()) + { + try + { + event.increasePriority(getTeleportSide(), 100); + } + catch(NullPointerException ex) + { + // it seems like if a connected pipe is being broken right as event.increasePriority() is called, the event gets a null priorities array, + // and we get this. + // Just ignore it. + Log.debug("Caught NPE from SideCheck.increasePriority()"); + } + } + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportPower.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportPower.java new file mode 100644 index 00000000..6c700f98 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorTeleportPower.java @@ -0,0 +1,246 @@ +/** + * BuildCraft is open-source. It is distributed under the terms of the + * BuildCraft Open Source License. It grants rights to read, modify, compile + * or run the code. It does *NOT* grant the right to redistribute this software + * or its modifications in any form, binary or source, except if expressively + * granted by the copyright holder. + */ + +package buildcraft.additionalpipes.pipes; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import buildcraft.additionalpipes.APConfiguration; +import buildcraft.additionalpipes.api.TeleportPipeType; +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.mj.IMjReceiver; +import buildcraft.api.mj.MjAPI; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.IPipe.ConnectedType; +import buildcraft.api.transport.pipe.IPipeHolder; +import buildcraft.transport.pipe.flow.IPipeTransportPowerHook; +import buildcraft.transport.pipe.flow.PipeFlowPower; +import buildcraft.transport.tile.TilePipeHolder; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.MathHelper; + +public class PipeBehaviorTeleportPower extends PipeBehaviorTeleport implements IPipeTransportPowerHook +{ + + /** + * Data class used in receivePower() to keep track of what TEs need power + * @author jamie + * + */ + private static class PowerRequest { + public final TileEntity tile; + public final EnumFacing orientation; // side on tile entity of power request + public final boolean isPipe; + + public PowerRequest(TileEntity te, EnumFacing o) { + tile = te; + orientation = o; + isPipe = te instanceof IPipeHolder; + } + } + + public PipeBehaviorTeleportPower(IPipe pipe, NBTTagCompound tagCompound) + { + super(pipe, tagCompound, TeleportPipeType.POWER); + } + + public PipeBehaviorTeleportPower(IPipe pipe) + { + super(pipe, TeleportPipeType.POWER); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public int requestPower(EnumFacing from, long value) + { + int requested = 0; + + if(!canReceive()) + { // No need to waste CPU + return requested; + } + + ArrayList pipeList = (ArrayList)TeleportManager.instance.getConnectedPipes(this, true, false); + + if(pipeList.size() <= 0) { + return requested; + } + + + // for each teleport pipe connected to us, tell pipes connected to THEM that we are requesting the power + for(PipeBehaviorTeleportPower otherPipe : pipeList) + { + LinkedList possibleMovements = getRealPossibleMovements(otherPipe); + for(EnumFacing orientation : possibleMovements) + { + IPipe nearbyPipe = otherPipe.pipe.getConnectedPipe(from); + + PipeFlowPower nearbyFlow = (PipeFlowPower) nearbyPipe.getFlow(); + + // will uncomment when Buildcraft API is added + //nearbyFlow.requestPower(orientation.getOpposite(), value); + } + } + return requested; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public int receivePower(EnumFacing from, long energy) + { + List connectedPipes = (List)TeleportManager.instance.getConnectedPipes(this, false, true); + List sendingToList = new LinkedList(); + + // no connected pipes, leave! + if(connectedPipes.size() <= 0 || (state & 0x1) == 0) + { + return 0; + } + + for(PipeBehaviorTeleportPower pipe : connectedPipes) + { + if(getPowerRequestsByNeighbors(pipe).size() > 0) + { + sendingToList.add(pipe); + } + } + + // no pipes need energy, leave! + if(sendingToList.size() <= 0) + { + Log.debug("No pipes want power on channel " + getFrequency()); + + return 0; + } + + double powerToSend = APConfiguration.powerTransmittanceCfg * energy / sendingToList.size(); + + for(PipeBehaviorTeleportPower receiver : sendingToList) + { + List needsPower = getPowerRequestsByNeighbors(receiver); + + if(needsPower.size() <= 0) { + continue; + } + + int dividedPowerToSend = MathHelper.ceil(powerToSend / needsPower.size()); + + for(PowerRequest powerEntry : needsPower) + { + if(powerEntry.isPipe) + { + PipeFlowPower nearbyFlow = (PipeFlowPower)(((TilePipeHolder)powerEntry.tile).getPipe().getFlow()); + + // will uncomment when Buildcraft API is added + //nearbyFlow.addPower(powerEntry.orientation, dividedPowerToSend); + } + else if (powerEntry.tile.hasCapability(MjAPI.CAP_RECEIVER, powerEntry.orientation)) + { + IMjReceiver recv = powerEntry.tile.getCapability(MjAPI.CAP_RECEIVER, powerEntry.orientation); + recv.receivePower(dividedPowerToSend, false); + } + else + { + Log.error("Don't know how to transmit power to tile " + powerEntry.tile.toString()); + } + + } + } + + return (int) energy; + } + + private List getPowerRequestsByNeighbors(PipeBehaviorTeleportPower pipe) + { + LinkedList possibleMovements = getRealPossibleMovements(pipe); + List needsPower = new LinkedList(); + + if(possibleMovements.size() > 0) + { + for(EnumFacing orientation : possibleMovements) + { + TileEntity tile = pipe.pipe.getConnectedTile(orientation); + if(tile instanceof TilePipeHolder) + { + TilePipeHolder adjacentPipe = (TilePipeHolder) tile; + if(pipeNeedsPower(adjacentPipe)) + { + needsPower.add(new PowerRequest(adjacentPipe, orientation.getOpposite())); + } + } + + else if(tile != null) + { + if(getPowerRequestedByTileEntity(tile, orientation) > 0) + { + needsPower.add(new PowerRequest(tile, orientation.getOpposite())); + } + } + } + } + + + return needsPower; + } + + // precondition: power pipe that isn't tp + private static boolean pipeNeedsPower(TilePipeHolder tile) + { + if(tile.getPipe().getFlow() instanceof PipeFlowPower) + { + PipeFlowPower flowPower = (PipeFlowPower) tile.getPipe().getFlow(); + + for(EnumFacing side : EnumFacing.VALUES) + { + // will uncomment when Buildcraft API is added + //if(flowPower.getNextRequestedPower(side) > 0) + //{ + // return true; + //} + } + } + return false; + } + + private long getPowerRequestedByTileEntity(TileEntity tile, EnumFacing sideOnPipe) + { + long power = 0; + + IMjReceiver recv = pipe.getHolder().getCapabilityFromPipe(sideOnPipe, MjAPI.CAP_RECEIVER); + if (recv != null && recv.canReceive()) + { + long requested = recv.getPowerRequested(); + if (requested > 0) { + power += requested; + } + } + + return power; + } + + // returns all adjacent pipes + private static LinkedList getRealPossibleMovements(PipeBehaviorTeleportPower pipe) + { + LinkedList result = new LinkedList(); + + for(EnumFacing orientation : EnumFacing.values()) + { + if(pipe.pipe.isConnected(orientation) && pipe.pipe.getConnectedType(orientation) == ConnectedType.PIPE) + { + result.add(orientation); + } + } + + return result; + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorWaterPump.java b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorWaterPump.java new file mode 100644 index 00000000..3a450175 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeBehaviorWaterPump.java @@ -0,0 +1,48 @@ +package buildcraft.additionalpipes.pipes; + +import buildcraft.additionalpipes.APConfiguration; +import buildcraft.api.transport.pipe.IPipe; +import buildcraft.api.transport.pipe.PipeBehaviour; +import buildcraft.transport.pipe.flow.PipeFlowFluids; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +public class PipeBehaviorWaterPump extends APPipe +{ + + public PipeBehaviorWaterPump(IPipe pipe, NBTTagCompound nbt) + { + super(pipe, nbt); + } + + public PipeBehaviorWaterPump(IPipe pipe) + { + super(pipe); + } + + @Override + public void onTick() + { + if(pipe.getHolder().getPipeWorld().getBlockState(getPos().down()).getBlock() == Blocks.WATER) + { + ((PipeFlowFluids)pipe.getFlow()).insertFluidsForce(new FluidStack(FluidRegistry.WATER, APConfiguration.waterPumpWaterPerTick), EnumFacing.DOWN, false); + } + } + + @Override + public boolean canConnect(EnumFacing side, TileEntity tile) + { + return side != EnumFacing.DOWN; + } + + @Override + public boolean canConnect(EnumFacing side, PipeBehaviour tile) + { + return side != EnumFacing.DOWN; + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/PipeLiquidsObsidian.java.disabled b/src/main/java/buildcraft/additionalpipes/pipes/PipeLiquidsObsidian.java.disabled new file mode 100644 index 00000000..a066e35e --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/PipeLiquidsObsidian.java.disabled @@ -0,0 +1,448 @@ +package buildcraft.additionalpipes.pipes; + +import java.util.HashSet; +import java.util.List; + +import buildcraft.additionalpipes.utils.Log; +import buildcraft.api.mj.IMjRedstoneReceiver; +import buildcraft.api.mj.MjCapabilityHelper; +import buildcraft.api.transport.pipe.PipeEventItem; +import buildcraft.core.proxy.CoreProxy; +import buildcraft.transport.TransportProxy; +import buildcraft.transport.TravelingItem; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.Vec3; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; + +public class PipeLiquidsObsidian extends APPipe implements IMjRedstoneReceiver +{ + + AxisAlignedBB searchBox; + + private final MjCapabilityHelper mjCaps = new MjCapabilityHelper(this); + + //set of entity IDs to avoid picking up + private HashSet entitiesDropped; + private int entitiesDroppedIndex = 0; + + //used to output fluids over time to the pipe system + private FluidStack fluidInItem = null; + + //item that the pipe is currently holding + private ItemStack currentItem = null; + + + @Override + public void onEntityCollide(Entity entity) { + if (pipe.getHolder().getPipeWorld().isRemote) { + return; + } + EnumFacing openFace = getOpenFace(); + if (openFace != null) { + trySuckEntity(entity, openFace, 0, false); + } + } + + private AxisAlignedBB getSuckingBox(EnumFacing orientation, int distance) { + Vec3 p1 = new Vec3(container.getPos()); + Vec3 p2 = new Vec3(container.getPos()); + + switch (orientation) { + case EAST: + p1.addVector(distance, 0, 0); + p2.addVector(distance + 1, 0, 0); + + break; + case WEST: + p1.subtract(distance - 1, 0, 0); + p2.addVector(distance, 0, 0); + break; + case UP: + case DOWN: + p1.addVector(distance + 1, 0, distance + 1); + p2.subtract(distance, 0, distance); + break; + case SOUTH: + p1.addVector(0, 0, distance); + p2.addVector(0, 0, distance + 1); + break; + case NORTH: + default: + p1.subtract(0, 0, distance - 1); + p2.subtract(0, 0, distance); + break; + } + + switch (orientation) { + case EAST: + case WEST: + + p1.addVector(0, distance + 1, distance + 1); + p2.subtract(0, distance, distance); + break; + case UP: + p1.addVector(0, distance + 1, 0); + p2.addVector(0, distance, 0); + break; + case DOWN: + p1.subtract(0, distance - 1, 0); + p2.subtract(0, distance, 0); + break; + case SOUTH: + case NORTH: + default: + + p1.addVector(distance + 1, distance + 1, 0); + p2.subtract(distance, distance, 0); + break; + } + + Vec3 min = Utils.min(p1, p2); + Vec3 max = Utils.max(p1, p2); + + return AxisAlignedBB.fromBounds(min.xCoord, min.yCoord, min.zCoord, max.xCoord, max.yCoord, max.zCoord); + } + + @Override + public void updateEntity () + { + super.updateEntity(); + + //empty the fluid buffer, if it exists + if(fluidInItem == null) + { + //you'd think this is paranoia, but it seems to actually happen sometimes + if(currentItem != null) + { + EnumFacing fillOrientation = getOpenOrientation(); + if(fillOrientation != null) + { + fillOrientation = fillOrientation.getOpposite(); + } + else + { + fillOrientation = EnumFacing.DOWN; // If we are connectged on multiple sides, it's not clear which side to fill from. //May as well just pick one. + } + + fluidInItem.amount -= transport.fill(fillOrientation, fluidInItem, true); + + if(fluidInItem.amount <= 0) + { + dropCurrentItem(); + + fluidInItem = null; + currentItem = null; + } + } + + //suck in a new item + if (battery.getEnergyStored() > 0) { + for (int j = 1; j < 5; ++j) { + if (suckItem(j)) { + return; + } + } + + } + + battery.useEnergy(0, 5, false); + } + + else + { + fluidInItem.amount -= transport.fill(getOpenOrientation().getOpposite(), fluidInItem, true); + + if(fluidInItem.amount <= 0) + { + + fluidInItem = null; + + dropCurrentItem(); + } + + } + } + + private boolean suckItem(int distance) + { + AxisAlignedBB box = getSuckingBox(getOpenOrientation(), distance); + + if (box == null) { + return false; + } + + List discoveredEntities = container.getWorld().getEntitiesWithinAABB(EntityItem.class, box); + + for (EntityItem entity : discoveredEntities) + { + if (canSuck(entity, distance)) + { + pullItemIntoPipe(entity, distance); + return true; + } + } + + return false; + } + + public void pullItemIntoPipe(EntityItem entity, int distance) + { + if (container.getWorld().isRemote) { + return; + } + + container.getWorld().playSoundAtEntity(entity, "random.pop", 0.2F, ((container.getWorld().rand.nextFloat() - container.getWorld().rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + + ItemStack stack = null; + + double speed = 0.01F; + + ItemStack contained = entity.getEntityItem(); + + if (contained == null) { + return; + } + + TransportProxy.proxy.obsidianPipePickup(container.getWorld(), entity, this.container); + + int energyUsed = Math.min(10 * contained.stackSize * distance, battery.getEnergyStored()); + + if (distance == 0 || energyUsed / distance / 10 == contained.stackSize) { + stack = contained; + CoreProxy.proxy.removeEntity(entity); + } else { + stack = contained.splitStack(energyUsed / distance / 10); + } + + speed = Math.sqrt(entity.motionX * entity.motionX + entity.motionY * entity.motionY + entity.motionZ * entity.motionZ); + speed = speed / 2F - 0.05; + + if (speed < 0.01) { + speed = 0.01; + } + + if (stack == null) { + return; + } + + storeAndDrainItem(contained); + + } + + /** + * Extract fluid from the item and put it in the pipe's buffer. + * Then, store the empty fluid container item. + * @param stack + */ + private void storeAndDrainItem(ItemStack stack) + { + FluidStack drainedLiquid; + + //annoyingly, buckets don't use the standard Forge fluid API, so we need to use the separate FluidContainerRegistry + + if(FluidContainerRegistry.isFilledContainer(stack)) + { + drainedLiquid = FluidContainerRegistry.getFluidForFilledItem(stack); + + currentItem = FluidContainerRegistry.drainFluidContainer(stack); + } + else + { + IFluidContainerItem fluidContainerItem = ((IFluidContainerItem)stack.getItem()); + + drainedLiquid = fluidContainerItem.drain(stack, fluidContainerItem.getCapacity(stack), true); + + currentItem = stack; + } + + if(drainedLiquid == null || drainedLiquid.amount <= 0) + { + //didn't get the fluid we thought we'd get + //spit it back out + dropCurrentItem(); + } + else + { + + Log.debug("Storing " + drainedLiquid.amount + "MB of fluid in buffer."); + + + //add liquid to buffer + if(fluidInItem != null && fluidInItem.isFluidEqual(drainedLiquid)) + { + fluidInItem.amount += drainedLiquid.amount; + } + else + { + fluidInItem = drainedLiquid; + } + } + } + + //copy of PipeTransportItems.dropItem() + //this pipe uses a fluid transport, so I have to copy-paste it. + private void dropCurrentItem() + { + if (container.getWorld().isRemote) { + return; + } + + TravelingItem item = TravelingItem.make(new Vec3(container.getPos()), currentItem); + item.setContainer(container); + + PipeEventItem.DropItem event = new PipeEventItem.DropItem(container.pipe, item, item.toEntityItem()); + container.pipe.eventBus.handleEvent(event); + + if(event.entity == null) + { + return; + } + + final EntityItem entity = event.entity; + + EnumFacing direction = getOpenOrientation(); + if(direction != null) + { + direction = direction.getOpposite(); + } + else + { + direction = EnumFacing.UP; + } + entity.setPosition(entity.posX + direction.getFrontOffsetX() * 0.5d, entity.posY + direction.getFrontOffsetY() * 0.5d, entity.posZ + direction + .getFrontOffsetZ() * 0.5d); + + entity.motionX = direction.getFrontOffsetX() * item.getSpeed() * 5 + getWorld().rand.nextGaussian() * 0.1d; + entity.motionY = direction.getFrontOffsetY() * item.getSpeed() * 5 + getWorld().rand.nextGaussian() * 0.1d; + entity.motionZ = direction.getFrontOffsetZ() * item.getSpeed() * 5 + getWorld().rand.nextGaussian() * 0.1d; + + container.getWorld().spawnEntityInWorld(entity); + + currentItem = null; + } + + public void eventHandler(PipeEventItem.DropItem event) + { + entitiesDropped.add(event.entity.getEntityId()); + } + + public boolean canSuck(EntityItem item, int distance) + { + if(currentItem != null) + { + return false; + } + + + //glitched item + if (item.getEntityItem().stackSize <= 0) { + return false; + } + + //not enough energy + if(battery.getEnergyStored() < distance * 10) + { + return false; + } + + //------------------------------------------------------------------------------- + //check that we can suck up fluid from the item + + Item fluidItem = item.getEntityItem().getItem(); + + Fluid fluid = null; + + if(fluidItem instanceof IFluidContainerItem) + { + FluidStack containedFluid = ((IFluidContainerItem)fluidItem).getFluid(item.getEntityItem()); + if(containedFluid != null) + { + fluid = containedFluid.getFluid(); + } + } + else if(FluidContainerRegistry.isFilledContainer(item.getEntityItem())) + { + fluid = FluidContainerRegistry.getFluidForFilledItem(item.getEntityItem()).getFluid(); + } + + if(fluid == null || (transport.fluidType != null && !fluid.equals(transport.fluidType.getFluid()))) + { + return false; + } + + //------------------------------------------------------------------------------- + + //check that the item was not one we already dropped + if(entitiesDropped.contains(item.getEntityId())) + { + return false; + } + + + return true; + } + + @Override + public boolean canConnectEnergy(EnumFacing from) + { + return true; + } + + + @Override + public int getEnergyStored(EnumFacing from) { + return battery.getEnergyStored(); + } + + @Override + public int getMaxEnergyStored(EnumFacing from) { + return battery.getMaxEnergyStored(); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + if(fluidInItem != null) + { + //store buffer fluidstack + NBTTagCompound fluidInItemTag = new NBTTagCompound(); + fluidInItem.writeToNBT(fluidInItemTag); + nbt.setTag("fluidInItemTag", fluidInItemTag); + } + + if(currentItem != null) + { + //store the current item + NBTTagCompound currentItemTag = new NBTTagCompound(); + currentItem.writeToNBT(currentItemTag); + nbt.setTag("currentItemTag", currentItemTag); + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + if(nbt.hasKey("fluidInItemTag")) + { + fluidInItem = FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("fluidInItemTag")); + } + if(nbt.hasKey("currentItemTag")) + { + currentItem = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag("currentItemTag")); + } + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/SideFilterData.java b/src/main/java/buildcraft/additionalpipes/pipes/SideFilterData.java new file mode 100644 index 00000000..6bd27ede --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/SideFilterData.java @@ -0,0 +1,152 @@ +package buildcraft.additionalpipes.pipes; + +import buildcraft.additionalpipes.utils.Log; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.ItemStackHandler; + +/** + * The purpose of this class is to store data for one of the sides of a Jeweled Transport Pipe. + * @author Jamie + * + */ +public class SideFilterData implements ICapabilityProvider +{ + public static final int INVENTORY_SIZE = 27; + + private ItemStackHandler inventory; + + private boolean matchNBT; + + private boolean matchMetadata; + + private boolean acceptUnsortedItems; + + public boolean matchNBT() + { + return matchNBT; + } + + public void setMatchNBT(boolean matchNBT) + { + this.matchNBT = matchNBT; + } + + public boolean matchMetadata() + { + return matchMetadata; + } + + public void setMatchMetadata(boolean matchMetadata) + { + this.matchMetadata = matchMetadata; + } + + public boolean acceptsUnsortedItems() + { + return acceptUnsortedItems; + } + + public void setAcceptUnsortedItems(boolean acceptUnsortedItems) + { + this.acceptUnsortedItems = acceptUnsortedItems; + } + + + public SideFilterData() + { + inventory = new ItemStackHandler(INVENTORY_SIZE); + } + + public void writeToNBT(NBTTagCompound nbtTagCompound) + { + nbtTagCompound.setTag("inventory", inventory.serializeNBT()); + + nbtTagCompound.setBoolean("matchNBT", matchNBT); + nbtTagCompound.setBoolean("matchMetadata", matchMetadata); + nbtTagCompound.setBoolean("acceptUnsortedItems", acceptUnsortedItems); + } + + public void readFromNBT(NBTTagCompound nbtTagCompound) + { + inventory.deserializeNBT(nbtTagCompound.getCompoundTag("inventory")); + + matchNBT = nbtTagCompound.getBoolean("matchNBT"); + matchMetadata = nbtTagCompound.getBoolean("matchMetadata"); + acceptUnsortedItems = nbtTagCompound.getBoolean("acceptUnsortedItems"); + } + + /** + * Returns true if this side can accept the given item. + * @param stack + * @return + */ + public boolean matchesStack(ItemStack stack) + { + if(stack == null) + { + Log.error("SideFilterData.matchesSide() called with null argument!"); + return false; + } + + if(stack == ItemStack.EMPTY) + { + Log.error("SideFilterData.matchesSide() called with empty argument!"); + return false; + } + + for(int index = 0; index < INVENTORY_SIZE; ++index) + { + ItemStack slotStack = inventory.getStackInSlot(index); + if(slotStack != ItemStack.EMPTY) + { + if(slotStack.getItem() == stack.getItem()) + { + if(!matchMetadata || stack.getItemDamage() == slotStack.getItemDamage()) + { + if(!matchNBT || (!slotStack.hasTagCompound() && !stack.hasTagCompound())) + { + return true; + } + if((slotStack.hasTagCompound() && stack.hasTagCompound()) && slotStack.getTagCompound().equals(stack.getTagCompound())) + { + return true; + } + } + } + } + } + return false; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) + { + if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + return true; + } + else + { + return false; + } + } + + @SuppressWarnings("unchecked") + @Override + public T getCapability(Capability capability, EnumFacing facing) + { + if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + { + return (T) inventory; + } + else + { + return null; + } + } +} diff --git a/src/main/java/buildcraft/additionalpipes/pipes/TeleportManager.java b/src/main/java/buildcraft/additionalpipes/pipes/TeleportManager.java new file mode 100644 index 00000000..5e465da1 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/pipes/TeleportManager.java @@ -0,0 +1,180 @@ +package buildcraft.additionalpipes.pipes; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import com.google.common.collect.LinkedListMultimap; +import com.google.common.collect.Multimap; + +import buildcraft.additionalpipes.api.ITeleportPipe; +import buildcraft.additionalpipes.api.TeleportManagerBase; +import buildcraft.additionalpipes.api.TeleportPipeType; +import buildcraft.additionalpipes.utils.Log; +import net.minecraft.world.World; + + +public class TeleportManager extends TeleportManagerBase +{ + public static final TeleportManager instance = new TeleportManager(); + + private static HashMap> pipes; + + public final Map frequencyNames; + + private TeleportManager() + { + //create the multi-multimap + pipes = new HashMap<>(); + for(TeleportPipeType type : TeleportPipeType.values()) + { + pipes.put(type, LinkedListMultimap.create()); + } + + // then the regular hashmap for frequency names + frequencyNames = new HashMap(); + } + + /** + * Get a collection containing the pipes in a channel (a channel consists of a frequency and a type). + * @param frequency + * @param type + * @return + */ + private Collection getPipesInChannel(int frequency, TeleportPipeType type) + { + return pipes.get(type).get(frequency); + } + + @Override + public void add(ITeleportPipe newPipe, int frequency) + { + + Collection pipesInChannel = pipes.get(newPipe.getType()).get(frequency); + + // check if this pipe was left in the teleport manager because it didn't unload cleanly for some reason + // This should not normally happen, but I am trying to be a bit defensive here since the users have been complaining about bugs + for(Iterator pipesIter = pipesInChannel.iterator(); pipesIter.hasNext(); ) + { + ITeleportPipe pipe = pipesIter.next(); + if(pipe.equals(newPipe)) + { + pipesIter.remove(); + } + } + + pipesInChannel.add(newPipe); + + //if unit tests are being run, pipe.container will be null. + if(newPipe.getContainer() != null) + { + Log.debug(String.format("[TeleportManager] Pipe added: %s @ (%s), %d pipes in channel", newPipe.getType().toString().toLowerCase(), + newPipe.getPosition().toString(), getPipesInChannel(frequency, newPipe.getType()).size())); + } + } + + @Override + public void remove(ITeleportPipe pipeToRemove, int frequency) + { + Collection pipesInChannel = pipes.get(pipeToRemove.getType()).get(frequency); + + // Remove all pipes matching the one provided + for(Iterator pipesIter = pipesInChannel.iterator(); pipesIter.hasNext(); ) + { + ITeleportPipe pipe = pipesIter.next(); + if(pipe.equals(pipeToRemove)) + { + pipesIter.remove(); + } + } + + //if unit tests are being run, pipe.container will be null. + if(pipeToRemove.getContainer() != null) + { + Log.debug(String.format("[TeleportManager] Pipe removed: %s @ (%s), %d pipes in channel", pipeToRemove.getType().toString().toLowerCase(), + pipeToRemove.getPosition().toString(), getPipesInChannel(frequency, pipeToRemove.getType()).size())); + } + } + + @Override + public void reset() { + for(TeleportPipeType type : TeleportPipeType.values()) + { + pipes.get(type).clear(); + } + + frequencyNames.clear(); + Log.debug("Reset teleport manager."); + } + + /** + * Get pipes connected to the provided one. (template function version) + * @param pipe + * @param includeSend whether or not to return connected pipes that send stuff. + * @param includeReceive whether or not to return connected pipes that receive stuff. + * @return + */ + public ArrayList getConnectedPipes(ITeleportPipe pipe, boolean includeSend, boolean includeReceive) + { + Collection channel = getPipesInChannel(pipe.getFrequency(), pipe.getType()); + + ArrayList connected = new ArrayList(); + + for(ITeleportPipe other : channel) + { + if(other.getContainer() != null && other.getContainer().isInvalid()) + { + continue; + } + + // pipe is open or includeReceive && + // both public or same owner + if(pipe != other) + { + if((other.canReceive() && includeReceive) || (other.canSend() && includeSend)) + { + if(pipe.isPublic() ? other.isPublic() : (other.getOwnerUUID() != null && other.getOwnerUUID().equals(pipe.getOwnerUUID()))) + { + connected.add(other); + } + } + } + + } + return connected; + } + + public Collection getAllPipesInNetwork(TeleportPipeType type) + { + return pipes.get(type).values(); + } + + /** + * Get the name of the provided frequency. + * @param frequency + * @return the name of the frequency, or an empty string if it has no name. + */ + @Override + public String getFrequencyName(int frequency) + { + String name = frequencyNames.get(frequency); + return name == null ? "" : name; + } + + // TODO + + @Override + public void setFrequencyName(int frequency, String name) + { + frequencyNames.put(frequency, name); + } + + public File getWorldSave(World world) + { + return world.getSaveHandler().getMapFileFromName("foo").getParentFile().getParentFile(); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/sound/APSounds.java b/src/main/java/buildcraft/additionalpipes/sound/APSounds.java new file mode 100644 index 00000000..7c4f28b7 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/sound/APSounds.java @@ -0,0 +1,24 @@ +package buildcraft.additionalpipes.sound; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.SoundEvent; +import net.minecraftforge.registries.IForgeRegistry; + +/** + * Class to hold AdditionalPipes' sounds. Currently just the Dog Deaggravator bell. + * @author jamie + * + */ +public class APSounds +{ + public static SoundEvent dogDeaggravatorBell; + + public static void register(IForgeRegistry registry) + { + ResourceLocation bellResourceLoc = new ResourceLocation("additionalpipes:bellRing"); + dogDeaggravatorBell = new SoundEvent(bellResourceLoc); + dogDeaggravatorBell.setRegistryName(bellResourceLoc); + registry.register(dogDeaggravatorBell); + } + +} diff --git a/src/main/java/buildcraft/additionalpipes/test/TeleportManagerTest.java b/src/main/java/buildcraft/additionalpipes/test/TeleportManagerTest.java new file mode 100644 index 00000000..67cc4c59 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/test/TeleportManagerTest.java @@ -0,0 +1,300 @@ +package buildcraft.additionalpipes.test; + +import java.util.ArrayList; +import java.util.UUID; + +import buildcraft.additionalpipes.pipes.PipeBehaviorTeleportItems; +import buildcraft.additionalpipes.pipes.TeleportManager; +import buildcraft.additionalpipes.utils.Log; + +/** + * This class is used to make sure the new teleport manager is working properly. + * @author Jamie + * + */ +public class TeleportManagerTest +{ + + public static void runAllTests() + { + + Log.info("[TeleportManagerTest] Testing Basic Adding and Removing"); + + if(testBasicAddRemove()) + { + Log.info(">> Passed!"); + } + else + { + Log.info(">> Failed!"); + } + + Log.info("[TeleportManagerTest] Testing handling of duplicate pipes"); + if(testDuplicateRemoval()) + { + Log.info(">> Passed!"); + } + else + { + Log.info(">> Failed!"); + } + + Log.info("[TeleportManagerTest] Testing basic getConnectedPipes()"); + if(testGetConnectedPipesBasic()) + { + Log.info(">> Passed!"); + } + else + { + Log.info(">> Failed!"); + } + + Log.info("[TeleportManagerTest] Testing proper behavior of getConnectedPipes() on send-receive pipes"); + if(testGetConnectedPipesSendReceive()) + { + Log.info(">> Passed!"); + } + else + { + Log.info(">> Failed!"); + } + + Log.info("[TeleportManagerTest] Testing a real use case for getConnectedPipes()"); + if(testGetConnectedPipesRealUseCase()) + { + Log.info(">> Passed!"); + } + else + { + Log.info(">> Failed!"); + } + + //clean up + TeleportManager.instance.reset(); + } + + public static boolean testBasicAddRemove() + { + //just test to make sure no exceptions are thrown + try + { + TeleportManager.instance.reset(); + PipeBehaviorTeleportItems pipe = new PipeBehaviorTeleportItems(null); + + pipe.setFrequency(3); + TeleportManager.instance.add(pipe, pipe.getFrequency()); + + TeleportManager.instance.remove(pipe, pipe.getFrequency()); + } + catch(Exception ex) + { + ex.printStackTrace(); + return false; + } + + return true; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static boolean testGetConnectedPipesBasic() + { + TeleportManager.instance.reset(); + PipeBehaviorTeleportItems pipe1 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe2 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe3 = new PipeBehaviorTeleportItems(null); + + pipe1.setFrequency(3); + pipe2.setFrequency(3); + pipe3.setFrequency(3); + + pipe1.state = 0x3; + pipe2.state = 0x3; + pipe3.state = 0x3; + + pipe1.ownerUUID = UUID.randomUUID(); + pipe2.ownerUUID = UUID.randomUUID(); + pipe3.ownerUUID = UUID.randomUUID(); + + pipe1.isPublic = true; + pipe2.isPublic = true; + pipe3.isPublic = true; + + TeleportManager.instance.add(pipe1, 3); + TeleportManager.instance.add(pipe2, 3); + TeleportManager.instance.add(pipe3, 3); + + ArrayList pipesList = (ArrayList)TeleportManager.instance.getConnectedPipes(pipe1, true, true); + + if(!(pipesList.size() == 2 && (pipesList.contains(pipe2) && pipesList.contains(pipe3)))) + { + return false; + } + + TeleportManager.instance.remove(pipe1, 3); + TeleportManager.instance.remove(pipe2, 3); + TeleportManager.instance.remove(pipe3, 3); + return true; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static boolean testDuplicateRemoval() + { + TeleportManager.instance.reset(); + PipeBehaviorTeleportItems pipe1 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe2 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe3 = new PipeBehaviorTeleportItems(null); + + pipe1.setFrequency(3); + pipe2.setFrequency(3); + pipe3.setFrequency(3); + + pipe1.state = 0x3; + pipe2.state = 0x3; + pipe3.state = 0x3; + + pipe1.ownerUUID = UUID.randomUUID(); + pipe2.ownerUUID = UUID.randomUUID(); + pipe3.ownerUUID = pipe2.ownerUUID; // Muahahahah! I am a glitched duplicate, bet you can't remove me! + + pipe1.isPublic = true; + pipe2.isPublic = true; + pipe3.isPublic = true; + + TeleportManager.instance.add(pipe1, 3); + TeleportManager.instance.add(pipe3, 3); + TeleportManager.instance.add(pipe2, 3); + + ArrayList pipesList = (ArrayList)TeleportManager.instance.getConnectedPipes(pipe1, true, true); + + if(!(pipesList.size() == 1 && (pipesList.contains(pipe2)))) + { + return false; + } + + TeleportManager.instance.remove(pipe2, 3); + + pipesList = (ArrayList)TeleportManager.instance.getConnectedPipes(pipe1, true, true); + if(!(pipesList.size() == 0)) + { + return false; + } + + TeleportManager.instance.remove(pipe1, 3); + return true; + } + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static boolean testGetConnectedPipesSendReceive() + { + TeleportManager.instance.reset(); + PipeBehaviorTeleportItems pipe1 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe2 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe3 = new PipeBehaviorTeleportItems(null); + + pipe1.setFrequency(3); + pipe2.setFrequency(3); + pipe3.setFrequency(3); + + pipe1.state = 0x3; + pipe2.state = 0x1; + pipe3.state = 0x2; + + pipe1.ownerUUID = UUID.randomUUID(); + pipe2.ownerUUID = UUID.randomUUID(); + pipe3.ownerUUID = UUID.randomUUID(); + + pipe1.isPublic = true; + pipe2.isPublic = true; + pipe3.isPublic = true; + + TeleportManager.instance.add(pipe1, 3); + TeleportManager.instance.add(pipe2, 3); + TeleportManager.instance.add(pipe3, 3); + + //get a list of pipes which can send to pipe1 + ArrayList sendablePipes = (ArrayList)TeleportManager.instance.getConnectedPipes(pipe1, true, false); + + if(!(sendablePipes.size() == 1 && (sendablePipes.contains(pipe2) && !(sendablePipes.contains(pipe1) && sendablePipes.contains(pipe3))))) + { + return false; + } + + //get a list of pipes which pipe1 can send to + ArrayList receivingPipes = (ArrayList)TeleportManager.instance.getConnectedPipes(pipe1, false, true); + + if(!(receivingPipes.size() == 1 && (receivingPipes.contains(pipe3) && !(receivingPipes.contains(pipe1) && receivingPipes.contains(pipe2))))) + { + return false; + } + + TeleportManager.instance.remove(pipe1, 3); + TeleportManager.instance.remove(pipe2, 3); + TeleportManager.instance.remove(pipe3, 3); + return true; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static boolean testGetConnectedPipesRealUseCase() + { + TeleportManager.instance.reset(); + PipeBehaviorTeleportItems pipe1 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe2 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe3 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe4 = new PipeBehaviorTeleportItems(null); + PipeBehaviorTeleportItems pipe5 = new PipeBehaviorTeleportItems(null); + + pipe1.setFrequency(3); + pipe2.setFrequency(3); + pipe3.setFrequency(3); + pipe4.setFrequency(3); + pipe5.setFrequency(7); + + pipe1.state = 0x1; //send only + pipe2.state = 0x3; //send and receive + pipe3.state = 0x2; //receive only + pipe4.state = 0x1; //send only + pipe5.state = 0x3; //send and receive + + pipe1.isPublic = true; + pipe2.isPublic = true; + pipe3.isPublic = true; + pipe4.isPublic = true; + pipe5.isPublic = true; + + pipe1.ownerUUID = UUID.randomUUID(); + pipe2.ownerUUID = UUID.randomUUID(); + pipe3.ownerUUID = UUID.randomUUID(); + pipe4.ownerUUID = UUID.randomUUID(); + pipe5.ownerUUID = UUID.randomUUID(); + + TeleportManager.instance.add(pipe1, 3); + TeleportManager.instance.add(pipe2, 3); + TeleportManager.instance.add(pipe3, 3); + TeleportManager.instance.add(pipe4, 3); + TeleportManager.instance.add(pipe5, 7); + + ArrayList pipesList = (ArrayList)TeleportManager.instance.getConnectedPipes(pipe1, false, true); + + Log.info(">> getConnectedPipes() returned " + pipesList.size() + " pipes"); + + TeleportManager.instance.remove(pipe1, 3); + TeleportManager.instance.remove(pipe2, 3); + TeleportManager.instance.remove(pipe3, 3); + + if(pipesList.size() == 2) + { + if(pipesList.contains(pipe2) && pipesList.contains(pipe3)) + { + if(!pipesList.contains(pipe4)) + { + return true; + } + } + } + + return false; + } + + +} diff --git a/src/main/java/buildcraft/additionalpipes/textures/Textures.java b/src/main/java/buildcraft/additionalpipes/textures/Textures.java new file mode 100644 index 00000000..1acee98a --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/textures/Textures.java @@ -0,0 +1,35 @@ +package buildcraft.additionalpipes.textures; + +import buildcraft.additionalpipes.gui.GuiJeweledPipe; +import buildcraft.api.core.render.ISprite; +import buildcraft.lib.client.sprite.SpriteHolderRegistry; +import net.minecraft.util.ResourceLocation; + +public class Textures { + + // textures + public static final ResourceLocation ITEMS = new ResourceLocation("textures/atlas/items.png"); + public static final ResourceLocation DISPENSER = new ResourceLocation("textures/gui/container/dispenser.png"); + + public static final String TEXTURE_PATH = "textures"; + + public static final ResourceLocation GUI_TELEPORT = new ResourceLocation("additionalpipes", TEXTURE_PATH + "/gui/background_generic.png"); + public static final ResourceLocation GUI_ADVANCEDWOOD = new ResourceLocation("additionalpipes", TEXTURE_PATH + "/gui/background_adv_wood.png"); + public static final ResourceLocation GUI_DISTRIBUTION = new ResourceLocation("additionalpipes", TEXTURE_PATH + "/gui/background_distribution.png"); + public static final ResourceLocation GUI_PRIORITY = new ResourceLocation("additionalpipes", TEXTURE_PATH + "/gui/background_priority.png"); + public static final ResourceLocation GUI_JEWELED = new ResourceLocation("additionalpipes", TEXTURE_PATH + "/gui/background_jeweled.png"); + + public static final ResourceLocation GUI_OUTLINE_JEWELED[] = new ResourceLocation[GuiJeweledPipe.NUM_TABS]; + + static + { + for(int tabNumber = 1; tabNumber <= GuiJeweledPipe.NUM_TABS; ++tabNumber) + { + GUI_OUTLINE_JEWELED[tabNumber - 1] = new ResourceLocation("additionalpipes", TEXTURE_PATH + "/gui/jeweled_gui_outline_" + tabNumber + ".png"); + } + } + + // gets set by MultiPlayerProxyClient.registerSprites() + public static ISprite TRIGGER_PIPE_CLOSED = SpriteHolderRegistry.getHolder("additionalpipes:items/triggers/pipe_closed"); + +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/GeometryUtils.java b/src/main/java/buildcraft/additionalpipes/utils/GeometryUtils.java new file mode 100644 index 00000000..c8609ec7 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/GeometryUtils.java @@ -0,0 +1,19 @@ +package buildcraft.additionalpipes.utils; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public class GeometryUtils +{ + /** + * From a block position and a 3D point, gets the side of the block closest to that position. + * @param block + * @param point + * @return + */ + public static EnumFacing getNearestSide(BlockPos block, Vec3d point) + { + return EnumFacing.getFacingFromVector((float)(point.x - (block.getX() + 0.5)), (float)(point.y - (block.getY() + 0.5)), (float)(point.z - (block.getZ() + 0.5))); + } +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/InventoryUtils.java b/src/main/java/buildcraft/additionalpipes/utils/InventoryUtils.java new file mode 100644 index 00000000..ebbcb1e4 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/InventoryUtils.java @@ -0,0 +1,121 @@ +package buildcraft.additionalpipes.utils; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.items.IItemHandler; + +public class InventoryUtils +{ + /** + * Find the first free slot in an inventory + * @param inventory + * @return index of the first free slot, or -1 if the container is full + */ + public static int getFirstFreeSlot(IInventory inventory) + { + int size = inventory.getSizeInventory() - 1; + for(int index = 0; index <= size; ++index) + { + if(inventory.getStackInSlot(index) == null) + { + return index; + } + } + + return -1; + } + + /** + * Test if an item can be added to an inventory + * @param inventory + * @return index of the first free slot, or -1 if the container is full + */ + public static boolean canItemFit(IInventory inventory, ItemStack stack) + { + int size = inventory.getSizeInventory() - 1; + + int stackLimit = inventory.getInventoryStackLimit(); + int itemsLeftToAdd = stack.getCount(); + for(int index = 0; index <= size; ++index) + { + ItemStack slotStack = inventory.getStackInSlot(index); + if(slotStack == null) + { + return true; + } + else if(slotStack.getItem() == stack.getItem() && slotStack.getItemDamage() == stack.getItemDamage()) + { + if(slotStack.getCount() + itemsLeftToAdd <= stackLimit) + { + return true; + } + else + { + itemsLeftToAdd -= stackLimit - slotStack.getCount(); + } + } + } + + return false; + } + + /** + * Check if the given inventory contains an item + * @param matchMeta + * @param matchNBT + * @param stack + * @param inventory + * @return + */ + public static boolean containsItem(boolean matchMeta, boolean matchNBT, ItemStack stack, IItemHandler inventory) + { + int size = inventory.getSlots() - 1; + for(int index = 0; index <= size; ++index) + { + ItemStack slotStack = inventory.getStackInSlot(index); + if(slotStack != null) + { + if(slotStack.getItem() == stack.getItem()) + { + if(!matchMeta || stack.getItemDamage() == slotStack.getItemDamage()) + { + if(!matchNBT || (!slotStack.hasTagCompound() && !stack.hasTagCompound())) + { + return true; + } + if((slotStack.hasTagCompound() && stack.hasTagCompound()) && slotStack.getTagCompound().equals(stack.getTagCompound())) + { + return true; + } + } + } + } + } + return false; + } + + /** + * Returns an ordered list of all stacks in the ItemHandler. Includes empty itemstacks, but not null ones. + * @param handler + * @return + */ + public static NonNullList getItems(IItemHandler handler) + { + int invSize = handler.getSlots(); + + NonNullList stacks = NonNullList.create(); + + for(int index = 0; index < invSize; ++index) + { + ItemStack stack = handler.getStackInSlot(index); + + if(stack != null) + { + stacks.add(stack); + } + } + + return stacks; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/ItemHandlerPresenceFilter.java b/src/main/java/buildcraft/additionalpipes/utils/ItemHandlerPresenceFilter.java new file mode 100644 index 00000000..21e6daa9 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/ItemHandlerPresenceFilter.java @@ -0,0 +1,46 @@ +package buildcraft.additionalpipes.utils; + +import javax.annotation.Nonnull; + +import buildcraft.api.core.IStackFilter; +import buildcraft.lib.misc.StackUtil; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; + +/** + * StackFilter that puses an ItemHandler as a whitelist or blacklist + * @author jamie + * + */ +public class ItemHandlerPresenceFilter implements IStackFilter +{ + private IItemHandler handler; + private boolean exclude; + + /** + * + * @param handler + * @param exclude If true, the filter will accept any item but those contained in handler. If false, the filter will accept any item that is contained in handler. + */ + public ItemHandlerPresenceFilter(IItemHandler handler, boolean exclude) + { + this.handler = handler; + this.exclude = exclude; + } + + @Override + public boolean matches(@Nonnull ItemStack stack) + { + for (int slot = 0; slot < handler.getSlots(); slot++) + { + if (StackUtil.isMatchingItem(handler.getStackInSlot(slot), stack)) + { + // if we are excluding, and we found a match, then return false + // if we are not excluding, and we found a match, return true + return !exclude; + } + } + + return exclude; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/Log.java b/src/main/java/buildcraft/additionalpipes/utils/Log.java new file mode 100644 index 00000000..39486df1 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/Log.java @@ -0,0 +1,59 @@ +package buildcraft.additionalpipes.utils; + + +import org.apache.logging.log4j.Level; + +import buildcraft.additionalpipes.APConfiguration; +import buildcraft.additionalpipes.AdditionalPipes; +import net.minecraftforge.fml.common.FMLLog; + +public class Log +{ + public static void log(Level logLevel, Object object) + { + FMLLog.log(AdditionalPipes.NAME, logLevel, String.valueOf(object)); + } + + public static void all(Object object) + { + log(Level.ALL, object); + } + + public static void debug(Object object) + { + if(APConfiguration.enableDebugLog) + { + log(Level.INFO, object); + } + } + + public static void error(Object object) + { + log(Level.ERROR, object); + } + + public static void unexpected(Object object) + { + log(Level.ERROR, "...what? " + object); + } + + public static void fatal(Object object) + { + log(Level.FATAL, object); + } + + public static void info(Object object) + { + log(Level.INFO, object); + } + + public static void trace(Object object) + { + log(Level.TRACE, object); + } + + public static void warn(Object object) + { + log(Level.WARN, object); + } +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/NetworkUtils.java b/src/main/java/buildcraft/additionalpipes/utils/NetworkUtils.java new file mode 100644 index 00000000..c8b3b0af --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/NetworkUtils.java @@ -0,0 +1,47 @@ +package buildcraft.additionalpipes.utils; + +import io.netty.buffer.ByteBuf; + +public class NetworkUtils +{ + /** + * Write an array of booleans to a ByteBuf. Compacts the booleans into bytes. + * + * Use readBooleanArray() to deserialize. + * @param buf + * @param booleans + */ + public static void writeBooleanArray(ByteBuf buf, boolean[] booleans) + { + //transform to byte array + byte[] bytes = new byte[(booleans.length / 8) + 1]; + + Log.debug("Fitting " + booleans.length + " booleans in " + bytes.length + " byte" + (bytes.length > 1 ? "s" : "")); + + for(int index = 0; index < booleans.length; ++index) + { + bytes[index / 8] |= (booleans[index] ? 1 : 0) << (index % 8); + } + + buf.writeBytes(bytes); + } + + /** + * Reads an array of booleans read from the provided ByteBuf. + * @param buf + * @param len how many booleans you want to read. + * @return + */ + public static boolean[] readBooleanArray(ByteBuf buf, int len) + { + byte[] bytes = new byte[(len / 8) + 1]; + buf.readBytes(bytes); + + boolean[] booleans = new boolean[len]; + for(int index = 0; index < len; ++index) + { + booleans[index] = ((bytes[index / 8] >> index % 8) & 1) == 1; + } + return booleans; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/PipeCreator.java b/src/main/java/buildcraft/additionalpipes/utils/PipeCreator.java new file mode 100644 index 00000000..bf86a322 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/PipeCreator.java @@ -0,0 +1,32 @@ +package buildcraft.additionalpipes.utils; + +import buildcraft.additionalpipes.AdditionalPipes; +import buildcraft.api.transport.pipe.PipeDefinition; +import buildcraft.lib.registry.RegistrationHelper; +import buildcraft.transport.item.ItemPipeHolder; + +public class PipeCreator +{ + + // saves items during preInit, then registers them during the RegisterEvent + private static final RegistrationHelper regHelper = new RegistrationHelper(); + + + /** + * Creates and registers a buildcraft pipe from the provided definition. + * @param clas + * @return + */ + public static ItemPipeHolder createPipeItem(PipeDefinition pipeDef) + { + ItemPipeHolder item = ItemPipeHolder.create(pipeDef); + item.setRegistryName(pipeDef.identifier.getResourcePath()); + item.setUnlocalizedName("pipe.ap." + pipeDef.identifier.getResourcePath()); + item.registerWithPipeApi(); + item.setCreativeTab(AdditionalPipes.instance.creativeTab); + + regHelper.addItem(item); + + return item; + } +} diff --git a/src/main/java/buildcraft/additionalpipes/utils/PlayerUtils.java b/src/main/java/buildcraft/additionalpipes/utils/PlayerUtils.java new file mode 100644 index 00000000..a41e9493 --- /dev/null +++ b/src/main/java/buildcraft/additionalpipes/utils/PlayerUtils.java @@ -0,0 +1,18 @@ +package buildcraft.additionalpipes.utils; + +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; + +public class PlayerUtils +{ + /** + * Get a player's UUID. + * Calling this is easier than the more complicated default syntax. + * @param player + */ + public static UUID getUUID(EntityPlayer player) + { + return EntityPlayer.getUUID(player.getGameProfile()); + } +} diff --git a/src/main/resources/assets/.gitignore b/src/main/resources/assets/.gitignore new file mode 100644 index 00000000..a500fd50 --- /dev/null +++ b/src/main/resources/assets/.gitignore @@ -0,0 +1 @@ +/buildcraft diff --git a/src/main/resources/assets/additionalpipes/blockstates/teleport_tether.json b/src/main/resources/assets/additionalpipes/blockstates/teleport_tether.json new file mode 100644 index 00000000..c85e8d95 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/blockstates/teleport_tether.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "additionalpipes:teleport_tether" } + } +} diff --git a/src/main/resources/assets/additionalpipes/compat/buildcraft/guide/contents.json b/src/main/resources/assets/additionalpipes/compat/buildcraft/guide/contents.json new file mode 100644 index 00000000..08947897 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/compat/buildcraft/guide/contents.json @@ -0,0 +1,17 @@ +{ + "entry_mask": ":compat/buildcraft/guide///", + "default_tags": { + "mod": "additionalpipes" + }, + "contents": [ + { + "title": "item.pipe.ap.pipe_items_teleport.name", + "item_stack": "(additionalpipes:pipe_items_teleport)", + "page": "pipe_items_teleport.md", + "type_tags": { + "type": "pipe", + "sub_type": "pipe_item" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/compat/buildcraft/guide/en_us/pipe/pipe_items_teleport.md b/src/main/resources/assets/additionalpipes/compat/buildcraft/guide/en_us/pipe/pipe_items_teleport.md new file mode 100644 index 00000000..6990328f --- /dev/null +++ b/src/main/resources/assets/additionalpipes/compat/buildcraft/guide/en_us/pipe/pipe_items_teleport.md @@ -0,0 +1,10 @@ + + +Using a laser-charged microsingluarity contained through complex array of chipsets that create a magnetic field bottle, you have unlocked the secret of teleportation. +The Item Teleport Pipe instantly transports items to and from other pipes with the same frequency. If a teleport pipe has no valid outputs, it will drop its items on the ground. +Teleport Pipes also utilize advanced quantum plurifactor authentication based on the universal constant known only as the "UUID". When set to Private mode, they can only be adjusted by you, and can only send or recieve items from pipes also placed by you and set to Private. + + + + + \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/lang/de_de.lang b/src/main/resources/assets/additionalpipes/lang/de_de.lang new file mode 100644 index 00000000..fe56e337 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/de_de.lang @@ -0,0 +1,101 @@ +item.pipe.ap.pipe_items_priority.name=Priorität Einführungsrohr +item.pipe.ap.pipe_items_adv_wood.name=Fortgeschr. Hölzernes Transportrohr +item.pipe.ap.pipe_items_gravity_feed.name=Schwerkrafttransportrohr +item.pipe.ap.pipe_items_distribution.name=Verteilung Transportrohr +item.pipe.ap.pipe_items_closed.name=Geschlossene Transportrohr +item.pipe.ap.pipe_items_teleport.name=Teleportierendes Transportrohr +item.pipe.ap.pipe_fluids_teleport.name=Teleportierendes Wasserrohr +item.pipe.ap.pipe_power_teleport.name=Teleportierende Energieleitung [WIP] +item.pipe.ap.pipe_power_switch.name=Schaltbare Energieleitung +item.pipe.ap.pipe_fluids_switch.name=Schaltbares Wasserrohr +item.pipe.ap.pipe_items_switch.name=Schaltbares Transportrohr +item.pipe.ap.pipe_fluids_water_pump.name=Wasserpumprohr +item.pipe.ap.pipe_items_addition.name=Zusatztransportrohr +item.pipe.ap.pipe_items_jeweled.name=Juwelenbesetzt Transportrohr + +#regular items & blocks +item.dog_deaggravator.name=Dog Deaggravator +tile.teleport_tether.name=Teleport Tether [WIP] + +# Priority Insertion Pipe +gui.priority_insertion.title=Priorität Einführungsrohr + +#Distribution Pipe +gui.distribution_pipe.title=Verteilung Transportrohr + +# Pipe Tooltips +tip.pipe.ap.pipe_items_priority=Füllt jede verbundene Seite in einer benutzerdefinierten Reihenfolge +tip.pipe.ap.pipe_items_adv_wood=Extraktionsrohr für einfaches Filtern von Gegenständen +tip.pipe.ap.pipe_items_gravity_feed=Extrahiert Gegenstände langsam aus dem unteren Bereich eines Inventars, ohne dass Strom benötigt wird +tip.pipe.ap.pipe_items_teleport=Transportiert Gegenstände sofort zwischen verbundenen Rohren +tip.pipe.ap.pipe_items_distribution=Gibt ein konfigurierbares Verhältnis von Elementen zu jeder Seite aus +tip.pipe.ap.pipe_items_closed=Speichert die Objekte in ihrem internen Inventar, anstatt sie zu löschen +tip.pipe.ap.pipe_fluids_teleport=Instantly transports fluids between connected pipes +tip.pipe.ap.pipe_power_teleport=Transportiert Flüssigkeiten sofort zwischen angeschlossenen Rohren +tip.pipe.ap.pipe_power_switch=Trennt die Verbindung zu benachbarten Rohren, wenn ein Redstone-Signal empfangen wird +tip.pipe.ap.pipe_fluids_switch=Trennt die Verbindung zu benachbarten Rohren, wenn ein Redstone-Signal empfangen wird +tip.pipe.ap.pipe_items_switch=Trennt die Verbindung zu benachbarten Rohren, wenn ein Redstone-Signal empfangen wird +tip.pipe.ap.pipe_fluids_water_pump=Gibt eine kleine Menge Wasser aus, wenn es über einem Wasserquellenblock platziert wird +tip.pipe.ap.pipe_items_addition=Fügt Gegenstände nur dann zu benachbarten Inventaren hinzu, wenn sie bereits über diesen Gegenstand verfügen +tip.pipe.ap.pipe_items_jeweled=Hochleistungsfähiges und konfigurierbares Sortierrohr + +# Jeweled Pipe GUI +gui.jeweled_pipe.title=Juwelenbesetzt Transportrohr +#tab names +gui.jeweled_pipe.tab.up=Oben +gui.jeweled_pipe.tab.down=Unten +gui.jeweled_pipe.tab.north=Nord +gui.jeweled_pipe.tab.south=Süd +gui.jeweled_pipe.tab.east=Ost +gui.jeweled_pipe.tab.west=West +#buttons +gui.jeweled_pipe.match=Match: +gui.jeweled_pipe.NBT=NBT +gui.jeweled_pipe.metadata=Meta +gui.jeweled_pipe.acceptUnsorted=Akzept. unsortiert + +# Closed Pipe GUI +gui.closed_pipe.title=Geschlossenes Rohr + +# Adv. Wood Pipe GUI +gui.advwood_pipe.title=Fortgeschr. Hölzernes Transportrohr +gui.advwood_pipe.blacklist=Diese Gegenstände sind ausgeschlossen +gui.advwood_pipe.whitelist=Diese Gegenstände sind erforderlich + +# Teleport Pipe GUI +# NOTE: "ledger" refers to the menu that expands on the side of the Teleport Pipe GUI when you click the icon +gui.teleport.ledger.title=Verbundene Rohre +gui.teleport.ledger.owner=Eigentümer: %s +gui.teleport.ledger.outputs=Ausgang: %d +gui.teleport.ledger.inputs=Eingang: %s +gui.teleport.frequency=Häufigkeit: %d +gui.teleport.coordPair=Koordinaten: (%d, %d, %d) +gui.teleport.send_only=Nur senden +gui.teleport.send_and_receive=Senden & empfangen +gui.teleport.receive_only=Nur empfangen +gui.teleport.disabled=Deaktiviert +gui.teleport.public=Öffentlich +gui.teleport.private=Privat + +# name of "closed pipe is closed" trigger +trigger.pipe_closed=Rohr geschlossen (Gegenstände lagern) + +key.lasers=Chunk ladegrenze anzeigen + +#tooltips for teleport pipes +tip.teleportPipe=Schluss mit langen Pipelines! + +tooltip.dog_deaggravator=Beruhigt deine Hunde + +itemGroup.apcreativetab=Zusätzliche Rohre + +# chat stuff +command.ap.usage=Verwendung: /additionalpipes teleport +command.ap.pipelist_header=Teleportierendes Rohr: +message.ap.accessdenied=Zugriff verweigert! Diese Rohr gehört %s + +# Subtitle for when the Dog Deaggravator is used +subtitle.ap.dog_deaggravator=Glocke läutet + +# Name of Additional Pipes chapter in the BC Guide +buildcraft.guide.chapter.mod.additionalpipes=Additional Pipes diff --git a/src/main/resources/assets/additionalpipes/lang/en_us.lang b/src/main/resources/assets/additionalpipes/lang/en_us.lang new file mode 100644 index 00000000..704881af --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/en_us.lang @@ -0,0 +1,103 @@ +item.pipe.ap.pipe_items_priority.name=Priority Insertion Pipe +item.pipe.ap.pipe_items_adv_wood.name=Adv. Wooden Transport Pipe +item.pipe.ap.pipe_items_gravity_feed.name=Gravity Feed Transport Pipe +item.pipe.ap.pipe_items_distribution.name=Distribution Transport Pipe +item.pipe.ap.pipe_items_closed.name=Closed Transport Pipe +item.pipe.ap.pipe_items_teleport.name=Item Teleport Pipe +item.pipe.ap.pipe_fluids_teleport.name=Fluid Teleport Pipe +item.pipe.ap.pipe_power_teleport.name=Power Teleport Pipe [WIP] +item.pipe.ap.pipe_power_switch.name=Switch Kinesis Pipe +item.pipe.ap.pipe_fluids_switch.name=Switch Fluid Pipe +item.pipe.ap.pipe_items_switch.name=Switch Transport Pipe +item.pipe.ap.pipe_fluids_water_pump.name=Water Pump Pipe +item.pipe.ap.pipe_items_addition.name=Addition Transport Pipe +item.pipe.ap.pipe_items_jeweled.name=Jeweled Transport Pipe + +#regular items & blocks +item.dog_deaggravator.name=Dog Deaggravator +tile.teleport_tether.name=Teleport Tether + +# Priority Insertion Pipe +gui.priority_insertion.title=Priority Insertion Pipe + +#Distribution Pipe +gui.distribution_pipe.title=Distribution Pipe + +# Pipe Tooltips +tip.pipe.ap.pipe_items_priority=Fills each connected side in a user-defined order +tip.pipe.ap.pipe_items_adv_wood=Extraction pipe allowing simple item filtering +tip.pipe.ap.pipe_items_gravity_feed=Extracts items slowly from the bottom of an inventory without needing power +tip.pipe.ap.pipe_items_teleport=Instantly transports items between linked pipes +tip.pipe.ap.pipe_items_distribution=Outputs a configurable ratio of items to each side +tip.pipe.ap.pipe_items_closed=Instead of dropping items, stores them in its internal inventory +tip.pipe.ap.pipe_fluids_teleport=Instantly transports fluids between connected pipes +tip.pipe.ap.pipe_power_teleport=Instantly transports power between connected pipes +tip.pipe.ap.pipe_power_switch=Disconnects from neighboring pipes if it receives a redstone signal +tip.pipe.ap.pipe_fluids_switch=Disconnects from neighboring pipes if it receives a redstone signal +tip.pipe.ap.pipe_items_switch=Disconnects from neighboring pipes if it receives a redstone signal +tip.pipe.ap.pipe_fluids_water_pump=Outputs a small amount of water if placed over a water source block +tip.pipe.ap.pipe_items_addition=Adds items to adjacent inventories only if they already have that item +tip.pipe.ap.pipe_items_jeweled=Highly capable and configurable sorting pipe + +# Jeweled Pipe GUI +gui.jeweled_pipe.title=Jeweled Pipe +#tab names +gui.jeweled_pipe.tab.up=Up +gui.jeweled_pipe.tab.down=Down +gui.jeweled_pipe.tab.north=North +gui.jeweled_pipe.tab.south=South +gui.jeweled_pipe.tab.east=East +gui.jeweled_pipe.tab.west=West +#buttons +gui.jeweled_pipe.match=Match: +gui.jeweled_pipe.NBT=NBT +gui.jeweled_pipe.metadata=Meta +gui.jeweled_pipe.acceptUnsorted=Accept Unsorted + +# Closed Pipe GUI +gui.closed_pipe.title=Closed Pipe + +# Adv. Wood Pipe GUI +gui.advwood_pipe.title=Advanced Wooden Pipe +gui.advwood_pipe.blacklist=These items are excluded +gui.advwood_pipe.whitelist=These items are required + +# Teleport Pipe GUI +# NOTE: "ledger" refers to the menu that expands on the side of the Teleport Pipe GUI when you click the icon +gui.teleport.ledger.title=Connected Pipes +gui.teleport.ledger.owner=Owner: %s +gui.teleport.ledger.outputs=Outputs: %d +gui.teleport.ledger.inputs=Inputs: %s +gui.teleport.frequency=Frequency: %d +gui.teleport.coordPair=Coords: (%d, %d, %d) +gui.teleport.send_only=Send Only +gui.teleport.send_and_receive=Send & Receive +gui.teleport.receive_only=Receive Only +gui.teleport.disabled=Disabled +gui.teleport.public=Public +gui.teleport.private=Private + +# name of "closed pipe is closed" trigger +trigger.pipe_closed=Pipe Closed (Storing Items) + +key.lasers=Show chunk load boundaries + +#tooltips for teleport pipes +tip.teleportPipe=No more long pipelines! + +tooltip.dog_deaggravator=Calms down your dogs + +tooltip.teleport_tether_crafting_disabled=Crafting disabled by config + +itemGroup.apcreativetab=Additional Pipes + +# chat stuff +command.ap.usage=Usage: /additionalpipes teleport +command.ap.pipelist_header=Teleport Pipes: +message.ap.accessdenied=Access denied! This pipe belongs to %s + +# Subtitle for when the Dog Deaggravator is used +subtitle.ap.dog_deaggravator=Bell ringing + +# Name of Additional Pipes chapter in the BC Guide +buildcraft.guide.chapter.mod.additionalpipes=Additional Pipes diff --git a/src/main/resources/assets/additionalpipes/lang/es_es.lang b/src/main/resources/assets/additionalpipes/lang/es_es.lang new file mode 100644 index 00000000..9f26729b --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/es_es.lang @@ -0,0 +1,14 @@ +tile.teleport_tether.name=Atadura de Teleportación +item.PipeLiquidsRedstone.name=Tubería de Fluidos de Piedra Roja +item.PipeItemsRedstone.name=Tubería de Transporte de Piedra Roja +item.PipeItemsAdvancedInsertion.name=Tubería de Transporte de Inserción +item.pipe.ap.pipe_items_adv_wood.name=Tubería de Transporte de Madera Avanzada +item.pipe.ap.pipe_items_distribution.name=Tubería de Transporte de Distribución +item.pipe.ap.pipe_items_closed.name=Tuberia de Transporte Cerrada +item.pipe.ap.pipe_items_teleport.name=Tubería de Transporte Escalonada +item.pipe.ap.pipe_fluids_teleport.name=Tubería de Fluidos Escalonada +item.pipe.ap.pipe_power_teleport.name=Tubería Kinetica Escalonada +item.pipe.ap.pipe_power_switch.name=Tubería Kinetica con Interruptor +item.pipe.ap.pipe_fluids_switch.name=Tubería de Fluidos con Interruptor +item.pipe.ap.pipe_items_switch.name=Tubería de Transporte con Interruptor +item.pipe.ap.pipe_fluids_water_pump.name=Tubería de Fluidos con Bomba diff --git a/src/main/resources/assets/additionalpipes/lang/fr_fr.lang b/src/main/resources/assets/additionalpipes/lang/fr_fr.lang new file mode 100644 index 00000000..e8a0b076 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/fr_fr.lang @@ -0,0 +1,84 @@ +item.pipe.ap.pipe_items_priority.name=Tuyau de Insertion Priotaire +item.pipe.ap.pipe_items_adv_wood.name=Tuyau de Transport en Bois Avancée +item.pipe.ap.pipe_items_gravity_feed.name=Tuyau de Transport par Gravité +item.pipe.ap.pipe_items_distribution.name=Tuyau de Transport Distributeur +item.pipe.ap.pipe_items_closed.name=Tuyau de Transport Ferme +item.pipe.ap.pipe_items_teleport.name=Tuyau de Téléportation d'Items +item.pipe.ap.pipe_fluids_teleport.name=Tuyau de Téléportation de Fluide +item.pipe.ap.pipe_power_teleport.name=Tuyau the Teleport d'Énergie [Travail en Progrès] +item.pipe.ap.pipe_power_switch.name=Tuyau de Changement Cinétique +item.pipe.ap.pipe_fluids_switch.name=Tuyau de Changement Fluide +item.pipe.ap.pipe_items_switch.name=Tuyau Changement Transport +item.pipe.ap.pipe_fluids_water_pump.name=Tuyau de Pompe d'Eau +item.pipe.ap.pipe_items_addition.name=Tuyau d'Addition Transport +item.PipeLiquidsObsidian.name=Tuyau Obsidienne de Fluide +item.pipe.ap.pipe_items_jeweled.name=Tuyau de Transport Orné de Joyau + +#regular items & blocks +item.dog_deaggravator.name=Anti-Aggravateur pour Chien +tile.teleport_tether.name=Attache de Téléport + +# Priority Insertion Pipe +gui.priority_insertion.title=Tuyau d'Insertion Prioritaire + +#Distribution Pipe +gui.distribution_pipe.title=Tuyau de Distribution + +# Jeweled Pipe GUI +gui.jeweled_pipe.title=Tuyau de Transport Orné de Joyau +#tab names +gui.jeweled_pipe.tab.up=En Haut +gui.jeweled_pipe.tab.down=En Bas +gui.jeweled_pipe.tab.north=Nord +gui.jeweled_pipe.tab.south=Sud +gui.jeweled_pipe.tab.east=Est +gui.jeweled_pipe.tab.west=Ouest +#buttons +gui.jeweled_pipe.match=Égaler: +gui.jeweled_pipe.NBT=NBT +gui.jeweled_pipe.metadata=Meta +gui.jeweled_pipe.acceptUnsorted=Acceptez Non Trié + +# Closed Pipe GUI +gui.closed_pipe.title=Tuyau Ferme + +# Adv. Wood Pipe GUI +gui.advwood_pipe.title=Advanced Wooden Pipe +gui.advwood_pipe.blacklist=Ces Items Sont Exclu +gui.advwood_pipe.whitelist=Ces Items Sont Exclu + +# Teleport Pipe GUI +# NOTE: "ledger" refers to the menu that expands on the side of the Teleport Pipe GUI when you click the icon +gui.teleport.ledger.title=Tuyau de Téléport +gui.teleport.ledger.owner=Propriétaire: +gui.teleport.ledger.outputs=Sorties: +gui.teleport.ledger.inputs=Apport: +gui.teleport.frequency=Fréquence: %d +gui.teleport.send_only=Envoy Uniquement +gui.teleport.send_and_receive=Envoy & Recoit +gui.teleport.receive_only=Recoit Uniquement +gui.teleport.disabled=Désactivée +gui.teleport.public=Publique +gui.teleport.private=Privé + +# name of "closed pipe is closed" trigger +trigger.pipe_closed=Tuyau Ferme (Ranger Items) + +key.lasers=Révéler limite de tronçon chargement + +#tooltips for teleport pipes +tip.teleportPipe=Pas plus de pipeline longues! + +tooltip.dog_deaggravator=Pacifier vos Chiens + +itemGroup.apcreativetab=Tuyau Additionel + +# chat stuff +command.ap.usage=/tuyauadditonel teleport +command.ap.pipelist_header=Tuyau Téléport: +message.ap.accessdenied=Accès refusé! Ce tuyau appartien à %s + +# Subtitle for when the Dog Deaggravator is used +subtitle.ap.dog_deaggravator=Dingdingding! + +#Translation by WingofTech diff --git a/src/main/resources/assets/additionalpipes/lang/ja_jp.lang b/src/main/resources/assets/additionalpipes/lang/ja_jp.lang new file mode 100644 index 00000000..3426eca6 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/ja_jp.lang @@ -0,0 +1,55 @@ +#AdditionalPipes ver.4.7.6-jp by Ellen Kasacon +tile.teleport_tether.name=テレポートテザー +item.pipe.ap.pipe_items_priority.name=分配挿入パイプ(アイテム) +item.PipeItemsAdvancedInsertion.name=[非推奨] 挿入パイプ(アイテム) +item.pipe.ap.pipe_items_adv_wood.name=木パイプ改(アイテム) +item.pipe.ap.pipe_items_gravity_feed.name=重力パイプ(アイテム) +item.pipe.ap.pipe_items_distribution.name=分配パイプ(アイテム) +item.pipe.ap.pipe_items_closed.name=閉鎖パイプ(アイテム) +item.pipe.ap.pipe_items_teleport.name=テレポートパイプ(アイテム) +item.pipe.ap.pipe_fluids_teleport.name=テレポートパイプ(液体) +item.pipe.ap.pipe_power_teleport.name=テレポートパイプ(エネルギー) +item.PipeLogisticsTeleport.name=Logistics接続パイプ [テスト版] +item.pipe.ap.pipe_power_switch.name=絶縁パイプ(エネルギー) +item.pipe.ap.pipe_fluids_switch.name=絶縁パイプ(液体) +item.pipe.ap.pipe_items_switch.name=絶縁パイプ(アイテム) +item.pipe.ap.pipe_fluids_water_pump.name=ポンプパイプ +item.pipe.ap.pipe_items_addition.name=同種挿入パイプ(アイテム) +item.PipeLiquidsObsidian.name=黒曜石パイプ(液体) +item.pipe.ap.pipe_items_jeweled.name=宝石パイプ(アイテム) + +#その他のアイテム/ブロック +item.dog_deaggravator.name=オオカミ威嚇装置 +tile.teleport_tether.name=テレポートテザー + +gui.pipeItemsDistributor=分配パイプ +gui.pipeItemsPriorityInsertion=分配挿入パイプ +gui.PipeItemsAdvancedWood=木パイプ改 +gui.jeweled_pipe=宝石パイプ + +#宝石パイプGUIのタブ名 +gui.tab.up=上 +gui.tab.down=下 +gui.tab.north=北 +gui.tab.south=南 +gui.tab.east=東 +gui.tab.west=西 + +gui.match=一致: +gui.NBT=タグ +gui.metadata=メタ +gui.acceptUnsorted=未指定を許可 + +gate.pipeClosed=パイプが閉鎖(内部にアイテムを貯蔵) + +key.lasers=チャンクの境界を表示 + +#ツールチップ +tip.teleportPipe=長い配管ともおさらば! +tip.teleportLogisticsPipe=Logistics Pipesと接続します。 + +tooltip.dog_deaggravator=攻撃的なオオカミをおとなしくさせます + +itemGroup.apcreativetab=Additional Pipes + +command.ap.usage=/additionalpipes teleport <アイテム|液体|エネルギー> \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/lang/pt_br.lang b/src/main/resources/assets/additionalpipes/lang/pt_br.lang new file mode 100644 index 00000000..ee11253d --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/pt_br.lang @@ -0,0 +1,101 @@ +item.pipe.ap.pipe_items_priority.name=Tubo de Inserção por Prioridade +item.pipe.ap.pipe_items_adv_wood.name=Tubo de Transporte Avançado de Madeira +item.pipe.ap.pipe_items_gravity_feed.name=Tubo de Alimentação por Gravidade +item.pipe.ap.pipe_items_distribution.name=Tubo de Distribuição de Transporte +item.pipe.ap.pipe_items_closed.name=Tubo de Transporte Fechado +item.pipe.ap.pipe_items_teleport.name=Tubo de Teletransporte +item.pipe.ap.pipe_fluids_teleport.name=Tubo de Teletransporte de Fluídos +item.pipe.ap.pipe_power_teleport.name=Tubo de Teletransporte de Energia +item.pipe.ap.pipe_power_switch.name=Tubo de Troca Kinético +item.pipe.ap.pipe_fluids_switch.name=Tubo de Troca de Fluido +item.pipe.ap.pipe_items_switch.name=Tubo de Troca de Transporte +item.pipe.ap.pipe_fluids_water_pump.name=Tubo da Bomba d'água +item.pipe.ap.pipe_items_addition.name=Addition Transport Pipe +item.pipe.ap.pipe_items_jeweled.name=Tubo de Transporte de Diamante Avançado + +#regular items & blocks +item.dog_deaggravator.name=Acalmador de Cães +tile.teleport_tether.name=Fluxo de teletransporte + +# Priority Insertion Pipe +gui.priority_insertion.title=Tubo de Inserção por Prioridade + +#Distribution Pipe +gui.distribution_pipe.title=Distribution Pipe + +# Pipe Tooltips +tip.pipe.ap.pipe_items_priority=Fills each connected side in a user-defined order +tip.pipe.ap.pipe_items_adv_wood=Tubo de extração que permite uma simples filtragem de itens +tip.pipe.ap.pipe_items_gravity_feed=Extrai itens devagar, do bloco acima deste tubo, sem precisar de energia +tip.pipe.ap.pipe_items_teleport=Transporta itens entre os tubos ligados no mesmo canal +tip.pipe.ap.pipe_items_distribution=Outputs a configurable ratio of items to each side +tip.pipe.ap.pipe_items_closed=Ao invés de derrubar itens, armazena no inventório interno +tip.pipe.ap.pipe_fluids_teleport=Transporta fluídos entre os tubos ligados no mesmo canal +tip.pipe.ap.pipe_power_teleport=Transporta energia entre os tubos ligados no mesmo canal +tip.pipe.ap.pipe_power_switch=Desconecta dos tubos vizinhos ao receber sinal de redstone +tip.pipe.ap.pipe_fluids_switch=Desconecta dos tubos vizinhos ao receber sinal de redstone +tip.pipe.ap.pipe_items_switch=Desconecta dos tubos vizinhos ao receber sinal de redstone +tip.pipe.ap.pipe_fluids_water_pump=Libera uma pequena quantidade de água se posto abaixo de uma fonte de água +tip.pipe.ap.pipe_items_addition=Adds items to adjacent inventories only if they already have that item +tip.pipe.ap.pipe_items_jeweled=Tubo de diamante avançado, com alta capacidade de roteamento de itens + +# Jeweled Pipe GUI +gui.jeweled_pipe.title=Tubo de Diamante Avançado +#tab names +gui.jeweled_pipe.tab.up=Topo +gui.jeweled_pipe.tab.down=Baixo +gui.jeweled_pipe.tab.north=Norte +gui.jeweled_pipe.tab.south=Sul +gui.jeweled_pipe.tab.east=Leste +gui.jeweled_pipe.tab.west=Oeste +#buttons +gui.jeweled_pipe.match=Match: +gui.jeweled_pipe.NBT=NBT +gui.jeweled_pipe.metadata=Meta +gui.jeweled_pipe.acceptUnsorted=Aceitar desord. + +# Closed Pipe GUI +gui.closed_pipe.title=Closed Pipe + +# Adv. Wood Pipe GUI +gui.advwood_pipe.title=Tubo de Madeira Avançado +gui.advwood_pipe.blacklist=Itens excluídos +gui.advwood_pipe.whitelist=Itens requeridos + +# Teleport Pipe GUI +# NOTE: "ledger" refers to the menu that expands on the side of the Teleport Pipe GUI when you click the icon +gui.teleport.ledger.title=Tubos conectados +gui.teleport.ledger.owner=Dono: %s +gui.teleport.ledger.outputs=Saídas: %d +gui.teleport.ledger.inputs=Entradas: %s +gui.teleport.frequency=Frequência: %d +gui.teleport.coordPair=Coords: (%d, %d, %d) +gui.teleport.send_only=Envio apenas +gui.teleport.send_and_receive=Enviar e Receber +gui.teleport.receive_only=Receber apenas +gui.teleport.disabled=Desativado +gui.teleport.public=Publico +gui.teleport.private=Privado + +# name of "closed pipe is closed" trigger +trigger.pipe_closed=Tubo fechado (armazenando items) + +key.lasers=Mostrar lasers de chunks + +#tooltips for teleport pipes +tip.teleportPipe=Chega de longas tubulações! + +tooltip.dog_deaggravator=Acalma seus cães + +itemGroup.apcreativetab=Additional Pipes + +# chat stuff +command.ap.usage=Usage: /additionalpipes teleport +command.ap.pipelist_header=Teleport Pipes: +message.ap.accessdenied=Acesso negado! Este tubo pertence a %s + +# Subtitle for when the Dog Deaggravator is used +subtitle.ap.dog_deaggravator=Sininho tocando + +# Name of Additional Pipes chapter in the BC Guide +buildcraft.guide.chapter.mod.additionalpipes=Additional Pipes diff --git a/src/main/resources/assets/additionalpipes/lang/ru_ru.lang b/src/main/resources/assets/additionalpipes/lang/ru_ru.lang new file mode 100644 index 00000000..164d9b10 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/ru_ru.lang @@ -0,0 +1,100 @@ +item.pipe.ap.pipe_items_priority.name=Приоритетная вводящая труба +item.pipe.ap.pipe_items_adv_wood.name=Продвинутая деревянная транспортная труба +item.pipe.ap.pipe_items_gravity_feed.name=Гравитационная транспортная труба +item.pipe.ap.pipe_items_distribution.name=Распределяющая транспортная труба +item.pipe.ap.pipe_items_closed.name=Закрытая транспортная труба +item.pipe.ap.pipe_items_teleport.name=Предметная телепортирующая труба +item.pipe.ap.pipe_fluids_teleport.name=Жидкостная телепортирующая труба +item.pipe.ap.pipe_power_teleport.name=Энергетическая телепортирующая труба [WIP] +item.pipe.ap.pipe_power_switch.name=Переключающая энергетическая труба +item.pipe.ap.pipe_fluids_switch.name=Переключающая жидкостная труба +item.pipe.ap.pipe_items_switch.name=Переключающая транспортная труба +item.pipe.ap.pipe_fluids_water_pump.name=Водяная помповая труба +item.pipe.ap.pipe_items_addition.name=Дополнительная транспортная труба +item.pipe.ap.pipe_items_jeweled.name=Драгоценная транспортная труба + +#regular items & blocks +item.dog_deaggravator.name=Колокольчик +tile.teleport_tether.name=Телепорт тизер [WIP] + +# Priority Insertion Pipe +gui.priority_insertion.title=Приоритетная труба + +#Distribution Pipe +gui.distribution_pipe.title=Распределяющая труба + +# Pipe Tooltips +tip.pipe.ap.pipe_items_priority=Fills each connected side in a user-defined order +tip.pipe.ap.pipe_items_adv_wood=Extraction pipe allowing simple item filtering +tip.pipe.ap.pipe_items_gravity_feed=Медленно извлекает предметы из нижней части инвентаря, не нуждается в энергии +tip.pipe.ap.pipe_items_teleport=Позволяет телепортировать предметы между двумя таким трубами настроенными на одну частоту +tip.pipe.ap.pipe_items_distribution=Outputs a configurable ratio of items to each side +tip.pipe.ap.pipe_items_closed=Вместо выкидывания предметов, хранит их во внутреннем инвентаре +tip.pipe.ap.pipe_fluids_teleport=Позволяет телепортировать жидкости между двумя такими трубами, настроенными на одну частоту +tip.pipe.ap.pipe_power_teleport=Позволяет телепортировать энергию BuildCraft между двумя такими трубами, настроенными на одну частоту. +tip.pipe.ap.pipe_power_switch=Отключается от соседних труб, если получает красный сигнал +tip.pipe.ap.pipe_fluids_switch=Отключается от соседних труб, если получает красный сигнал +tip.pipe.ap.pipe_items_switch=Отключается от соседних труб, если получает красный сигнал +tip.pipe.ap.pipe_fluids_water_pump=Outputs a small amount of water if placed over a water source block +tip.pipe.ap.pipe_items_addition=Adds items to adjacent inventories only if they already have that item +tip.pipe.ap.pipe_items_jeweled=Улучшеная сортирующая труба для предметов, имеет много настроек + +# Jeweled Pipe GUI +gui.jeweled_pipe.title=Драгоценная труба +#tab names +gui.jeweled_pipe.tab.up=Верх +gui.jeweled_pipe.tab.down=Низ +gui.jeweled_pipe.tab.north=Север +gui.jeweled_pipe.tab.south=Юг +gui.jeweled_pipe.tab.east=Восток +gui.jeweled_pipe.tab.west=Запал +#buttons +gui.jeweled_pipe.match=Match: +gui.jeweled_pipe.NBT=NBT +gui.jeweled_pipe.metadata=Meta +gui.jeweled_pipe.acceptUnsorted=Accept Unsorted + +# Closed Pipe GUI +gui.closed_pipe.title=Закрытая труба + +# Adv. Wood Pipe GUI +gui.advwood_pipe.title=Продвинутая деревяная труба +gui.advwood_pipe.blacklist=Эти предметы исключены +gui.advwood_pipe.whitelist=Эти предметы требуются + +# Teleport Pipe GUI +gui.teleport.ledger.title=Соединенные трубы +gui.teleport.ledger.owner=Владелец: %s +gui.teleport.ledger.outputs=Количество: %d +gui.teleport.ledger.inputs=Количество: %s +gui.teleport.frequency=Частота: %d +gui.teleport.coordPair=Координаты: (%d, %d, %d) +gui.teleport.send_only=Только отправить +gui.teleport.send_and_receive=Отправить и получить +gui.teleport.receive_only=Только получить +gui.teleport.disabled=Отключено +gui.teleport.public=Публичная +gui.teleport.private=Приватная + +# name of "closed pipe is closed" trigger +trigger.pipe_closed=Pipe Closed (Storing Items) + +key.lasers=Переключает отображение загрузки границ чанков + +#tooltips for teleport pipes +tip.teleportPipe=No more long pipelines! + +tooltip.dog_deaggravator=Действует всем на нервы + +itemGroup.apcreativetab=Additional Pipes + +# chat stuff +command.ap.usage=Использование: /additionalpipes teleport +command.ap.pipelist_header=Телепортирующие трубы: +message.ap.accessdenied=Доступ запрещен! Владелец трубы: %s + +# Subtitle for when the Dog Deaggravator is used +subtitle.ap.dog_deaggravator=Звонок колокольчика + +# Name of Additional Pipes chapter in the BC Guide +buildcraft.guide.chapter.mod.additionalpipes=Additional Pipes diff --git a/src/main/resources/assets/additionalpipes/lang/zh_cn.lang b/src/main/resources/assets/additionalpipes/lang/zh_cn.lang new file mode 100644 index 00000000..b6dfbf94 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/lang/zh_cn.lang @@ -0,0 +1,101 @@ +item.pipe.ap.pipe_items_priority.name=优先级嵌入管道 +item.pipe.ap.pipe_items_adv_wood.name=高级木质管道 +item.pipe.ap.pipe_items_gravity_feed.name=重力提供传送管道 +item.pipe.ap.pipe_items_distribution.name=分配传送管道 +item.pipe.ap.pipe_items_closed.name=闭合传送管道 +item.pipe.ap.pipe_items_teleport.name=物品隔空传输管道 +item.pipe.ap.pipe_fluids_teleport.name=流体隔空传输管道 +item.pipe.ap.pipe_power_teleport.name=能量隔空传输管道 [WIP] +item.pipe.ap.pipe_power_switch.name=开关动力管道 +item.pipe.ap.pipe_fluids_switch.name=开关流体管道 +item.pipe.ap.pipe_items_switch.name=开关传送管道 +item.pipe.ap.pipe_fluids_water_pump.name=水泵管道 +item.pipe.ap.pipe_items_addition.name=添加传送管道 +item.pipe.ap.pipe_items_jeweled.name=宝石传送管道 + +#regular items & blocks +item.dog_deaggravator.name=缓和狗铃 +tile.teleport_tether.name=隔空传输链接 [WIP] + +# Priority Insertion Pipe +gui.priority_insertion.title=优先级嵌入管道 + +#Distribution Pipe +gui.distribution_pipe.title=分配管道 + +# Pipe Tooltips +tip.pipe.ap.pipe_items_priority=以玩家定义的顺序传送到每一个连接的容器 +tip.pipe.ap.pipe_items_adv_wood=实现简单过滤的提取管道 +tip.pipe.ap.pipe_items_gravity_feed=从容器底部慢慢提取物品且不需要能量 +tip.pipe.ap.pipe_items_teleport=在链接的管道之间瞬时传送物品 +tip.pipe.ap.pipe_items_distribution=以设定的比例输出到每一边 +tip.pipe.ap.pipe_items_closed=把物品存储在内部而不是让物品掉落 +tip.pipe.ap.pipe_fluids_teleport=在链接的管道之间瞬时传送流体 +tip.pipe.ap.pipe_power_teleport=在链接的管道之间瞬时传送能量 +tip.pipe.ap.pipe_power_switch=如果接收到红石信号则与相邻管道断开连接 +tip.pipe.ap.pipe_fluids_switch=如果接收到红石信号则与相邻管道断开连接 +tip.pipe.ap.pipe_items_switch=如果接收到红石信号则与相邻管道断开连接 +tip.pipe.ap.pipe_fluids_water_pump=放在水源上方可以输出少量的水 +tip.pipe.ap.pipe_items_addition=只给连接的容器传送它们已有的物品 +tip.pipe.ap.pipe_items_jeweled=大容量可配置的分类管道 + +# Jeweled Pipe GUI +gui.jeweled_pipe.title=宝石管道 +#tab names +gui.jeweled_pipe.tab.up=上 +gui.jeweled_pipe.tab.down=下 +gui.jeweled_pipe.tab.north=北 +gui.jeweled_pipe.tab.south=南 +gui.jeweled_pipe.tab.east=东 +gui.jeweled_pipe.tab.west=西 +#buttons +gui.jeweled_pipe.match=匹配: +gui.jeweled_pipe.NBT=NBT +gui.jeweled_pipe.metadata=Meta +gui.jeweled_pipe.acceptUnsorted=接收未分类物品 + +# Closed Pipe GUI +gui.closed_pipe.title=闭合管道 + +# Adv. Wood Pipe GUI +gui.advwood_pipe.title=高级木质管道 +gui.advwood_pipe.blacklist=排除这些物品 +gui.advwood_pipe.whitelist=请求这些物品 + +# Teleport Pipe GUI +# NOTE: "ledger" refers to the menu that expands on the side of the Teleport Pipe GUI when you click the icon +gui.teleport.ledger.title=已链接的管道 +gui.teleport.ledger.owner=拥有者: %s +gui.teleport.ledger.outputs=输出: %d +gui.teleport.ledger.inputs=输入: %s +gui.teleport.frequency=频率: %d +gui.teleport.coordPair=坐标: (%d, %d, %d) +gui.teleport.send_only=仅发送 +gui.teleport.send_and_receive=发送 & 接收 +gui.teleport.receive_only=仅接收 +gui.teleport.disabled=禁用 +gui.teleport.public=公用 +gui.teleport.private=私用 + +# name of "closed pipe is closed" trigger +trigger.pipe_closed=管道关闭 (存储物品) + +key.lasers=显示区块载入边界 + +#tooltips for teleport pipes +tip.teleportPipe=没有更长的管道线! + +tooltip.dog_deaggravator=让你的狗冷静下来 + +itemGroup.apcreativetab=附加管道 + +# chat stuff +command.ap.usage=用法: /additionalpipes teleport +command.ap.pipelist_header=隔空传送管道: +message.ap.accessdenied=拒绝访问! 该管道属于 %s + +# Subtitle for when the Dog Deaggravator is used +subtitle.ap.dog_deaggravator=铃响 + +# Name of Additional Pipes chapter in the BC Guide +buildcraft.guide.chapter.mod.additionalpipes=附加管道 diff --git a/src/main/resources/assets/additionalpipes/models/block/teleport_tether.json b/src/main/resources/assets/additionalpipes/models/block/teleport_tether.json new file mode 100644 index 00000000..1719edca --- /dev/null +++ b/src/main/resources/assets/additionalpipes/models/block/teleport_tether.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "additionalpipes:blocks/teleport_tether" + } +} diff --git a/src/main/resources/assets/additionalpipes/models/item/dog_deaggravator.json b/src/main/resources/assets/additionalpipes/models/item/dog_deaggravator.json new file mode 100644 index 00000000..53f6d8a4 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/models/item/dog_deaggravator.json @@ -0,0 +1,18 @@ +{ + "parent": "builtin/generated", + "textures": { + "layer0": "additionalpipes:items/dog_deaggravator" + }, + "display": { + "thirdperson": { + "rotation": [ -90, 0, 0 ], + "translation": [ 0, 1, -3 ], + "scale": [ 0.55, 0.55, 0.55 ] + }, + "firstperson": { + "rotation": [ 0, -135, 25 ], + "translation": [ 0, 4, 2 ], + "scale": [ 1.7, 1.7, 1.7 ] + } + } +} diff --git a/src/main/resources/assets/additionalpipes/models/item/teleport_tether.json b/src/main/resources/assets/additionalpipes/models/item/teleport_tether.json new file mode 100644 index 00000000..cb9f9a83 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/models/item/teleport_tether.json @@ -0,0 +1,10 @@ +{ + "parent": "additionalpipes:block/teleport_tether", + "display": { + "thirdperson": { + "rotation": [ 10, -45, 170 ], + "translation": [ 0, 1.5, -2.75 ], + "scale": [ 0.375, 0.375, 0.375 ] + } + } +} diff --git a/src/main/resources/assets/additionalpipes/recipes/dog_deaggravator.json b/src/main/resources/assets/additionalpipes/recipes/dog_deaggravator.json new file mode 100644 index 00000000..8ca9e0ed --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/dog_deaggravator.json @@ -0,0 +1,26 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + "GSG", + "GIG", + "G G" + ], + "key": { + "I": { + "type": "forge:ore_dict", + "ore": "ingotIron" + }, + "G": { + "type": "forge:ore_dict", + "ore": "ingotGold" + }, + "S": { + "type": "forge:ore_dict", + "ore": "stickWood" + } + }, + "result": { + "item": "additionalpipes:dog_deaggravator" + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_switch.json b/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_switch.json new file mode 100644 index 00000000..b73e6044 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_switch.json @@ -0,0 +1,16 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [{ + "item": "additionalpipes:pipe_items_switch", + "data": 0 + }, + { + "item": "buildcrafttransport:waterproof" + } + ], + "result": { + "item": "additionalpipes:pipe_fluids_switch", + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_teleport.json b/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_teleport.json new file mode 100644 index 00000000..18e33c5c --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_teleport.json @@ -0,0 +1,16 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [{ + "item": "additionalpipes:pipe_items_teleport", + "data": 0 + }, + { + "item": "buildcrafttransport:waterproof" + } + ], + "result": { + "item": "additionalpipes:pipe_fluids_teleport", + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_water_pump.json b/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_water_pump.json new file mode 100644 index 00000000..c85ce0b1 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_fluids_water_pump.json @@ -0,0 +1,32 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + " L ", + "rPr", + " W " + ], + "key": { + "P": { + "type": "forge:ore_dict", + "ore": "gearIron" + }, + "L": { + "item": "buildcrafttransport:pipe_gold_fluid", + "data": 0 + }, + "W": { + "item": "buildcrafttransport:pipe_wood_fluid", + "data": 0 + }, + "r": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + }, + "result": { + "item": "additionalpipes:pipe_fluids_water_pump", + "count": 1, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_addition.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_addition.json new file mode 100644 index 00000000..a50df4d7 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_addition.json @@ -0,0 +1,23 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + " R ", + "RCR", + " R " + ], + "key": { + "C": { + "item": "buildcrafttransport:pipe_clay_item", + "data": 0 + }, + "R": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + }, + "result": { + "item": "additionalpipes:pipe_items_addition", + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_adv_wood.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_adv_wood.json new file mode 100644 index 00000000..5545be78 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_adv_wood.json @@ -0,0 +1,22 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + "WgW" + ], + "key": { + "W": { + "type": "forge:ore_dict", + "ore": "gearWood" + }, + "g": { + "type": "forge:ore_dict", + "ore": "blockGlass" + } + }, + "result": { + "item": "additionalpipes:pipe_items_adv_wood", + "count": 8, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_closed.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_closed.json new file mode 100644 index 00000000..3318cbb8 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_closed.json @@ -0,0 +1,17 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [{ + "item": "buildcrafttransport:pipe_void_item", + "data": 0 + }, + { + "type": "forge:ore_dict", + "ore": "gearIron" + } + ], + "result": { + "item": "additionalpipes:pipe_items_closed", + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_distribution.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_distribution.json new file mode 100644 index 00000000..41b2172c --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_distribution.json @@ -0,0 +1,28 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + " r ", + "IgI", + " r " + ], + "key": { + "I": { + "type": "forge:ore_dict", + "ore": "ingotIron" + }, + "g": { + "type": "forge:ore_dict", + "ore": "blockGlass" + }, + "r": { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + }, + "result": { + "item": "additionalpipes:pipe_items_distribution", + "count": 1, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_gravity_feed.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_gravity_feed.json new file mode 100644 index 00000000..75d1ee4e --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_gravity_feed.json @@ -0,0 +1,28 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + " S ", + "IgI", + " S " + ], + "key": { + "I": { + "type": "forge:ore_dict", + "ore": "ingotIron" + }, + "g": { + "type": "forge:ore_dict", + "ore": "blockGlass" + }, + "S": { + "type": "forge:ore_dict", + "ore": "stone" + } + }, + "result": { + "item": "additionalpipes:pipe_items_gravity_feed", + "count": 1, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_jeweled.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_jeweled.json new file mode 100644 index 00000000..283c2a0e --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_jeweled.json @@ -0,0 +1,24 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + " D ", + "DGD", + " D " + ], + "key": { + "D": { + "item": "buildcrafttransport:pipe_diamond_item", + "data": 0 + }, + "G": { + "item": "buildcraftsilicon:redstone_chipset", + "data": 2 + } + }, + "result": { + "item": "additionalpipes:pipe_items_jeweled", + "count": 2, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_priority.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_priority.json new file mode 100644 index 00000000..cee4cf75 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_priority.json @@ -0,0 +1,18 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [{ + "item": "buildcrafttransport:pipe_clay_item", + "data": 0 + }, + { + "item": "additionalpipes:pipe_items_distribution", + "data": 0 + } + ], + "result": { + "item": "additionalpipes:pipe_items_priority", + "count": 2, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_items_switch.json b/src/main/resources/assets/additionalpipes/recipes/pipe_items_switch.json new file mode 100644 index 00000000..1c823d33 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_items_switch.json @@ -0,0 +1,26 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + "GgI" + ], + "key": { + "G": { + "type": "forge:ore_dict", + "ore": "gearGold" + }, + "I": { + "type": "forge:ore_dict", + "ore": "gearIron" + }, + "g": { + "type": "forge:ore_dict", + "ore": "blockGlass" + } + }, + "result": { + "item": "additionalpipes:pipe_items_switch", + "count": 8, + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/recipes/pipe_power_switch.json b/src/main/resources/assets/additionalpipes/recipes/pipe_power_switch.json new file mode 100644 index 00000000..28c4445a --- /dev/null +++ b/src/main/resources/assets/additionalpipes/recipes/pipe_power_switch.json @@ -0,0 +1,17 @@ +{ + "type": "forge:ore_shapeless", + "ingredients": [{ + "item": "additionalpipes:pipe_items_switch", + "data": 0 + }, + { + "type": "forge:ore_dict", + "ore": "dustRedstone" + } + ], + "result": { + "item": "additionalpipes:pipe_power_switch", + "data": 0 + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/sounds.json b/src/main/resources/assets/additionalpipes/sounds.json new file mode 100644 index 00000000..75af7c12 --- /dev/null +++ b/src/main/resources/assets/additionalpipes/sounds.json @@ -0,0 +1,10 @@ +{ + "bellRing": { + "category": "master", + "sounds": [{ + "name": "additionalpipes:copper-bell", + "stream": false + }], + "subtitle": "subtitle.ap.dog_deaggravator" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/additionalpipes/sounds/copper-bell.ogg b/src/main/resources/assets/additionalpipes/sounds/copper-bell.ogg new file mode 100644 index 00000000..d92e16a1 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/sounds/copper-bell.ogg differ diff --git a/src/main/resources/assets/additionalpipes/textures/blocks/jeweledPipeBase.pdn b/src/main/resources/assets/additionalpipes/textures/blocks/jeweledPipeBase.pdn new file mode 100644 index 00000000..a69cec69 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/blocks/jeweledPipeBase.pdn differ diff --git a/src/main/resources/assets/additionalpipes/textures/blocks/teleport_tether.png b/src/main/resources/assets/additionalpipes/textures/blocks/teleport_tether.png new file mode 100644 index 00000000..e70f59c1 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/blocks/teleport_tether.png differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/advancedwoodgui.png b/src/main/resources/assets/additionalpipes/textures/gui/background_adv_wood.png similarity index 100% rename from Client/net/minecraft/src/buildcraft/additionalpipes/gui/advancedwoodgui.png rename to src/main/resources/assets/additionalpipes/textures/gui/background_adv_wood.png diff --git a/src/main/resources/assets/additionalpipes/textures/gui/background_distribution.png b/src/main/resources/assets/additionalpipes/textures/gui/background_distribution.png new file mode 100644 index 00000000..ef9e8054 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/background_distribution.png differ diff --git a/Client/net/minecraft/src/buildcraft/additionalpipes/gui/gui.png b/src/main/resources/assets/additionalpipes/textures/gui/background_generic.png similarity index 100% rename from Client/net/minecraft/src/buildcraft/additionalpipes/gui/gui.png rename to src/main/resources/assets/additionalpipes/textures/gui/background_generic.png diff --git a/src/main/resources/assets/additionalpipes/textures/gui/background_jeweled.pdn b/src/main/resources/assets/additionalpipes/textures/gui/background_jeweled.pdn new file mode 100644 index 00000000..df5b80f1 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/background_jeweled.pdn differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/background_jeweled.png b/src/main/resources/assets/additionalpipes/textures/gui/background_jeweled.png new file mode 100644 index 00000000..7310b4f2 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/background_jeweled.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/background_priority.png b/src/main/resources/assets/additionalpipes/textures/gui/background_priority.png new file mode 100644 index 00000000..2336ce43 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/background_priority.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_1.png b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_1.png new file mode 100644 index 00000000..71457a75 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_1.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_2.png b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_2.png new file mode 100644 index 00000000..9da18bbf Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_2.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_3.png b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_3.png new file mode 100644 index 00000000..f3e531f1 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_3.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_4.png b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_4.png new file mode 100644 index 00000000..0ff1806e Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_4.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_5.png b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_5.png new file mode 100644 index 00000000..5e7eb06d Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_5.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_6.png b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_6.png new file mode 100644 index 00000000..51379123 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/gui/jeweled_gui_outline_6.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/dog_deaggravator.png b/src/main/resources/assets/additionalpipes/textures/items/dog_deaggravator.png new file mode 100644 index 00000000..9b3ca3ad Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/dog_deaggravator.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/1.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/1.png new file mode 100644 index 00000000..e0a8cef3 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/1.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/2.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/2.png new file mode 100644 index 00000000..167f0bf2 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/2.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/3.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/3.png new file mode 100644 index 00000000..153d94bf Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/3.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/4.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/4.png new file mode 100644 index 00000000..4511b0df Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/4.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/5.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/5.png new file mode 100644 index 00000000..1da3b134 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/5.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/6.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/6.png new file mode 100644 index 00000000..21c1c7a2 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/6.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/7.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/7.png new file mode 100644 index 00000000..43fab364 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/7.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/8.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/8.png new file mode 100644 index 00000000..16b697da Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/8.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/items/triggers/pipe_closed.png b/src/main/resources/assets/additionalpipes/textures/items/triggers/pipe_closed.png new file mode 100644 index 00000000..afb913b9 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/items/triggers/pipe_closed.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/15.png b/src/main/resources/assets/additionalpipes/textures/pipes/15.png new file mode 100644 index 00000000..67d4538e Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/15.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/31.png b/src/main/resources/assets/additionalpipes/textures/pipes/31.png new file mode 100644 index 00000000..a2adcd3d Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/31.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/8.png b/src/main/resources/assets/additionalpipes/textures/pipes/8.png new file mode 100644 index 00000000..0850b4c8 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/8.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/liquidsRedstonePipe.png b/src/main/resources/assets/additionalpipes/textures/pipes/liquidsRedstonePipe.png new file mode 100644 index 00000000..6432e557 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/liquidsRedstonePipe.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/logisticsTeleportPipe.png b/src/main/resources/assets/additionalpipes/textures/pipes/logisticsTeleportPipe.png new file mode 100644 index 00000000..d1a83c3b Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/logisticsTeleportPipe.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_switch_closed.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_switch_closed.png new file mode 100644 index 00000000..f0f511b3 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_switch_closed.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_switch_open.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_switch_open.png new file mode 100644 index 00000000..4513a357 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_switch_open.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_teleport.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_teleport.png new file mode 100644 index 00000000..3c330ee2 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_teleport.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_water_pump.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_water_pump.png new file mode 100644 index 00000000..5e7edde1 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_fluids_water_pump.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_addition.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_addition.png new file mode 100644 index 00000000..da691a2f Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_addition.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_adv_wood_input.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_adv_wood_input.png new file mode 100644 index 00000000..0432c99b Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_adv_wood_input.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_adv_wood_output.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_adv_wood_output.png new file mode 100644 index 00000000..7c738d3b Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_adv_wood_output.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_closed_closed.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_closed_closed.png new file mode 100644 index 00000000..41b8bbca Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_closed_closed.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_closed_open.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_closed_open.png new file mode 100644 index 00000000..6c900c28 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_closed_open.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_down.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_down.png new file mode 100644 index 00000000..070ebb50 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_down.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_east.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_east.png new file mode 100644 index 00000000..364a5b27 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_east.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_north.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_north.png new file mode 100644 index 00000000..6972ffc3 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_north.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_south.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_south.png new file mode 100644 index 00000000..20a6447a Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_south.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_up.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_up.png new file mode 100644 index 00000000..2782d3c2 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_up.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_west.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_west.png new file mode 100644 index 00000000..cae8f8f7 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_distribution_west.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_sides.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_sides.png new file mode 100644 index 00000000..311863bb Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_sides.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_up.pdn b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_up.pdn new file mode 100644 index 00000000..2d9fb936 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_up.pdn differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_up.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_up.png new file mode 100644 index 00000000..62020c49 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_gravity_feed_up.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_down.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_down.png new file mode 100644 index 00000000..8ec9f332 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_down.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_east.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_east.png new file mode 100644 index 00000000..76835c27 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_east.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_north.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_north.png new file mode 100644 index 00000000..f76822ef Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_north.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_south.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_south.png new file mode 100644 index 00000000..07e2e0dd Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_south.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_up.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_up.png new file mode 100644 index 00000000..581b2cad Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_up.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_west.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_west.png new file mode 100644 index 00000000..85c91d96 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_jeweled_west.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_down.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_down.png new file mode 100644 index 00000000..69af5b51 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_down.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_east.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_east.png new file mode 100644 index 00000000..6704c8df Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_east.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_north.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_north.png new file mode 100644 index 00000000..e619dbc3 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_north.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_south.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_south.png new file mode 100644 index 00000000..b29826c1 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_south.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_up.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_up.png new file mode 100644 index 00000000..e4763d52 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_up.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_west.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_west.png new file mode 100644 index 00000000..2a4aa386 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_priority_west.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_switch_closed.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_switch_closed.png new file mode 100644 index 00000000..7184a9bb Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_switch_closed.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_switch_open.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_switch_open.png new file mode 100644 index 00000000..7a4ae657 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_switch_open.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_teleport.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_teleport.png new file mode 100644 index 00000000..6a3c17bb Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_items_teleport.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_switch_closed.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_switch_closed.png new file mode 100644 index 00000000..6c8fc049 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_switch_closed.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_switch_open.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_switch_open.png new file mode 100644 index 00000000..701f13bc Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_switch_open.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_teleport.png b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_teleport.png new file mode 100644 index 00000000..dfb3a71c Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/pipe_power_teleport.png differ diff --git a/src/main/resources/assets/additionalpipes/textures/pipes/redstonePipeActive.png b/src/main/resources/assets/additionalpipes/textures/pipes/redstonePipeActive.png new file mode 100644 index 00000000..84119ce9 Binary files /dev/null and b/src/main/resources/assets/additionalpipes/textures/pipes/redstonePipeActive.png differ diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info new file mode 100644 index 00000000..396ba7fb --- /dev/null +++ b/src/main/resources/mcmod.info @@ -0,0 +1,10 @@ +[{ + "modid": "additionalpipes", + "name": "Additional Pipes", + "version": "${version}", + "url": "https://github.com/tcooc/AdditionalPipesBC/", + "updateUrl": "", + "description": "Teleport, insertion, extraction, and other pipes.", + "credits": "Zeldo, DaStormBringer, AlexIIL", + "authorList": [ "Zeldo", "DaStormBringer", "MultipleMonomials", "Additional Pipes Contributors" ] +}] diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 00000000..b61a2a8c --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 3, + "description": "Resources used for Additional Pipes" + } +} \ No newline at end of file