diff options
32 files changed, 1705 insertions, 129 deletions
diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java index 9a4e803f67..4616bf8671 100644 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ b/src/main/java/com/github/technus/tectech/TecTech.java @@ -2,11 +2,12 @@ package com.github.technus.tectech; import com.github.technus.tectech.auxiliary.Reference; import com.github.technus.tectech.auxiliary.TecTechConfig; -import com.github.technus.tectech.elementalMatter.core.commands.ListEM; import com.github.technus.tectech.elementalMatter.core.commands.GiveEM; +import com.github.technus.tectech.elementalMatter.core.commands.ListEM; import com.github.technus.tectech.loader.MainLoader; import com.github.technus.tectech.loader.ModGuiHandler; import com.github.technus.tectech.proxy.CommonProxy; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.network.RotationPacketDispatcher; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; @@ -83,6 +84,7 @@ public class TecTech { GTCustomLoader.load(); + new RotationPacketDispatcher(); NetworkRegistry.INSTANCE.registerGuiHandler(instance, new ModGuiHandler()); proxy.registerRenderInfo(); diff --git a/src/main/java/com/github/technus/tectech/Util.java b/src/main/java/com/github/technus/tectech/Util.java index 25327e1369..87f3a2bebb 100644 --- a/src/main/java/com/github/technus/tectech/Util.java +++ b/src/main/java/com/github/technus/tectech/Util.java @@ -1,6 +1,7 @@ package com.github.technus.tectech; import com.github.technus.tectech.thing.casing.TT_Container_Casings; +import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.GregTech_API; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -67,6 +68,7 @@ public final class Util { return result.toString(); } + /* //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller //This only checks for REGULAR BLOCKS! public static boolean StructureChecker(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks @@ -219,8 +221,7 @@ public final class Util { IMetaTileEntity imt = aBaseMetaTileEntity.getMetaTileEntity(); int x, y, z, a, b, c, pointer; - int - baseX=aBaseMetaTileEntity.getXCoord(), + int baseX=aBaseMetaTileEntity.getXCoord(), baseZ=aBaseMetaTileEntity.getZCoord(), baseY=aBaseMetaTileEntity.getYCoord(); //a,b,c - relative to block face! @@ -321,7 +322,264 @@ public final class Util { if (igt == null || !(boolean) adder.invoke(imt, addingMethods[pointer], igt, casingTextures[pointer])) { if (world.getBlock(x, y, z) != blockTypeFallback[pointer]) { if (DEBUG_MODE) { - TecTech.Logger.info("Fallback-struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + blockTypeFallback[pointer].getUnlocalizedName()); + TecTech.Logger.info("Fallback-struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); + } + return false; + } + if (world.getBlockMetadata(x, y, z) != blockMetaFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.Logger.info("Fallback-Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMetaFallback[pointer]); + } + return false; + } + } + } catch (InvocationTargetException | IllegalAccessException e) { + if (DEBUG_MODE) { + e.printStackTrace(); + } + return false; + } + } + } + } else if (forceCheck) { + return false; + } + a++;//block in horizontal layer + } + } + b--;//horizontal layer + } + c++;//depth + } + return true; + } + */ + + //Check Machine Structure based on string[][] (effectively char[][][]), ond offset of the controller + //This only checks for REGULAR BLOCKS! + public static boolean StructureCheckerExtreme( + String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR-1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + Method adder, + String[] addingMethods, + short[] casingTextures, + Block[] blockTypeFallback,//use numbers 0-9 for casing types + byte[] blockMetaFallback,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, + IFrontRotation frontRotation, + boolean forceCheck) { + World world = aBaseMetaTileEntity.getWorld(); + if (world.isRemote) { + return false; + } + //TE Rotation + int facingAndRotation = aBaseMetaTileEntity.getFrontFacing() + (frontRotation==null?0:(frontRotation.getFrontRotation()<<3)); + + IGregTechTileEntity igt; + IMetaTileEntity imt = aBaseMetaTileEntity.getMetaTileEntity(); + + int x, y, z, a, b, c, pointer; + int baseX=aBaseMetaTileEntity.getXCoord(), + baseZ=aBaseMetaTileEntity.getZCoord(), + baseY=aBaseMetaTileEntity.getYCoord(); + //a,b,c - relative to block face! + //x,y,z - relative to block position on map! + //yPos - absolute height of checked block + + //perform your duties + c = -depthOffset; + for (String[] _structure : structure) {//front to back + b = verticalOffset; + for (String __structure : _structure) {//top to bottom + a = -horizontalOffset; + for (char block : __structure.toCharArray()) {//left to right + if (block < ' ') {//Control chars allow skipping + b -= block; + break; + } else if (block > '@') //characters allow to skip check A-1 skip, B-2 skips etc. + { + a += block - '@'; + }//else if (block < '+')//used to mark THINGS + // a++; + else if (block=='.') { + a++; + } else { + //get x y z from rotation + switch (facingAndRotation) {//translation + case 4: + x = baseX + c; + z = baseZ + a; + y = baseY + b; + break; + case 12: + x = baseX + c; + y = baseY - a; + z = baseZ + b; + break; + case 20: + x = baseX + c; + z = baseZ - a; + y = baseY - b; + break; + case 28: + x = baseX + c; + y = baseY + a; + z = baseZ - b; + break; + + case 3: + x = baseX + a; + z = baseZ - c; + y = baseY + b; + break; + case 11: + y = baseY - a; + z = baseZ - c; + x = baseX + b; + break; + case 19: + x = baseX - a; + z = baseZ - c; + y = baseY - b; + break; + case 27: + y = baseY + a; + z = baseZ - c; + x = baseX - b; + break; + + case 5: + x = baseX - c; + z = baseZ - a; + y = baseY + b; + break; + case 13: + x = baseX - c; + y = baseY - a; + z = baseZ - b; + break; + case 21: + x = baseX - c; + z = baseZ + a; + y = baseY - b; + break; + case 29: + x = baseX - c; + y = baseY + a; + z = baseZ + b; + break; + + case 2: + x = baseX - a; + z = baseZ + c; + y = baseY + b; + break; + case 10: + y = baseY - a; + z = baseZ + c; + x = baseX - b; + break; + case 18: + x = baseX + a; + z = baseZ + c; + y = baseY - b; + break; + case 26: + y = baseY + a; + z = baseZ + c; + x = baseX + b; + break; + //Things get odd if the block faces up or down... + case 1: + x = baseX + a; + z = baseZ - b; + y = baseY - c; + break;//similar to 3 + case 9: + z = baseZ + a; + x = baseX + b; + y = baseY - c; + break;//similar to 3 + case 17: + x = baseX - a; + z = baseZ + b; + y = baseY - c; + break;//similar to 3 + case 25: + z = baseZ - a; + x = baseX - b; + y = baseY - c; + break;//similar to 3 + + case 0: + x = baseX - a; + z = baseZ - b; + y = baseY + c; + break;//similar to 2 + case 8: + z = baseZ + a; + x = baseX - b; + y = baseY + c; + break; + case 16: + x = baseX + a; + z = baseZ + b; + y = baseY + c; + break; + case 24: + z = baseZ - a; + x = baseX + b; + y = baseY + c; + break; + default: + if(DEBUG_MODE) { + TecTech.Logger.info("facing = " + facingAndRotation); + } + return false; + } + + //that must be here since in some cases other axis (b,c) controls y + if (y < 0 || y >= 256) { + return false; + } + + //Check block + if (world.blockExists(x, y, z)) {//this actually checks if the chunk is loaded at this pos + switch (block) { + case '-'://must be air + if (world.getBlock(x, y, z).getMaterial() != Material.air) { + return false; + } + break; + case '+'://must not be air + if (world.getBlock(x, y, z).getMaterial() == Material.air) { + return false; + } + break; + default://check for block (countable) + if ((pointer = block - '0') >= 0) { + //countable air -> net.minecraft.block.BlockAir + if (world.getBlock(x, y, z) != blockType[pointer]) { + if (DEBUG_MODE) { + TecTech.Logger.info("Struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + blockType[pointer].getUnlocalizedName()); + } + return false; + } + if (world.getBlockMetadata(x, y, z) != blockMeta[pointer]) { + if (DEBUG_MODE) { + TecTech.Logger.info("Struct-meta-id-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlockMetadata(x, y, z) + ' ' + blockMeta[pointer]); + } + return false; + } + } else if ((pointer = block - ' ') >= 0) { + igt = aBaseMetaTileEntity.getIGregTechTileEntity(x, y, z); + try { + if (igt == null || !(boolean) adder.invoke(imt, addingMethods[pointer], igt, casingTextures[pointer])) { + if (world.getBlock(x, y, z) != blockTypeFallback[pointer]) { + if (DEBUG_MODE) { + TecTech.Logger.info("Fallback-struct-block-error " + x + ' ' + y + ' ' + z + " / " + a + ' ' + b + ' ' + c + " / " + world.getBlock(x, y, z).getUnlocalizedName() + ' ' + (blockTypeFallback[pointer] == null ? "null" : blockTypeFallback[pointer].getUnlocalizedName())); } return false; } @@ -359,17 +617,37 @@ public final class Util { int horizontalOffset, int verticalOffset, int depthOffset, IGregTechTileEntity aBaseMetaTileEntity, boolean hintsOnly) { byte facing = aBaseMetaTileEntity.getFrontFacing(); - return StructureBuilder(structure,blockType,blockMeta, + return StructureBuilderExtreme(structure,blockType,blockMeta, horizontalOffset,verticalOffset,depthOffset, - aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(),aBaseMetaTileEntity.getYCoord(),aBaseMetaTileEntity.getZCoord()), + aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(),aBaseMetaTileEntity.getYCoord(),aBaseMetaTileEntity.getZCoord()),null, + facing,hintsOnly); + } + + public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + IGregTechTileEntity aBaseMetaTileEntity, IFrontRotation frontRotation, boolean hintsOnly) { + byte facing = aBaseMetaTileEntity.getFrontFacing(); + return StructureBuilderExtreme(structure,blockType,blockMeta, + horizontalOffset,verticalOffset,depthOffset, + aBaseMetaTileEntity.getWorld().getTileEntity(aBaseMetaTileEntity.getXCoord(),aBaseMetaTileEntity.getYCoord(),aBaseMetaTileEntity.getZCoord()),frontRotation, facing,hintsOnly); } public static boolean StructureBuilder(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks + Block[] blockType,//use numbers 0-9 for casing types + byte[] blockMeta,//use numbers 0-9 for casing types + int horizontalOffset, int verticalOffset, int depthOffset, + TileEntity tileEntity, int facing, boolean hintsOnly){ + return StructureBuilderExtreme(structure,blockType,blockMeta,horizontalOffset,verticalOffset,depthOffset,tileEntity,null,facing,hintsOnly); + } + + public static boolean StructureBuilderExtreme(String[][] structure,//0-9 casing, +- air no air, A... ignore 'A'-CHAR+1 blocks Block[] blockType,//use numbers 0-9 for casing types byte[] blockMeta,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset, - TileEntity tileEntity, int facing, boolean hintsOnly) { + TileEntity tileEntity, IFrontRotation frontRotation, int facing, boolean hintsOnly) { if(!tileEntity.hasWorldObj()) { return false; } @@ -387,6 +665,9 @@ public final class Util { baseY=tileEntity.yCoord; //a,b,c - relative to block face! //x,y,z - relative to block position on map! + if(frontRotation!=null) { + facing += frontRotation.getFrontRotation() << 3; + } //perform your duties c = -depthOffset; @@ -408,39 +689,136 @@ public final class Util { a++; } else { //get x y z from rotation - switch (facing) {//translation + switch (facing) { case 4: x = baseX + c; z = baseZ + a; y = baseY + b; break; + case 12: + x = baseX + c; + y = baseY - a; + z = baseZ + b; + break; + case 20: + x = baseX + c; + z = baseZ - a; + y = baseY - b; + break; + case 28: + x = baseX + c; + y = baseY + a; + z = baseZ - b; + break; + case 3: x = baseX + a; z = baseZ - c; y = baseY + b; break; + case 11: + y = baseY - a; + z = baseZ - c; + x = baseX + b; + break; + case 19: + x = baseX - a; + z = baseZ - c; + y = baseY - b; + break; + case 27: + y = baseY + a; + z = baseZ - c; + x = baseX - b; + break; + case 5: x = baseX - c; z = baseZ - a; y = baseY + b; break; + case 13: + x = baseX - c; + y = baseY - a; + z = baseZ - b; + break; + case 21: + x = baseX - c; + z = baseZ + a; + y = baseY - b; + break; + case 29: + x = baseX - c; + y = baseY + a; + z = baseZ + b; + break; + case 2: x = baseX - a; z = baseZ + c; y = baseY + b; break; + case 10: + y = baseY - a; + z = baseZ + c; + x = baseX - b; + break; + case 18: + x = baseX + a; + z = baseZ + c; + y = baseY - b; + break; + case 26: + y = baseY + a; + z = baseZ + c; + x = baseX + b; + break; //Things get odd if the block faces up or down... case 1: x = baseX + a; + z = baseZ - b; + y = baseY - c; + break;//similar to 3 + case 9: + z = baseZ + a; + x = baseX + b; + y = baseY - c; + break;//similar to 3 + case 17: + x = baseX - a; z = baseZ + b; y = baseY - c; break;//similar to 3 + case 25: + z = baseZ - a; + x = baseX - b; + y = baseY - c; + break;//similar to 3 + case 0: x = baseX - a; z = baseZ - b; y = baseY + c; break;//similar to 2 + case 8: + z = baseZ + a; + x = baseX - b; + y = baseY + c; + break; + case 16: + x = baseX + a; + z = baseZ + b; + y = baseY + c; + break; + case 24: + z = baseZ - a; + x = baseX + b; + y = baseY + c; + break; default: + if(DEBUG_MODE) { + TecTech.Logger.info("facing = " + facing); + } return false; } @@ -507,6 +885,7 @@ public final class Util { return true; } + public static String[] StructureWriter(IGregTechTileEntity aBaseMetaTileEntity, int horizontalOffset, int verticalOffset, int depthOffset, int horizontalSize, int verticalSize, int depthSize, boolean ignoreAir) { diff --git a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java index 3d29927a6c..6e57ffd788 100644 --- a/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java +++ b/src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java @@ -182,6 +182,16 @@ public final class dComplexAspectDefinition extends cElementalDefinition impleme } @Override + public boolean usesMultipleDecayCalls(long energyLevel) { + return false; + } + + @Override + public boolean decayMakesEnergy(long energyLevel) { + return false; + } + + @Override public cElementalDecay[] getNaturalDecayInstant() { return noDecay; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java index 4193153d57..de677f7197 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java @@ -12,12 +12,15 @@ import net.minecraft.nbt.NBTTagCompound; import java.util.ArrayList; import static com.github.technus.tectech.elementalMatter.definitions.primitive.cPrimitiveDefinition.null__; +import static com.github.technus.tectech.elementalMatter.definitions.primitive.eBosonDefinition.deadEnd; import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_scanner.*; /** * Created by danie_000 on 22.10.2016. */ public final class cElementalInstanceStack implements iHasElementalDefinition { + public static int MIN_MULTIPLE_DECAY_CALLS=4,MAX_MULTIPLE_DECAY_CALLS=16,DECAY_CALL_PER=144; + public final iElementalDefinition definition; //energy - if positive then particle should try to decay private long energy; @@ -92,7 +95,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { public void setEnergy(long newEnergyLevel){ energy=newEnergyLevel; - setLifeTimeMultipleOfBaseValue(getLifeTimeMult()); + setLifeTimeMultiplier(getLifeTimeMultiplier()); } @Deprecated //can be done from definition @@ -136,10 +139,10 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { return lifeTime; } - public float setLifeTimeMultipleOfBaseValue(float mult) { + public float setLifeTimeMultiplier(float mult) { if(mult<=0) //since infinity*0=nan { - throw new IllegalArgumentException("mult must be >0"); + throw new IllegalArgumentException("multiplier must be >0"); } lifeTimeMult = mult; if (definition.getRawTimeSpan(energy) <= 0) { @@ -149,7 +152,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { return lifeTime; } - public float getLifeTimeMult() { + public float getLifeTimeMultiplier() { return lifeTimeMult; } @@ -162,24 +165,45 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } public cElementalInstanceStackMap decay(float lifeTimeMult, long apparentAge, long postEnergize) { - long newEnergyLevel=postEnergize+ energy; - if(newEnergyLevel>0) { + long newEnergyLevel = postEnergize + energy; + if (newEnergyLevel > 0) { newEnergyLevel -= 1; - } else if(newEnergyLevel<0) { + } else if (newEnergyLevel < 0) { newEnergyLevel += 1; } + if(definition.usesMultipleDecayCalls(energy)){ + long amountTemp=amount; + long decayCnt=Math.min(Math.max(amount/DECAY_CALL_PER,MIN_MULTIPLE_DECAY_CALLS),MAX_MULTIPLE_DECAY_CALLS); + long amountPer=amount/decayCnt; + amount-=amountPer*(--decayCnt); + cElementalInstanceStackMap output=decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); + if(output==null)return null; + if(amountPer>0){ + amount=amountPer; + for(int i=0;i<decayCnt;i++){ + output.putUnifyAll(decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel)); + } + } + amount=amountTemp; + return output; + }else{ + return decayMechanics(lifeTimeMult,apparentAge,newEnergyLevel); + } + } + + private cElementalInstanceStackMap decayMechanics(float lifeTimeMult, long apparentAge, long newEnergyLevel) { if (energy > 0 && !definition.usesSpecialEnergeticDecayHandling()) { - setLifeTimeMultipleOfBaseValue(getLifeTimeMult()); + setLifeTimeMultiplier(getLifeTimeMultiplier()); return decayCompute(definition.getEnergyInducedDecay(energy), lifeTimeMult, -1, newEnergyLevel); - }else if (definition.getRawTimeSpan(energy) < 0) { + } else if (definition.getRawTimeSpan(energy) < 0) { return null;//return null, decay cannot be achieved - } else if(definition.isTimeSpanHalfLife()){ - return exponentialDecayCompute(energy>0?definition.getEnergyInducedDecay(energy):definition.getDecayArray(), lifeTimeMult, -1, newEnergyLevel); - } else{ + } else if (definition.isTimeSpanHalfLife()) { + return exponentialDecayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getDecayArray(), lifeTimeMult, -1, newEnergyLevel); + } else { if (1F > lifeTime) { - return decayCompute(energy>0?definition.getEnergyInducedDecay(energy):definition.getNaturalDecayInstant(), lifeTimeMult, 0, newEnergyLevel); + return decayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getNaturalDecayInstant(), lifeTimeMult, 0, newEnergyLevel); } else if ((float) apparentAge > lifeTime) { - return decayCompute(energy>0?definition.getEnergyInducedDecay(energy):definition.getDecayArray(), lifeTimeMult, 0, newEnergyLevel); + return decayCompute(energy > 0 ? definition.getEnergyInducedDecay(energy) : definition.getDecayArray(), lifeTimeMult, 0, newEnergyLevel); } } return null;//return null since decay cannot be achieved @@ -190,6 +214,16 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { double decayInverseRatio=Math.pow(2d,1d/* 1 second *//(double)lifeTime); double newAmount=(double)amount/decayInverseRatio; long amountRemaining= (long)Math.floor(newAmount) +(TecTech.Rnd.nextDouble()<=newAmount-Math.floor(newAmount)?1:0); + //if(definition.getSymbol().startsWith("U ")) { + // System.out.println("newAmount = " + newAmount); + // System.out.println("amountRemaining = " + amountRemaining); + // for(cElementalDecay decay:decays){ + // System.out.println("prob = "+decay.probability); + // for(cElementalDefinitionStack stack:decay.outputStacks.values()){ + // System.out.println("stack = " + stack.getDefinition().getSymbol() + " " + stack.amount); + // } + // } + //} if(amountRemaining==amount) { return null;//nothing decayed } else if(amountRemaining<=0) { @@ -206,12 +240,19 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } //Use to get direct decay output providing correct decay array - public cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, long energy) { + private cElementalInstanceStackMap decayCompute(cElementalDecay[] decays, float lifeTimeMult, long newProductsAge, long energy) { if (decays == null) { return null;//Can not decay so it wont - } else if (decays.length == 0) { + } + if (decays.length == 0) { + if(definition.decayMakesEnergy(this.energy)) { + return null; + } return new cElementalInstanceStackMap();//provide non null 0 length array for annihilation } else if (decays.length == 1) {//only one type of decay :D, doesn't need dead end + if(decays[0]==deadEnd && definition.decayMakesEnergy(this.energy)) { + return null; + } cElementalInstanceStackMap products=decays[0].getResults(lifeTimeMult, newProductsAge, energy, amount); if(newProductsAge<0){ for(cElementalInstanceStack stack:products.values()){ @@ -236,25 +277,22 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { float remainingProbability = 1F; for (int i = 0; i < differentDecays; i++) { - if (decays[i].probability > 1F) { + if (decays[i].probability >= 1F) { long thisDecayAmount = (long) Math.floor(remainingProbability * (double) amount); - if (thisDecayAmount == 0) { - //remainingProbability=something; - break; - } else if (thisDecayAmount <= amountRemaining) { - amountRemaining -= thisDecayAmount; - qttyOfDecay[i] += thisDecayAmount; - break; + if (thisDecayAmount > 0) { + if (thisDecayAmount <= amountRemaining) { + amountRemaining -= thisDecayAmount; + qttyOfDecay[i] += thisDecayAmount; + }else {//in case too much was made + qttyOfDecay[i] += amountRemaining; + amountRemaining = 0; + //remainingProbability=0; + } } - //in case too much was made - qttyOfDecay[i] += amountRemaining; - amountRemaining = 0; - //remainingProbability=0; break; } long thisDecayAmount = (long) Math.floor(decays[i].probability * (double) amount); if (thisDecayAmount <= amountRemaining && thisDecayAmount > 0) {//some was made - remainingProbability -= decays[i].probability; amountRemaining -= thisDecayAmount; qttyOfDecay[i] += thisDecayAmount; } else if (thisDecayAmount > amountRemaining) {//too much was made @@ -262,7 +300,11 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { amountRemaining = 0; //remainingProbability=0; break; - }//if 0 + } + remainingProbability -= decays[i].probability; + if(remainingProbability<=0) { + break; + } } for (int i = 0; i < amountRemaining; i++) { @@ -276,9 +318,23 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } } - for (int i = 0; i < differentDecays; i++) { - if (qttyOfDecay[i] > 0) { - output.putUnifyAll(decays[i].getResults(lifeTimeMult, newProductsAge, energy, qttyOfDecay[i])); + if(definition.decayMakesEnergy(this.energy)){ + for (int i = 0; i < differentDecays; i++) { + if (qttyOfDecay[i] > 0) { + if(decays[i]==deadEnd){ + cElementalInstanceStack clone=this.clone(); + clone.amount=qttyOfDecay[i]; + output.putUnify(clone); + }else { + output.putUnifyAll(decays[i].getResults(lifeTimeMult, newProductsAge, energy, qttyOfDecay[i])); + } + } + } + }else{ + for (int i = 0; i < differentDecays; i++) { + if (qttyOfDecay[i] > 0) { + output.putUnifyAll(decays[i].getResults(lifeTimeMult, newProductsAge, energy, qttyOfDecay[i])); + } } } @@ -322,7 +378,7 @@ public final class cElementalInstanceStack implements iHasElementalDefinition { } this.energy = energy; - setLifeTimeMultipleOfBaseValue(lifeTimeMul); + setLifeTimeMultiplier(lifeTimeMul); return this; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java index ab571e9d4c..c7b754432f 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java @@ -135,6 +135,16 @@ public abstract class cElementalPrimitive extends cElementalDefinition { } @Override + public boolean usesMultipleDecayCalls(long energyLevel) { + return false; + } + + @Override + public boolean decayMakesEnergy(long energyLevel) { + return false; + } + + @Override public cElementalDecay[] getDecayArray() { return elementalDecays; } diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java index 23d2df06a8..8a0bd486c0 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java @@ -41,6 +41,10 @@ public abstract class iElementalDefinition implements Comparable<iElementalDefin public abstract boolean usesSpecialEnergeticDecayHandling(); + public abstract boolean usesMultipleDecayCalls(long energyLevel); + + public abstract boolean decayMakesEnergy(long energyLevel); + public abstract float getEnergyDiffBetweenStates(long currentEnergy, long newEnergyLevel);//positive or negative public abstract float getMass();//mass... MeV/c^2 diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java index 1b17407970..7abcfe9a93 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java @@ -1216,6 +1216,28 @@ public final class dAtomDefinition extends cElementalDefinition { } @Override + public boolean usesMultipleDecayCalls(long energyLevel) { + if(!iaeaDefinitionExistsAndHasEnergyLevels) return false; + iaeaNuclide.energeticState state; + if(energyLevel>iaea.energeticStatesArray.length) { + state = iaea.energeticStatesArray[iaea.energeticStatesArray.length - 1]; + } else if(energyLevel<=0) { + state = iaea.energeticStatesArray[0]; + } else { + state = iaea.energeticStatesArray[(int) energyLevel]; + } + for (iaeaNuclide.iaeaDecay decay:state.decaymodes){ + if(decay.decayName.contains("F")) return true;//if is fissile + } + return false; + } + + @Override + public boolean decayMakesEnergy(long energyLevel) { + return iaeaDefinitionExistsAndHasEnergyLevels; + } + + @Override public cElementalDecay[] getNaturalDecayInstant() { //disembody ArrayList<cElementalDefinitionStack> decaysInto = new ArrayList<>(); diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java index c08588090d..50f1b2d1ce 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java @@ -222,6 +222,16 @@ public final class dHadronDefinition extends cElementalDefinition {//TODO Optimi } @Override + public boolean usesMultipleDecayCalls(long energyLevel) { + return false; + } + + @Override + public boolean decayMakesEnergy(long energyLevel) { + return false; + } + + @Override public cElementalDecay[] getDecayArray() { cElementalDefinitionStack[] quarkStacks = this.quarkStacks.values(); if (amount == 2 && quarkStacks.length == 2 && quarkStacks[0].definition.getMass() == quarkStacks[1].definition.getMass() && quarkStacks[0].definition.getType() == -quarkStacks[1].definition.getType()) { diff --git a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java index 636cd9b8fc..5d98f3cb71 100644 --- a/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java +++ b/src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java @@ -36,6 +36,6 @@ public final class eBosonDefinition extends cElementalPrimitive { @Override public boolean isTimeSpanHalfLife() { - return false; + return this==boson_H__; } } diff --git a/src/main/java/com/github/technus/tectech/loader/ThingsLoader.java b/src/main/java/com/github/technus/tectech/loader/ThingsLoader.java index 5906f3d3de..3cd285a858 100644 --- a/src/main/java/com/github/technus/tectech/loader/ThingsLoader.java +++ b/src/main/java/com/github/technus/tectech/loader/ThingsLoader.java @@ -48,6 +48,7 @@ public class ThingsLoader implements Runnable { TecTech.Logger.info("Reactor Simulator registered"); ConstructableTriggerItem.run(); + FrontRotationTriggerItem.run(); ParametrizerMemoryCard.run(); ElementalDefinitionScanStorage_EM.run(); TecTech.Logger.info("Useful Items registered"); diff --git a/src/main/java/com/github/technus/tectech/network/Dispatcher.java b/src/main/java/com/github/technus/tectech/network/Dispatcher.java deleted file mode 100644 index cae93a7ce8..0000000000 --- a/src/main/java/com/github/technus/tectech/network/Dispatcher.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.github.technus.tectech.network; - -import com.github.technus.tectech.auxiliary.Reference; -import eu.usrv.yamcore.network.PacketDispatcher; - -/** - * Created by Bass on 25/07/2017. - */ -public class Dispatcher extends PacketDispatcher { - public Dispatcher() { - super(Reference.MODID); - } - - @Override - public void registerPackets() { - //this.registerMessage(SpawnParticleFXMessage.SpawnParticleFXMessageHandler.class, SpawnParticleFXMessage.class); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java new file mode 100644 index 0000000000..8f5b7e8fae --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java @@ -0,0 +1,66 @@ +package com.github.technus.tectech.thing.item; + +import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; + +import java.util.List; + +import static com.github.technus.tectech.auxiliary.Reference.MODID; + +/** + * Created by Tec on 15.03.2017. + */ +public final class FrontRotationTriggerItem extends Item { + public static FrontRotationTriggerItem INSTANCE; + + private FrontRotationTriggerItem() { + setUnlocalizedName("em.frontRotate"); + setTextureName(MODID + ":itemFrontRotate"); + } + + @Override + public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if(tTileEntity==null || aPlayer instanceof FakePlayer) { + return aPlayer instanceof EntityPlayerMP; + } + if (aPlayer instanceof EntityPlayerMP) { + if (tTileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + if (metaTE instanceof IFrontRotation) { + ((IFrontRotation) metaTE).rotateAroundFrontPlane(!aPlayer.isSneaking()); + System.out.println("DID SHIT"); + return true; + } + } else if (tTileEntity instanceof IFrontRotation) { + ((IFrontRotation) tTileEntity).rotateAroundFrontPlane(!aPlayer.isSneaking()); + return true; + } + } + return false; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.TEC_MARK_GENERAL); + aList.add("Triggers Front Rotation Interface"); + aList.add(EnumChatFormatting.BLUE + "Rotates only the front panel,"); + aList.add(EnumChatFormatting.BLUE + "which allows structure rotation."); + } + + public static void run() { + INSTANCE = new FrontRotationTriggerItem(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java new file mode 100644 index 0000000000..7ac296e41f --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java @@ -0,0 +1,11 @@ +package com.github.technus.tectech.thing.metaTileEntity; + +public interface IFrontRotation { + boolean isFrontRotationValid(byte frontRotation, byte frontFacing); + + void rotateAroundFrontPlane(boolean direction); + + void forceSetRotationDoRender(byte frontRotation); + + byte getFrontRotation(); +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java index cfcbf1ac90..4e7cb3e8b6 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java @@ -4,13 +4,13 @@ import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; @@ -79,7 +79,7 @@ public class GT_MetaTileEntity_EM_annihilation extends GT_MetaTileEntity_Multibl @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index 748fa18f5a..1f72f00c20 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -4,13 +4,13 @@ import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; @@ -176,7 +176,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java index bc814e30d2..c48cd143b2 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java @@ -6,13 +6,13 @@ import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.casing.TT_Container_Casings; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; @@ -107,13 +107,13 @@ public class GT_MetaTileEntity_EM_collider extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4]}; } @Override - public boolean isFacingValid(byte aFacing) { + public boolean isFacingValid_EM(byte aFacing) { return aFacing >= 2; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java index 66c32ac761..9ccdda3ca2 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java @@ -10,6 +10,7 @@ import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_H import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -19,7 +20,6 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; @@ -97,7 +97,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3]}; } @@ -354,7 +354,7 @@ public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockB } @Override - public boolean isFacingValid(byte aFacing) { + public boolean isFacingValid_EM(byte aFacing) { return aFacing >= 2; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java index 4c382c178a..e3e3ee4d71 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java @@ -4,13 +4,13 @@ import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; @@ -80,7 +80,7 @@ public class GT_MetaTileEntity_EM_crafting extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java index 7edd9caa5f..780a2d30bd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java @@ -5,7 +5,9 @@ import com.github.technus.tectech.elementalMatter.core.cElementalInstanceStackMa import com.github.technus.tectech.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputElemental; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -14,7 +16,6 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; @@ -22,7 +23,6 @@ import net.minecraft.util.EnumChatFormatting; import static com.github.technus.tectech.Util.StructureBuilder; import static com.github.technus.tectech.Util.VN; -import static com.github.technus.tectech.elementalMatter.core.templates.iElementalDefinition.STABLE_RAW_LIFE_TIME; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; @@ -33,6 +33,7 @@ import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBloc public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; + private cElementalInstanceStackMap contents=new cElementalInstanceStackMap(); //region structure private static final String[][] shape = new String[][]{ @@ -83,7 +84,7 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][12]}; } @@ -115,28 +116,44 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase @Override public boolean checkRecipe_EM(ItemStack itemStack) { cElementalInstanceStackMap map= getInputsClone_EM(); - if(map!=null && map.hasStacks() && map.getFirst().getLifeTime()< STABLE_RAW_LIFE_TIME){ + if(map!=null && map.hasStacks()){ + for(GT_MetaTileEntity_Hatch_InputElemental i:eInputHatches){ + i.getContainerHandler().clear(); + } return startRecipe(map.getFirst()); + }else if(eSafeVoid){ + contents.clear(); + }else if(contents.hasStacks()){ + startRecipe(null); } return false; } - private float m1,m2,m3; private boolean startRecipe(cElementalInstanceStack input) { - m3=(float)Math.ceil(input.getLifeTime() / Math.pow(input.amount,3)); - if(m3<1) { - explodeMultiblock(); - } - if(m3>=Integer.MAX_VALUE) { - return false; + if(input!=null) { + contents.putUnify(input); } - mMaxProgresstime = 1;//(int)m3; + + mMaxProgresstime = 20;//(int)m3; mEfficiencyIncrease = 10000; - m1 = input.getMass()/input.amount; - cElementalInstanceStackMap decayed=input.decay(); - m2 = decayed.getMass()/input.amount; - //TecTech.Logger.info("I " + input.toString()); - //TecTech.Logger.info("O " + decayed.toString()); + + float mass=contents.getMass(); + + System.out.println("INPUT"); + for(cElementalInstanceStack stack:contents.values()){ + System.out.println(stack.definition.getSymbol()+" "+stack.amount); + } + + contents.tickContent(1,0,1); + + System.out.println("MASS DIFF = " +(mass-contents.getMass())); + + //todo remove not actually decaying crap + + //for(cElementalInstanceStack stack:contents.values()){ + // System.out.println(stack.definition.getSymbol()+" "+stack.amount); + //} + return true; } @@ -174,7 +191,6 @@ public class GT_MetaTileEntity_EM_decay extends GT_MetaTileEntity_MultiblockBase "PowerPass: " + EnumChatFormatting.BLUE + ePowerPass + EnumChatFormatting.RESET + " SafeVoid: " + EnumChatFormatting.BLUE + eSafeVoid, "Computation: " + EnumChatFormatting.GREEN + eAvailableData + EnumChatFormatting.RESET + " / " + EnumChatFormatting.YELLOW + eRequiredData + EnumChatFormatting.RESET, - m1+" "+m2+ ' ' +m3 }; } } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java index e8238af2cb..3a7b64de0b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java @@ -71,7 +71,7 @@ public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBa } @Override - public boolean isFacingValid(byte aFacing) { + public boolean isFacingValid_EM(byte aFacing) { return aFacing >= 2; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java index dc7c99df7b..cdd220e85b 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java @@ -7,6 +7,7 @@ import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; @@ -17,7 +18,6 @@ import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; @@ -110,7 +110,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB @Override public void construct(int stackSize, boolean hintsOnly) { - StructureBuilder(shape, blockType, blockMeta,1, 3, 4, getBaseMetaTileEntity(),hintsOnly); + StructureBuilderExtreme(shape, blockType, blockMeta,1, 3, 4, getBaseMetaTileEntity(),this,hintsOnly); } @Override @@ -143,7 +143,7 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { if(aBaseMetaTileEntity.isServerSide()) { if (computationRemaining > 0) { aRecipe = null; @@ -334,15 +334,15 @@ public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockB } } - @Override - public boolean isFacingValid(byte aFacing) { - return aFacing >= 2; - } + //@Override + //public boolean isFacingValid(byte aFacing) { + // return aFacing >= 2; + //} @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new GT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][3]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java index eab87fe71a..b04a2d0cbd 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java @@ -186,7 +186,7 @@ public class GT_MetaTileEntity_EM_scanner extends GT_MetaTileEntity_MultiblockBa } @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { if(aBaseMetaTileEntity.isServerSide()) { if (totalComputationRemaining > 0 && objectResearched!=null) { eRecipe = null; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java index e15d24243e..bdc611434f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java @@ -8,13 +8,13 @@ import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -72,7 +72,7 @@ public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBas @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1], new GT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][1]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java index 1623ee60ad..b17d692068 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java @@ -6,13 +6,13 @@ import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -110,7 +110,7 @@ public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_Multiblo @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][0], new GT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][0], new TT_RenderedTexture(aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][0]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java index 5fb232b256..555e3fecc3 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java @@ -4,13 +4,13 @@ import com.github.technus.tectech.CommonValues; import com.github.technus.tectech.thing.block.QuantumGlassBlock; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; @@ -80,7 +80,7 @@ public class GT_MetaTileEntity_EM_wormhole extends GT_MetaTileEntity_MultiblockB @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4]}; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java index 0ef0b04c17..a53c7f5469 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java @@ -6,11 +6,11 @@ import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_Container_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_GUIContainer_MultiMachineEM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import net.minecraft.block.Block; @@ -86,7 +86,7 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], new GT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; + return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], new TT_RenderedTexture(aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE)}; }else if(aSide == GT_Utility.getOppositeSide(aFacing)) { return new ITexture[]{Textures.BlockIcons.CASING_BLOCKS[49], aActive ? Textures.BlockIcons.CASING_BLOCKS[52] : Textures.BlockIcons.CASING_BLOCKS[53]}; } @@ -104,7 +104,7 @@ public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_Multiblock } @Override - public boolean isFacingValid(byte aFacing) { + public boolean isFacingValid_EM(byte aFacing) { return aFacing >= 2; } diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_GUIContainer_MultiMachineEM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_GUIContainer_MultiMachineEM.java index 3456f22a05..0992601f6d 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_GUIContainer_MultiMachineEM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_GUIContainer_MultiMachineEM.java @@ -185,7 +185,7 @@ public class GT_GUIContainer_MultiMachineEM extends GT_GUIContainerMetaTile_Mach private void LEDdrawP(int x, int y, int i, int j, byte status) { int v = 192, su = 8, sv = 6, u = 11; switch (status) { - case STATUS_WRONG: {//fallthrough + case STATUS_WRONG: //fallthrough if (counter < 2) { drawTexturedModalRect(x + su * i, y + sv * j, u + su * i, v + sv * j, su, sv); break; @@ -193,7 +193,6 @@ public class GT_GUIContainer_MultiMachineEM extends GT_GUIContainerMetaTile_Mach drawTexturedModalRect(x + su * i, y + sv * j, u + su * i, v + sv * (8 + j), su, sv); break; } - } case STATUS_OK://ok drawTexturedModalRect(x + su * i, y + sv * j, u + su * i, v + sv * (4 + j), su, sv); break; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index ef9b9ce833..c9a12e49d2 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -7,7 +7,11 @@ import com.github.technus.tectech.elementalMatter.core.cElementalInstanceStackMa import com.github.technus.tectech.elementalMatter.core.stacks.cElementalDefinitionStack; import com.github.technus.tectech.elementalMatter.core.stacks.cElementalInstanceStack; import com.github.technus.tectech.elementalMatter.core.tElementalException; +import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; import com.github.technus.tectech.thing.metaTileEntity.hatch.*; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedTexture; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.network.RotationMessage; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.network.RotationPacketDispatcher; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; @@ -17,7 +21,6 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.BaseTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.*; -import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import gregtech.common.GT_Pollution; @@ -45,7 +48,7 @@ import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texture /** * Created by danie_000 on 27.10.2016. */ -public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEntity_MultiBlockBase { +public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEntity_MultiBlockBase implements IFrontRotation { //region Constants //Placeholers for nothing feel free to use public static final ItemStack[] nothingI = new ItemStack[0]; @@ -153,6 +156,9 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt //just some info - private so hidden private boolean explodedThisTick=false; + //front rotation val + private byte frontRotation = 0; + //endregion protected GT_MetaTileEntity_MultiblockBase_EM(int aID, String aName, String aNameRegional) { @@ -165,19 +171,44 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt parametersLoadDefault_EM(); } - //region SUPER STRUCT CHECKERS + //region SUPER STRUCT + + @Override + public boolean isFrontRotationValid(byte frontRotation, byte frontFacing){ + return true; + } + + public boolean isFacingValid_EM(byte aFacing){ + return true; + } + + @Override + public void rotateAroundFrontPlane(boolean direction) { + if(direction){ + frontRotation++; + if(frontRotation>3) frontRotation=0; + }else { + frontRotation--; + if(frontRotation<0) frontRotation=3; + } + if (isFrontRotationValid(frontRotation, getBaseMetaTileEntity().getFrontFacing())) { + updateRotationOnClients(); + } else { + rotateAroundFrontPlane(direction); + } + } //can be used to check structures of multi-blocks larger than one chunk, but... //ALL THE HATCHES AND THE CONTROLLER SHOULD BE IN ONE CHUNK OR IN LOADED CHUNKS - @Deprecated - public final boolean structureCheck_EM( - String[][] structure,//0-9 casing, +- air no air, a-z ignore - Block[] blockType,//use numbers 0-9 for casing types - byte[] blockMeta,//use numbers 0-9 for casing types - int horizontalOffset, int verticalOffset, int depthOffset) { - return StructureChecker(structure, blockType, blockMeta, - horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), !mMachine); - } + //@Deprecated + //public final boolean structureCheck_EM( + // String[][] structure,//0-9 casing, +- air no air, a-z ignore + // Block[] blockType,//use numbers 0-9 for casing types + // byte[] blockMeta,//use numbers 0-9 for casing types + // int horizontalOffset, int verticalOffset, int depthOffset) { + // return StructureChecker(structure, blockType, blockMeta, + // horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), !mMachine); + //} public final boolean structureCheck_EM( String[][] structure,//0-9 casing, +- air no air, a-z ignore @@ -188,8 +219,8 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt Block[] blockTypeFallback,//use numbers 0-9 for casing types byte[] blockMetaFallback,//use numbers 0-9 for casing types int horizontalOffset, int verticalOffset, int depthOffset) { - return StructureCheckerAdvanced(structure, blockType, blockMeta, adderMethod, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, - horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), !mMachine); + return StructureCheckerExtreme(structure, blockType, blockMeta, adderMethod, addingMethods, casingTextures, blockTypeFallback, blockMetaFallback, + horizontalOffset, verticalOffset, depthOffset, getBaseMetaTileEntity(), this, !mMachine); } //endregion @@ -312,7 +343,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt //endregion - //region GUI/SOUND + //region GUI/SOUND/RENDER /** * Server side container @@ -364,7 +395,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt @Override public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, boolean aActive, boolean aRedstone) { if (aSide == aFacing) { - return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new GT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; + return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4], new TT_RenderedTexture(aActive ? ScreenON : ScreenOFF)}; } return new ITexture[]{Textures.BlockIcons.casingTexturePages[texturePage][4]}; } @@ -660,6 +691,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt aNBT.setByte("eCertainM", eCertainMode); aNBT.setByte("eCertainS", eCertainStatus); aNBT.setByte("eMinRepair", minRepairStatus); + aNBT.setByte("eRotation",frontRotation); aNBT.setBoolean("eParam", eParameters); aNBT.setBoolean("ePass", ePowerPass); aNBT.setBoolean("eVoid", eSafeVoid); @@ -752,6 +784,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt eCertainMode = aNBT.getByte("eCertainM"); eCertainStatus = aNBT.getByte("eCertainS"); minRepairStatus = aNBT.getByte("eMinRepair"); + frontRotation = aNBT.getByte("eRotation"); eParameters = aNBT.getBoolean("eParam"); ePowerPass = aNBT.getBoolean("ePass"); eSafeVoid = aNBT.getBoolean("eVoid"); @@ -954,6 +987,40 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt //region internal + @Override + public final byte getFrontRotation() { + return frontRotation; + } + + @Override + public final void forceSetRotationDoRender(byte rotation) { + frontRotation = rotation; + IGregTechTileEntity base=getBaseMetaTileEntity(); + if(base.isClientSide()) { + base.getWorld().markBlockRangeForRenderUpdate(base.getXCoord(), base.getYCoord(), base.getZCoord(), base.getXCoord(), base.getYCoord(), base.getZCoord()); + } + } + + protected final void updateRotationOnClients(){ + if(getBaseMetaTileEntity().isServerSide()){ + IGregTechTileEntity base=getBaseMetaTileEntity(); + RotationPacketDispatcher.INSTANCE.sendToAllAround(new RotationMessage.RotationData(this), + base.getWorld().provider.dimensionId, + base.getXCoord(), + base.getYCoord(), + base.getZCoord(), + 256); + } + } + + @Override + public final boolean isFacingValid(byte aFacing) { + if (!isFrontRotationValid(frontRotation, aFacing)) { + rotateAroundFrontPlane(false); + } + return isFacingValid_EM(aFacing); + } + /** * internal check machine * @param iGregTechTileEntity @@ -1025,6 +1092,18 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt //endregion //region TICKING functions + + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity){} + + @Override + public final void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + isFacingValid(aBaseMetaTileEntity.getFrontFacing()); + if(getBaseMetaTileEntity().isClientSide()){ + RotationPacketDispatcher.INSTANCE.sendToServer(new RotationMessage.RotationQuery(this)); + } + onFirstTick_EM(aBaseMetaTileEntity); + } + /** * called every tick the machines is active * @param aStack diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationMessage.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationMessage.java new file mode 100644 index 0000000000..21c64dfc6d --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationMessage.java @@ -0,0 +1,140 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base.network; + +import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class RotationMessage implements IMessage { + protected int mPosX; + protected int mPosY; + protected int mPosZ; + protected int mPosD; + protected int mRotF; + + public RotationMessage() { + } + + private RotationMessage(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + IGregTechTileEntity base=metaTile.getBaseMetaTileEntity(); + mPosX=base.getXCoord(); + mPosY=base.getYCoord(); + mPosZ=base.getZCoord(); + mPosD=base.getWorld().provider.dimensionId; + mRotF=metaTile.getFrontRotation(); + } + + private RotationMessage(World world, int x,int y,int z, IFrontRotation front) { + mPosX=x; + mPosY=y; + mPosZ=z; + mPosD=world.provider.dimensionId; + mRotF=front.getFrontRotation(); + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); + mPosX = tTag.getInteger("posx"); + mPosY = tTag.getInteger("posy"); + mPosZ = tTag.getInteger("posz"); + mPosD = tTag.getInteger("posd"); + mRotF = tTag.getInteger("rotf"); + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tFXTag = new NBTTagCompound(); + tFXTag.setInteger("posx", mPosX); + tFXTag.setInteger("posy", mPosY); + tFXTag.setInteger("posz", mPosZ); + tFXTag.setInteger("posd", mPosD); + tFXTag.setInteger("rotf", mRotF); + + ByteBufUtils.writeTag(pBuffer, tFXTag); + } + + public static class RotationQuery extends RotationMessage{ + public RotationQuery() { + } + + public RotationQuery(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + super(metaTile); + } + + public RotationQuery(World world, int x,int y,int z, IFrontRotation front) { + super(world,x,y,z,front); + } + } + + public static class RotationData extends RotationMessage{ + public RotationData() { + } + + private RotationData(RotationQuery query){ + mPosX=query.mPosX; + mPosY=query.mPosY; + mPosZ=query.mPosZ; + mPosD=query.mPosD; + mRotF=query.mRotF; + } + + public RotationData(GT_MetaTileEntity_MultiblockBase_EM metaTile) { + super(metaTile); + } + + public RotationData(World world, int x,int y,int z, IFrontRotation front) { + super(world,x,y,z,front); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler<RotationData> { + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, RotationData pMessage, MessageContext pCtx) { + if(pPlayer.worldObj.provider.dimensionId==pMessage.mPosD){ + TileEntity te=pPlayer.worldObj.getTileEntity(pMessage.mPosX,pMessage.mPosY,pMessage.mPosZ); + if(te instanceof IGregTechTileEntity){ + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if(meta instanceof IFrontRotation){ + ((IFrontRotation) meta).forceSetRotationDoRender((byte)pMessage.mRotF); + } + }else if (te instanceof IFrontRotation){ + ((IFrontRotation) te).forceSetRotationDoRender((byte)pMessage.mRotF); + } + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler<RotationQuery> { + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, RotationQuery pMessage, MessageContext pCtx) { + World world= DimensionManager.getWorld(pMessage.mPosD); + if(world!=null) { + TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IFrontRotation) { + pMessage.mRotF=((IFrontRotation) meta).getFrontRotation(); + return new RotationData(pMessage); + } + } else if (te instanceof IFrontRotation) { + pMessage.mRotF=((IFrontRotation) te).getFrontRotation(); + return new RotationData(pMessage); + } + } + return null; + } + } +}
\ No newline at end of file diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationPacketDispatcher.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationPacketDispatcher.java new file mode 100644 index 0000000000..a9895b30f5 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationPacketDispatcher.java @@ -0,0 +1,21 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base.network; + +import eu.usrv.yamcore.network.PacketDispatcher; + +import static com.github.technus.tectech.auxiliary.Reference.MODID; + +public class RotationPacketDispatcher extends PacketDispatcher { + public static RotationPacketDispatcher INSTANCE; + + public RotationPacketDispatcher() { + super(MODID); + INSTANCE = this; + registerPackets(); + } + + @Override + public void registerPackets() { + registerMessage(RotationMessage.ServerHandler.class, RotationMessage.RotationQuery.class); + registerMessage(RotationMessage.ClientHandler.class, RotationMessage.RotationData.class); + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java new file mode 100644 index 0000000000..142214f43c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java @@ -0,0 +1,768 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base.render; + +import com.github.technus.tectech.thing.metaTileEntity.IFrontRotation; +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +public class TT_RenderedTexture implements ITexture,IColorModulationContainer { + private final IIconContainer mIconContainer; + private final boolean mAllowAlpha; + /** + * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!! + * <p/> + * Just set this variable to another different Array instead. + * Otherwise some colored things will get Problems. + */ + public short[] mRGBa; + + public TT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { + if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ TT_RenderedTexture"); + mIconContainer = aIcon; + mAllowAlpha = aAllowAlpha; + mRGBa = aRGBa; + } + + public TT_RenderedTexture(IIconContainer aIcon, short[] aRGBa) { + this(aIcon, aRGBa, true); + } + + public TT_RenderedTexture(IIconContainer aIcon) { + this(aIcon, Dyes._NULL.mRGBa); + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.6F), (int) (mRGBa[1] * 0.6F), (int) (mRGBa[2] * 0.6F), mAllowAlpha ? 255 - mRGBa[3] : 255); + byte rotation = getRotation(aX, aY, aZ); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(153, 153, 153, 255); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.6F), (int) (mRGBa[1] * 0.6F), (int) (mRGBa[2] * 0.6F), mAllowAlpha ? 255 - mRGBa[3] : 255); + byte rotation = getRotation(aX, aY, aZ); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(153, 153, 153, 255); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 1.0F), (int) (mRGBa[1] * 1.0F), (int) (mRGBa[2] * 1.0F), mAllowAlpha ? 255 - mRGBa[3] : 255); + byte rotation = getRotation(aX, aY, aZ); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(255, 255, 255, 255); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.5F), (int) (mRGBa[1] * 0.5F), (int) (mRGBa[2] * 0.5F), mAllowAlpha ? 255 - mRGBa[3] : 255); + byte rotation = getRotation(aX, aY, aZ); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(255, 255, 255, 255); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.8F), (int) (mRGBa[1] * 0.8F), (int) (mRGBa[2] * 0.8F), mAllowAlpha ? 255 - mRGBa[3] : 255); + byte rotation = getRotation(aX, aY, aZ); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(204, 204, 204, 255); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + Tessellator.instance.setColorRGBA((int) (mRGBa[0] * 0.8F), (int) (mRGBa[1] * 0.8F), (int) (mRGBa[2] * 0.8F), mAllowAlpha ? 255 - mRGBa[3] : 255); + byte rotation = getRotation(aX, aY, aZ); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(204, 204, 204, 255); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + } + + + /** + * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture + */ + public void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + double d4 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d5 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + double d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = (double) icon.getMaxU(); + d4 = (double) icon.getMinU(); + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d5 = (double) icon.getMinV(); + d6 = (double) icon.getMaxV(); + } + + double d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation) { + case 3: + d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d4 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 1: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMinY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + } else { + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + } + } + + /** + * Renders the given texture to the top face of the block. Args: block, x, y, z, texture + */ + public void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + double d5 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + double d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = (double) icon.getMinU(); + d4 = (double) icon.getMaxU(); + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d5 = (double) icon.getMinV(); + d6 = (double) icon.getMaxV(); + } + + double d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation) { + case 1: + d3 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 3: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMaxY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + } else { + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.addVertexWithUV(d12, d13, d14, d7, d9); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + } + } + + /** + * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + + if (aRenderer.field_152631_f) { + d4 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D); + d3 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D); + } + + double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = (double) icon.getMinU(); + d4 = (double) icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = (double) icon.getMinV(); + d6 = (double) icon.getMaxV(); + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation) { + case 3: + d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d4 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 1: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMinY; + double d14 = y + aRenderer.renderMaxY; + double d15 = z + aRenderer.renderMinZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d14, d15, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d12, d14, d15, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d12, d13, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d13, d15, d4, d6); + } else { + tessellator.addVertexWithUV(d11, d14, d15, d7, d9); + tessellator.addVertexWithUV(d12, d14, d15, d3, d5); + tessellator.addVertexWithUV(d12, d13, d15, d8, d10); + tessellator.addVertexWithUV(d11, d13, d15, d4, d6); + } + } + + /** + * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinX * 16.0D); + double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxX * 16.0D); + double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { + d3 = (double) icon.getMinU(); + d4 = (double) icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = (double) icon.getMinV(); + d6 = (double) icon.getMaxV(); + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation) { + case 1: + d3 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxX * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 3: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxX * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinX * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxX * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = x + aRenderer.renderMaxX; + double d13 = y + aRenderer.renderMinY; + double d14 = y + aRenderer.renderMaxY; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d11 = x + aRenderer.renderMaxX; + d12 = x + aRenderer.renderMinX; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d14, d15, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d12, d14, d15, d7, d9); + } else { + tessellator.addVertexWithUV(d11, d14, d15, d3, d5); + tessellator.addVertexWithUV(d11, d13, d15, d8, d10); + tessellator.addVertexWithUV(d12, d13, d15, d4, d6); + tessellator.addVertexWithUV(d12, d14, d15, d7, d9); + } + } + + /** + * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d3 = (double) icon.getMinU(); + d4 = (double) icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = (double) icon.getMinV(); + d6 = (double) icon.getMaxV(); + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation) { + case 1: + d3 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 3: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMinX; + double d12 = y + aRenderer.renderMinY; + double d13 = y + aRenderer.renderMaxY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d14 = z + aRenderer.renderMaxZ; + d15 = z + aRenderer.renderMinZ; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d13, d15, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d11, d12, d14, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d12, d15, d4, d6); + } else { + tessellator.addVertexWithUV(d11, d13, d15, d7, d9); + tessellator.addVertexWithUV(d11, d13, d14, d3, d5); + tessellator.addVertexWithUV(d11, d12, d14, d8, d10); + tessellator.addVertexWithUV(d11, d12, d15, d4, d6); + } + } + + /** + * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture + */ + public void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, byte rotation) { + Tessellator tessellator = Tessellator.instance; + + if (aRenderer.hasOverrideBlockTexture()) { + icon = aRenderer.overrideBlockTexture; + } + + double d3 = (double) icon.getInterpolatedU(aRenderer.renderMinZ * 16.0D); + double d4 = (double) icon.getInterpolatedU(aRenderer.renderMaxZ * 16.0D); + + if (aRenderer.field_152631_f) { + d4 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMinZ) * 16.0D); + d3 = (double) icon.getInterpolatedU((1.0D - aRenderer.renderMaxZ) * 16.0D); + } + + double d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxY * 16.0D); + double d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinY * 16.0D); + double d7; + + if (aRenderer.flipTexture) { + d7 = d3; + d3 = d4; + d4 = d7; + } + + if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { + d3 = (double) icon.getMinU(); + d4 = (double) icon.getMaxU(); + } + + if (aRenderer.renderMinY < 0.0D || aRenderer.renderMaxY > 1.0D) { + d5 = (double) icon.getMinV(); + d6 = (double) icon.getMaxV(); + } + + d7 = d4; + double d8 = d3; + double d9 = d5; + double d10 = d6; + + switch (rotation) { + case 3: + d3 = (double) icon.getInterpolatedU(aRenderer.renderMaxY * 16.0D); + d5 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMinZ * 16.0D); + d4 = (double) icon.getInterpolatedU(aRenderer.renderMinY * 16.0D); + d6 = (double) icon.getInterpolatedV(16.0D - aRenderer.renderMaxZ * 16.0D); + d9 = d5; + d10 = d6; + d7 = d3; + d8 = d4; + d5 = d6; + d6 = d9; + break; + case 1: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinY * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); + d7 = d4; + d8 = d3; + d3 = d4; + d4 = d8; + d9 = d6; + d10 = d5; + break; + case 2: + d3 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMinZ * 16.0D); + d4 = (double) icon.getInterpolatedU(16.0D - aRenderer.renderMaxZ * 16.0D); + d5 = (double) icon.getInterpolatedV(aRenderer.renderMaxY * 16.0D); + d6 = (double) icon.getInterpolatedV(aRenderer.renderMinY * 16.0D); + d7 = d4; + d8 = d3; + d9 = d5; + d10 = d6; + break; + } + + double d11 = x + aRenderer.renderMaxX; + double d12 = y + aRenderer.renderMinY; + double d13 = y + aRenderer.renderMaxY; + double d14 = z + aRenderer.renderMinZ; + double d15 = z + aRenderer.renderMaxZ; + + if (aRenderer.renderFromInside) { + d14 = z + aRenderer.renderMaxZ; + d15 = z + aRenderer.renderMinZ; + } + + if (aRenderer.enableAO) { + tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); + tessellator.setBrightness(aRenderer.brightnessTopLeft); + tessellator.addVertexWithUV(d11, d12, d15, d8, d10); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); + tessellator.setBrightness(aRenderer.brightnessBottomLeft); + tessellator.addVertexWithUV(d11, d12, d14, d4, d6); + tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); + tessellator.setBrightness(aRenderer.brightnessBottomRight); + tessellator.addVertexWithUV(d11, d13, d14, d7, d9); + tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); + tessellator.setBrightness(aRenderer.brightnessTopRight); + tessellator.addVertexWithUV(d11, d13, d15, d3, d5); + } else { + tessellator.addVertexWithUV(d11, d12, d15, d8, d10); + tessellator.addVertexWithUV(d11, d12, d14, d4, d6); + tessellator.addVertexWithUV(d11, d13, d14, d7, d9); + tessellator.addVertexWithUV(d11, d13, d15, d3, d5); + } + } + + @Override + public short[] getRGBA() { + return mRGBa; + } + + @Override + public boolean isValidTexture() { + return mIconContainer != null; + } + + private static byte getRotation(int x, int y, int z) { + World w = Minecraft.getMinecraft().theWorld; + if (w != null) { + TileEntity te = w.getTileEntity(x, y, z); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IFrontRotation) { + return ((IFrontRotation) meta).getFrontRotation(); + } + } + } + return 0; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java index 032d4e48a8..7bc6bfcc77 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java @@ -87,7 +87,7 @@ public class GT_MetaTileEntity_EM_machine extends GT_MetaTileEntity_MultiblockBa } @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { if(aBaseMetaTileEntity.isServerSide()) { quantumStuff(aBaseMetaTileEntity.isActive()); } |