aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/github/technus/tectech/TecTech.java4
-rw-r--r--src/main/java/com/github/technus/tectech/Util.java393
-rw-r--r--src/main/java/com/github/technus/tectech/compatibility/thaumcraft/definitions/dComplexAspectDefinition.java10
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/stacks/cElementalInstanceStack.java124
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/templates/cElementalPrimitive.java10
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/core/templates/iElementalDefinition.java4
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/atom/dAtomDefinition.java22
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/complex/hadron/dHadronDefinition.java10
-rw-r--r--src/main/java/com/github/technus/tectech/elementalMatter/definitions/primitive/eBosonDefinition.java2
-rw-r--r--src/main/java/com/github/technus/tectech/loader/ThingsLoader.java1
-rw-r--r--src/main/java/com/github/technus/tectech/network/Dispatcher.java18
-rw-r--r--src/main/java/com/github/technus/tectech/thing/item/FrontRotationTriggerItem.java66
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/IFrontRotation.java11
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_annihilation.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_collider.java6
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java6
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_crafting.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_decay.java52
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java16
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_scanner.java2
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_wormhole.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java6
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_GUIContainer_MultiMachineEM.java3
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java111
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationMessage.java140
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/network/RotationPacketDispatcher.java21
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedTexture.java768
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/em_machine/GT_MetaTileEntity_EM_machine.java2
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());
}