diff --git a/.gitignore b/.gitignore index 6cf9f7a..72e2e8f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ /.pydevproject /.gradle /eclipse -/build \ No newline at end of file +/build +/lib \ No newline at end of file diff --git a/README.md b/README.md index fd68c50..790eaad 100644 --- a/README.md +++ b/README.md @@ -14,5 +14,7 @@ Please remember to use **UTF-8** encoding on language files. ### Building Make sure you have python installed and available on the system PATH. +[Download this and put the contents in a folder named "lib".](http://files.holenet.info/lib.zip) + Run "gradlew build" from a terminal/command prompt. The output will be in build/libs \ No newline at end of file diff --git a/build.gradle b/build.gradle index 37fc83b..db59c23 100644 --- a/build.gradle +++ b/build.gradle @@ -26,17 +26,17 @@ repositories { dependencies { compile 'com.mod-buildcraft:buildcraft:5.0.5:dev' - compile 'codechicken:ForgeMultipart:1.7.2-1.1.0.275:dev' - compile 'codechicken:CodeChickenLib:1.7.2-1.1.0.77:dev' - compile 'codechicken:CodeChickenCore:1.7.2-1.0.0:dev' - compile 'codechicken:NotEnoughItems:1.7.2-1.0.1:dev' + compile 'codechicken:ForgeMultipart:1.7.10-1.1.0.297:dev' + compile 'codechicken:CodeChickenLib:1.7.10-1.1.1.95:dev' + compile 'codechicken:CodeChickenCore:1.7.10-1.0.2.11:dev' + compile 'codechicken:NotEnoughItems:1.7.10-1.0.2.30:dev' } version = "2.0.3" group= "au.com.addstar" archivesBaseName = "Tubes" -def forge = "1.7.2-10.12.1.1065" +def forge = "1.7.10-10.13.0.1180" minecraft { version = "${forge}" diff --git a/src/main/java/schmoller/tubes/ClientProxy.java b/src/main/java/schmoller/tubes/ClientProxy.java index d73f202..aa746f3 100644 --- a/src/main/java/schmoller/tubes/ClientProxy.java +++ b/src/main/java/schmoller/tubes/ClientProxy.java @@ -18,6 +18,7 @@ import schmoller.tubes.gui.OverflowGui; import schmoller.tubes.gui.RequestingTubeGui; import schmoller.tubes.gui.RoutingTubeGui; +import schmoller.tubes.render.AdvancedExtractionTubeRender; import schmoller.tubes.render.BufferTubeRender; import schmoller.tubes.render.ColoringTubeRender; import schmoller.tubes.render.CompressorTubeRender; @@ -80,7 +81,7 @@ private void registerRenderers() TubeRegistry.registerRenderer("buffer", new BufferTubeRender()); TubeRegistry.registerRenderer("roundrobin", new RoundRobinTubeRender()); TubeRegistry.registerRenderer("management", new ManagementTubeRender()); - TubeRegistry.registerRenderer("advancedExtraction", new EjectionTubeRender()); + TubeRegistry.registerRenderer("advancedExtraction", new AdvancedExtractionTubeRender()); PayloadRegistry.registerPayloadRenderer("item", new ItemPayloadRender()); PayloadRegistry.registerPayloadRenderer("fluid", new FluidPayloadRender()); diff --git a/src/main/java/schmoller/tubes/CommonProxy.java b/src/main/java/schmoller/tubes/CommonProxy.java index babfcdd..15a03b1 100644 --- a/src/main/java/schmoller/tubes/CommonProxy.java +++ b/src/main/java/schmoller/tubes/CommonProxy.java @@ -203,7 +203,9 @@ private void registerRecipes() TubesAPI.instance.registerShapedRecipe(TubesAPI.instance.createTubeForType("tank", 1), " g ", "gtg", " g ", 'g', net.minecraft.init.Blocks.glass, 't', TubesAPI.instance.createTubeForType("basic")); TubesAPI.instance.registerShapedRecipe(TubesAPI.instance.createTubeForType("buffer", 1), "t", "c", "t", 't', TubesAPI.instance.createTubeForType("basic"), 'c', net.minecraft.init.Blocks.chest); - TubesAPI.instance.registerShapedRecipe(TubesAPI.instance.createTubeForType("roundrobin",1), "iti", "ttt", "iti", 'i', net.minecraft.init.Items.iron_ingot, 't', TubesAPI.instance.createTubeForType("basic")); + TubesAPI.instance.registerShapedRecipe(TubesAPI.instance.createTubeForType("roundrobin", 1), "iti", "ttt", "iti", 'i', net.minecraft.init.Items.iron_ingot, 't', TubesAPI.instance.createTubeForType("basic")); + TubesAPI.instance.registerShapedRecipe(TubesAPI.instance.createTubeForType("advancedExtraction", 1), " c ", "cec", " c ", 'c', Items.RedstoneCircuit.getItem(), 'e', TubesAPI.instance.createTubeForType("extraction")); + TubesAPI.instance.registerShapedRecipe(TubesAPI.instance.createTubeForType("management", 1), "ici", "crc", "ici", 'i', net.minecraft.init.Items.iron_ingot, 'r', TubesAPI.instance.createTubeForType("requesting"), 'c', Items.RedstoneCircuit.getItem()); } public void registerOreRecipes() diff --git a/src/main/java/schmoller/tubes/asm/TubesContainer.java b/src/main/java/schmoller/tubes/asm/TubesContainer.java index 3ad84bd..6c64bab 100644 --- a/src/main/java/schmoller/tubes/asm/TubesContainer.java +++ b/src/main/java/schmoller/tubes/asm/TubesContainer.java @@ -25,6 +25,6 @@ public boolean registerBus( EventBus bus, LoadController controller ) @Override public VersionRange acceptableMinecraftVersionRange() { - return VersionParser.parseRange("[1.7.2]"); + return VersionParser.parseRange("[1.7.10]"); } } diff --git a/src/main/java/schmoller/tubes/asm/TubesPlugin.java b/src/main/java/schmoller/tubes/asm/TubesPlugin.java index bd2df78..5d4cfcc 100644 --- a/src/main/java/schmoller/tubes/asm/TubesPlugin.java +++ b/src/main/java/schmoller/tubes/asm/TubesPlugin.java @@ -41,7 +41,7 @@ public TubesPlugin() @Override public String[] getASMTransformerClass() { - versionCheck("[1.7.2]", "Tubes"); + versionCheck("[1.7.10]", "Tubes"); return new String[] {"schmoller.tubes.asm.MinecraftTransformer"}; } diff --git a/src/main/java/schmoller/tubes/definitions/TypeAdvancedExtractionTube.java b/src/main/java/schmoller/tubes/definitions/TypeAdvancedExtractionTube.java index 4a6289e..d2e8244 100644 --- a/src/main/java/schmoller/tubes/definitions/TypeAdvancedExtractionTube.java +++ b/src/main/java/schmoller/tubes/definitions/TypeAdvancedExtractionTube.java @@ -1,5 +1,6 @@ package schmoller.tubes.definitions; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import codechicken.multipart.TMultiPart; @@ -9,6 +10,10 @@ public class TypeAdvancedExtractionTube extends TubeDefinition { public static ResourceLocation gui = new ResourceLocation("tubes", "textures/gui/advExtractionTube.png"); + public static ResourceLocation pump = new ResourceLocation("tubes", "textures/models/tube-advancedextraction-pump.png"); + public static IIcon main; + public static IIcon backOpen; + public static IIcon backClosed; @Override public IIcon getCenterIcon() @@ -28,4 +33,11 @@ public TMultiPart createTube() return new AdvancedExtractionTube(); } + @Override + public void registerIcons( IIconRegister register ) + { + main = register.registerIcon("tubes:tube-advancedextraction"); + backOpen = register.registerIcon("tubes:tube-advancedextraction-open"); + backClosed = register.registerIcon("tubes:tube-advancedextraction-closed"); + } } diff --git a/src/main/java/schmoller/tubes/items/ItemDiagnosticTool.java b/src/main/java/schmoller/tubes/items/ItemDiagnosticTool.java index 94e4cac..4fc8038 100644 --- a/src/main/java/schmoller/tubes/items/ItemDiagnosticTool.java +++ b/src/main/java/schmoller/tubes/items/ItemDiagnosticTool.java @@ -10,6 +10,11 @@ public class ItemDiagnosticTool extends Item { + public ItemDiagnosticTool() { + super(); + setTextureName("tubes:diagnosticTool"); + } + @Override public boolean onItemUseFirst( ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ ) { diff --git a/src/main/java/schmoller/tubes/network/MCDInputBridge.java b/src/main/java/schmoller/tubes/network/MCDInputBridge.java index a4bfc2c..dbd6237 100644 --- a/src/main/java/schmoller/tubes/network/MCDInputBridge.java +++ b/src/main/java/schmoller/tubes/network/MCDInputBridge.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTSizeTracker; import net.minecraftforge.fluids.FluidStack; import codechicken.lib.data.MCDataInput; @@ -125,7 +126,7 @@ public NBTTagCompound readNBTTagCompound() try { - return CompressedStreamTools.decompress(data); + return CompressedStreamTools.func_152457_a(data, NBTSizeTracker.field_152451_a); } catch(IOException e) { diff --git a/src/main/java/schmoller/tubes/render/AdvancedExtractionTubeRender.java b/src/main/java/schmoller/tubes/render/AdvancedExtractionTubeRender.java new file mode 100644 index 0000000..afc0e41 --- /dev/null +++ b/src/main/java/schmoller/tubes/render/AdvancedExtractionTubeRender.java @@ -0,0 +1,233 @@ +package schmoller.tubes.render; + +import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import schmoller.tubes.AdvRender.FaceMode; +import schmoller.tubes.api.TubeDefinition; +import schmoller.tubes.api.helpers.TubeHelper; +import schmoller.tubes.api.interfaces.IDirectionalTube; +import schmoller.tubes.api.interfaces.ITube; +import schmoller.tubes.definitions.TypeAdvancedExtractionTube; +import schmoller.tubes.definitions.TypeEjectionTube; +import schmoller.tubes.types.AdvancedExtractionTube; + +import org.lwjgl.opengl.GL11; + +public class AdvancedExtractionTubeRender extends NormalTubeRender +{ + private int mDirection; + @Override + public void renderStatic( TubeDefinition type, ITube tube, World world, int x, int y, int z ) + { + int connections = tube.getConnections(); + mDirection = ((IDirectionalTube)tube).getFacing(); + + mRender.resetTransform(); + mRender.enableNormals = false; + mRender.setLightingFromBlock(world, x, y, z); + mRender.resetTextureFlip(); + mRender.resetTextureRotation(); + mRender.faceMode = FaceMode.Both; + + mRender.setLocalLights(0.5f, 1.0f, 0.8f, 0.8f, 0.6f, 0.6f); + + mRender.translate(x, y, z); + + int col = tube.getColor(); + + int invCons = 0; + + for(int i = 0; i < 6; ++i) + { + if((connections & (1 << i)) != 0) + { + if(TubeHelper.renderAsInventoryConnection(world, x, y, z, i)) + invCons |= (1 << i); + } + } + + int tubeCons = connections - invCons; + + renderCore(connections | (1 << mDirection), type, col); + renderConnections(tubeCons, type); + + renderInventoryConnections(invCons, type); + } + + private void renderBody(int direction) + { + mRender.setIcon(TypeAdvancedExtractionTube.main); + IIcon back = TypeAdvancedExtractionTube.backClosed; + // TODO: If open, render open icon + //back = TypeAdvancedExtractionTube.backOpen; + + switch(direction) + { + case 0: + mRender.setTextureRotation(0, 0, 2, 2, 2, 2); + mRender.drawBox(60, 0.25f, 0f, 0.25f, 0.75f, 0.3125f, 0.75f); + mRender.setIcon(TypeAdvancedExtractionTube.backOpen, back, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.25f, 0.1875f, 0.8125f, 0.8125f, 0.8125f); // Body + mRender.setIcon(TypeEjectionTube.endIcon, TypeEjectionTube.endIcon, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.0f, 0.1875f, 0.8125f, 0.0625f, 0.8125f); // Ring + break; + case 1: + mRender.setTextureRotation(0, 0, 0, 0, 0, 0); + mRender.drawBox(60, 0.25f, 0.6875f, 0.25f, 0.75f, 1.0f, 0.75f); + mRender.setIcon(back, TypeAdvancedExtractionTube.backOpen, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.1875f, 0.8125f, 0.75f, 0.8125f); // Body + mRender.setIcon(TypeEjectionTube.endIcon, TypeEjectionTube.endIcon, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.9375f, 0.1875f, 0.8125f, 1.0f, 0.8125f); // Ring + break; + case 2: + mRender.setTextureRotation(2, 0, 0, 0, 3, 1); + mRender.drawBox(51, 0.25f, 0.25f, 0f, 0.75f, 0.75f, 0.3125f); + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.backOpen, back, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.25f, 0.8125f, 0.8125f, 0.8125f); // Body + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeEjectionTube.endIcon, TypeEjectionTube.endIcon, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.0f, 0.8125f, 0.8125f, 0.0625f); // Ring + break; + case 3: + mRender.setTextureRotation(0, 2, 0, 0, 1, 3); + mRender.drawBox(51, 0.25f, 0.25f, 0.6875f, 0.75f, 0.75f, 1.0f); + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, back, TypeAdvancedExtractionTube.backOpen, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.1875f, 0.8125f, 0.8125f, 0.75f); // Body + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeEjectionTube.endIcon, TypeEjectionTube.endIcon, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.9375f, 0.8125f, 0.8125f, 1.0f); // Ring + break; + case 4: + mRender.setTextureRotation(3, 3, 1, 3, 0, 0); + mRender.drawBox(15, 0f, 0.25f, 0.25f, 0.3125f, 0.75f, 0.75f); + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.backOpen, back); + mRender.drawBox(63, 0.25f, 0.1875f, 0.1875f, 0.8125f, 0.8125f, 0.8125f); // Body + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeEjectionTube.endIcon, TypeEjectionTube.endIcon); + mRender.drawBox(63, 0f, 0.1875f, 0.1875f, 0.0625f, 0.8125f, 0.8125f); // Ring + break; + case 5: + mRender.setTextureRotation(1, 1, 3, 1, 0, 0); + mRender.drawBox(15, 0.6875f, 0.25f, 0.25f, 1.0f, 0.75f, 0.75f); + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, back, TypeAdvancedExtractionTube.backOpen); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.1875f, 0.75f, 0.8125f, 0.8125f); // Body + mRender.setIcon(TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeAdvancedExtractionTube.main, TypeEjectionTube.endIcon, TypeEjectionTube.endIcon); + mRender.drawBox(63, 0.9375f, 0.1875f, 0.1875f, 1.0f, 0.8125f, 0.8125f); // Ring + break; + } + + mRender.resetTextureRotation(); + } + + @Override + protected void renderCore( int connections, TubeDefinition def, int col ) + { + renderBody(mDirection); + } + + private void renderPump(int side, float animTime) + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TypeAdvancedExtractionTube.pump); + + mRender.setTextureIndex(0); + mRender.setTextureSize(1, 1); + + Tessellator tes = Tessellator.instance; + tes.setColorOpaque_F(1, 1, 1); + + tes.startDrawingQuads(); + + float amount = ((float)Math.cos(animTime * Math.PI * 2) / 2f + 0.5f) * 0.0625f * 2; + + mRender.resetTransform(); + switch(side) + { + case 0: + mRender.translate(0, amount, 0); + mRender.drawBox(63, 0.1875f, 0.0625f, 0.1875f, 0.8125f, 0.125f, 0.8125f); + break; + case 1: + mRender.translate(0, -amount, 0); + mRender.drawBox(63, 0.1875f, 0.875f, 0.1875f, 0.8125f, 0.9375f, 0.8125f); + break; + case 2: + mRender.translate(0, 0, amount); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.0625f, 0.8125f, 0.8125f, 0.125f); + break; + case 3: + mRender.translate(0, 0, -amount); + mRender.drawBox(63, 0.1875f, 0.1875f, 0.875f, 0.8125f, 0.8125f, 0.9375f); + break; + case 4: + mRender.translate(amount, 0, 0); + mRender.drawBox(63, 0.0625f, 0.1875f, 0.1875f, 0.125f, 0.8125f, 0.8125f); + break; + case 5: + mRender.translate(-amount, 0, 0); + mRender.drawBox(63, 0.875f, 0.1875f, 0.1875f, 0.9375f, 0.8125f, 0.8125f); + break; + } + + tes.draw(); + } + + @Override + public void renderItem( TubeDefinition type, ItemStack item ) + { + mRender.resetTransform(); + mRender.enableNormals = true; + mRender.resetTextureFlip(); + mRender.resetTextureRotation(); + mRender.resetLighting(15728880); + mRender.faceMode = FaceMode.Normal; + + mRender.setLocalLights(1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); + + Tessellator tes = Tessellator.instance; + + GL11.glDisable(GL11.GL_CULL_FACE); + + FMLClientHandler.instance().getClient().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + tes.startDrawingQuads(); + + mRender.setIcon(type.getCenterIcon()); + mRender.drawBox(55, 0.25f, 0.25f, 0.25f, 0.75f, 0.75f, 0.75f); + + renderBody(3); + + tes.draw(); + + GL11.glEnable(GL11.GL_CULL_FACE); + + renderPump(3, ((System.currentTimeMillis() % 1000) / 1000.0f)); + } + + + @Override + public void renderDynamic( TubeDefinition type, ITube tube, World world, int x, int y, int z, float frameTime ) + { + int direction = ((IDirectionalTube)tube).getFacing(); + + mRender.resetTransform(); + mRender.enableNormals = false; + mRender.setLightingFromBlock(world, x, y, z); + mRender.resetTextureFlip(); + mRender.resetTextureRotation(); + mRender.faceMode = FaceMode.Both; + + GL11.glDisable(GL11.GL_LIGHTING); + + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, z); + + mRender.setLocalLights(0.5f, 1.0f, 0.8f, 0.8f, 0.6f, 0.6f); + + renderPump(direction, ((AdvancedExtractionTube)tube).animTime + 0.05f * frameTime); + + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + + super.renderDynamic(type, tube, world, x, y, z, frameTime); + } +} diff --git a/src/main/java/schmoller/tubes/types/AdvancedExtractionTube.java b/src/main/java/schmoller/tubes/types/AdvancedExtractionTube.java index 077c26e..3ef56c6 100644 --- a/src/main/java/schmoller/tubes/types/AdvancedExtractionTube.java +++ b/src/main/java/schmoller/tubes/types/AdvancedExtractionTube.java @@ -5,12 +5,17 @@ import java.util.Random; import codechicken.lib.data.MCDataInput; +import codechicken.lib.data.MCDataOutput; +import codechicken.lib.vec.Cuboid6; import codechicken.multipart.IRedstonePart; import codechicken.multipart.RedstoneInteractions; 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.MovingObjectPosition; +import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; import schmoller.tubes.AnyFilter; import schmoller.tubes.ModTubes; @@ -107,12 +112,35 @@ public void setProperty( int prop, T value ) mColor = ((Number)value).intValue(); break; } + + tile().markDirty(); + } + + @Override + public Cuboid6 getBounds() + { + switch(getFacing()) + { + default: + case 0: + return new Cuboid6(0.1875f, 0.0f, 0.1875f, 0.8125f, 0.8125f, 0.8125f); + case 1: + return new Cuboid6(0.1875f, 0.1875f, 0.1875f, 0.8125f, 1.0f, 0.8125f); + case 2: + return new Cuboid6(0.1875f, 0.1875f, 0.0f, 0.8125f, 0.8125f, 0.8125f); + case 3: + return new Cuboid6(0.1875f, 0.1875f, 0.1875f, 0.8125f, 0.8125f, 1.0f); + case 4: + return new Cuboid6(0.0f, 0.1875f, 0.1875f, 0.8125f, 0.8125f, 0.8125f); + case 5: + return new Cuboid6(0.1875f, 0.1875f, 0.1875f, 1.0f, 0.8125f, 0.8125f); + } } @Override protected int getConnectableSides() { - return ~(1 << getFacing()); + return (1 << (getFacing() ^ 1)); } @Override @@ -142,6 +170,7 @@ public IFilter getFilter(int index) public void setFilter(int index, IFilter filter) { mFilters[index] = filter; + tile().markDirty(); } public PullMode getMode() @@ -571,4 +600,78 @@ public boolean activate( EntityPlayer player, MovingObjectPosition part, ItemSta @Override public int weakPowerLevel( int side ) { return 0; } + + @Override + public void save( NBTTagCompound root ) + { + super.save(root); + + NBTTagList items = new NBTTagList(); + for(int i = 0; i < mFilters.length; ++i) + { + if(mFilters[i] != null) + { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("Slot", i); + FilterRegistry.getInstance().writeFilter(mFilters[i],tag); + items.appendTag(tag); + } + } + + root.setTag("Filters", items); + + root.setInteger("Mode", mMode.ordinal()); + root.setInteger("RSMode", mRSMode.ordinal()); + root.setInteger("Size", mSize.ordinal()); + mOverflow.save(root); + + root.setShort("Color", (short)mColor); + } + + @Override + public void load( NBTTagCompound root ) + { + super.load(root); + + NBTTagList filters = root.getTagList("Filters", Constants.NBT.TAG_COMPOUND); + for(int i = 0; i < filters.tagCount(); ++i) + { + NBTTagCompound tag = filters.getCompoundTagAt(i); + int slot = tag.getInteger("Slot"); + mFilters[slot] = FilterRegistry.getInstance().readFilter(tag); + } + + mMode = PullMode.values()[root.getInteger("Mode")]; + mRSMode = RedstoneMode.values()[root.getInteger("RSMode")]; + mSize = SizeMode.values()[root.getInteger("Size")]; + + mColor = root.getShort("Color"); + } + + @Override + public void writeDesc( MCDataOutput output ) + { + super.writeDesc(output); + + output.writeByte(mMode.ordinal()); + output.writeByte(mRSMode.ordinal()); + output.writeByte(mSize.ordinal()); + output.writeShort(mColor); + + output.writeBoolean(mIsPowered); + } + + @Override + public void readDesc( MCDataInput input ) + { + super.readDesc(input); + + mMode = PullMode.values()[input.readByte()]; + mRSMode = RedstoneMode.values()[input.readByte()]; + mSize = SizeMode.values()[input.readByte()]; + mColor = input.readShort(); + + mIsPowered = input.readBoolean(); + } + } diff --git a/src/main/java/schmoller/tubes/types/ManagementTube.java b/src/main/java/schmoller/tubes/types/ManagementTube.java index 202a6b7..9d5d989 100644 --- a/src/main/java/schmoller/tubes/types/ManagementTube.java +++ b/src/main/java/schmoller/tubes/types/ManagementTube.java @@ -495,7 +495,7 @@ protected boolean onItemJunction( TubeItem item ) Payload add = item.item.copy(); add.setSize(toAdd); - remaining = handler.insert(add, getFacing(), true); + remaining = handler.insert(add, getFacing() ^ 1, true); if(toAdd != item.item.size()) { diff --git a/src/main/resources/assets/tubes/lang/en_US.lang b/src/main/resources/assets/tubes/lang/en_US.lang index 0e3096b..9212a04 100644 --- a/src/main/resources/assets/tubes/lang/en_US.lang +++ b/src/main/resources/assets/tubes/lang/en_US.lang @@ -16,6 +16,7 @@ tubes.tank.name=Tank Tube tubes.buffer.name=Buffer Tube tubes.roundrobin.name=Round Robin Tube tubes.management.name=Management Tube +tubes.advancedExtraction.name=Advanced Extraction Tube fluid.plastic=Plastic @@ -72,3 +73,14 @@ gui.managementtube.mode.PassiveFill=Passive Fill gui.managementtube.priority=Priority gui.overflow.name=Overflow Contents + +gui.pullmode.NormalAllow=Pull matching +gui.pullmode.NormalDeny=Pull non-matching +gui.pullmode.Random=Pull random +gui.pullmode.Sequence=Pull sequence +gui.pullmode.Overflow=Pull overflow + +gui.redstonemode.High=Pull with redstone signal +gui.redstonemode.Low=Pull without redstone signal +gui.redstonemode.Ignore=Always pull +gui.redstonemode.Pulse=Pull once per redstone pulse \ No newline at end of file diff --git a/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction-closed.png b/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction-closed.png new file mode 100644 index 0000000..31e8891 Binary files /dev/null and b/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction-closed.png differ diff --git a/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction-open.png b/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction-open.png new file mode 100644 index 0000000..ef1639c Binary files /dev/null and b/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction-open.png differ diff --git a/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction.png b/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction.png new file mode 100644 index 0000000..91358fc Binary files /dev/null and b/src/main/resources/assets/tubes/textures/blocks/tube-advancedextraction.png differ diff --git a/src/main/resources/assets/tubes/textures/items/diagnosticTool.png b/src/main/resources/assets/tubes/textures/items/diagnosticTool.png new file mode 100644 index 0000000..5feb955 Binary files /dev/null and b/src/main/resources/assets/tubes/textures/items/diagnosticTool.png differ diff --git a/src/main/resources/assets/tubes/textures/models/tube-advancedextraction-pump.png b/src/main/resources/assets/tubes/textures/models/tube-advancedextraction-pump.png new file mode 100644 index 0000000..258f171 Binary files /dev/null and b/src/main/resources/assets/tubes/textures/models/tube-advancedextraction-pump.png differ