diff --git a/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java b/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java index 5c8876dd..e1a88dc2 100644 --- a/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java +++ b/src/main/java/resonantinduction/archaic/engineering/BlockEngineeringTable.java @@ -14,6 +14,7 @@ import net.minecraft.world.World; import resonantinduction.core.prefab.block.BlockRIRotatable; import universalelectricity.api.vector.Vector2; import universalelectricity.api.vector.Vector3; +import calclavia.lib.utility.WorldUtility; import calclavia.lib.utility.inventory.InventoryUtility; import codechicken.multipart.ControlKeyModifer; import cpw.mods.fml.relauncher.Side; @@ -58,10 +59,10 @@ public class BlockEngineeringTable extends BlockRIRotatable { IInventory inventory = (IInventory) tileEntity; - // PREVENTS OUTPUT FROM DROPPING! - for (int var6 = 0; var6 < inventory.getSizeInventory() - 1; ++var6) + // Don't drop the output, so subtract by one. + for (int i = 0; i < inventory.getSizeInventory() - 1; ++i) { - ItemStack var7 = inventory.getStackInSlot(var6); + ItemStack var7 = inventory.getStackInSlot(i); if (var7 != null) { @@ -92,6 +93,11 @@ public class BlockEngineeringTable extends BlockRIRotatable var12.motionY = ((float) random.nextGaussian() * var13 + 0.2F); var12.motionZ = ((float) random.nextGaussian() * var13); world.spawnEntityInWorld(var12); + + if (var7.stackSize <= 0) + { + inventory.setInventorySlotContents(i, null); + } } } } @@ -114,9 +120,14 @@ public class BlockEngineeringTable extends BlockRIRotatable { if (!world.isRemote) { - Vector2 hitVector = new Vector2(hitX, hitZ); + Vector3 hitVector = new Vector3(hitX, 0, hitZ); final double regionLength = 1d / 3d; + // Rotate the hit vector baed on direction of the tile. + hitVector.translate(new Vector3(-0.5, 0, -0.5)); + hitVector.rotate(WorldUtility.getAngleFromForgeDirection(tile.getDirection()), Vector3.UP()); + hitVector.translate(new Vector3(0.5, 0, 0.5)); + /** * Crafting Matrix */ @@ -127,7 +138,7 @@ public class BlockEngineeringTable extends BlockRIRotatable { Vector2 check = new Vector2(j, k).scale(regionLength); - if (check.distance(hitVector) < regionLength) + if (check.distance(hitVector.toVector2()) < regionLength) { int slotID = j * 3 + k; interactCurrentItem(tile, slotID, player); @@ -143,6 +154,9 @@ public class BlockEngineeringTable extends BlockRIRotatable } else if (hitSide != 0) { + /** + * Take out of engineering table. + */ if (!world.isRemote && player.inventory.getCurrentItem() == null) { tile.setPlayerInventory(player.inventory); diff --git a/src/main/java/resonantinduction/archaic/engineering/RenderEngineeringTable.java b/src/main/java/resonantinduction/archaic/engineering/RenderEngineeringTable.java index 762ff9d0..b93aa9bf 100644 --- a/src/main/java/resonantinduction/archaic/engineering/RenderEngineeringTable.java +++ b/src/main/java/resonantinduction/archaic/engineering/RenderEngineeringTable.java @@ -22,7 +22,7 @@ public class RenderEngineeringTable extends RenderItemOverlayTile { TileEngineeringTable tile = (TileEngineeringTable) tileEntity; renderItemOnSides(tileEntity, tile.getStackInSlot(9), x, y, z); - renderTopOverlay(tileEntity, tile.craftingMatrix, x, y, z); + renderTopOverlay(tileEntity, tile.craftingMatrix, tile.getDirection(), x, y, z); } } } diff --git a/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java b/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java index 970708ca..8d9e35d3 100644 --- a/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java +++ b/src/main/java/resonantinduction/archaic/engineering/TileEngineeringTable.java @@ -29,6 +29,7 @@ import universalelectricity.api.vector.Vector3; import calclavia.lib.network.IPacketReceiver; import calclavia.lib.network.PacketHandler; import calclavia.lib.prefab.slot.ISlotPickResult; +import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.TileAdvanced; import calclavia.lib.utility.inventory.AutoCraftingManager; import calclavia.lib.utility.inventory.AutoCraftingManager.IAutoCrafter; @@ -36,7 +37,7 @@ import calclavia.lib.utility.inventory.AutoCraftingManager.IAutoCrafter; import com.builtbroken.common.Pair; import com.google.common.io.ByteArrayDataInput; -public class TileEngineeringTable extends TileAdvanced implements IPacketReceiver, ISidedInventory, IArmbotUseable, ISlotPickResult, IAutoCrafter +public class TileEngineeringTable extends TileAdvanced implements IPacketReceiver, IRotatable, ISidedInventory, IArmbotUseable, ISlotPickResult, IAutoCrafter { public static final int CRAFTING_MATRIX_END = 9; public static final int CRAFTING_OUTPUT_END = CRAFTING_MATRIX_END + 1; @@ -530,4 +531,16 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive return slots; } + @Override + public ForgeDirection getDirection() + { + return ForgeDirection.getOrientation(getBlockMetadata()); + } + + @Override + public void setDirection(ForgeDirection direction) + { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3); + } + } diff --git a/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java b/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java index d2de3a51..c752a977 100644 --- a/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java +++ b/src/main/java/resonantinduction/archaic/firebox/RenderHotPlate.java @@ -2,6 +2,7 @@ package resonantinduction.archaic.firebox; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; import resonantinduction.core.render.RenderItemOverlayTile; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -17,7 +18,7 @@ public class RenderHotPlate extends RenderItemOverlayTile if (tileEntity instanceof TileHotPlate) { TileHotPlate tile = (TileHotPlate) tileEntity; - renderTopOverlay(tileEntity, tile.getInventory().getContainedItems(), 2, 2, x, y - 0.8, z); + renderTopOverlay(tileEntity, tile.getInventory().getContainedItems(), ForgeDirection.EAST, 2, 2, x, y - 0.8, z); } } } diff --git a/src/main/java/resonantinduction/archaic/imprint/RenderImprinter.java b/src/main/java/resonantinduction/archaic/imprint/RenderImprinter.java index 2005a8ab..dd083227 100644 --- a/src/main/java/resonantinduction/archaic/imprint/RenderImprinter.java +++ b/src/main/java/resonantinduction/archaic/imprint/RenderImprinter.java @@ -2,6 +2,7 @@ package resonantinduction.archaic.imprint; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; import resonantinduction.core.render.RenderItemOverlayTile; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -17,7 +18,7 @@ public class RenderImprinter extends RenderItemOverlayTile if (tileEntity instanceof TileImprinter) { TileImprinter tile = (TileImprinter) tileEntity; - renderTopOverlay(tileEntity, tile.inventory, x, y, z); + renderTopOverlay(tileEntity, tile.inventory, ForgeDirection.EAST, x, y, z); renderItemOnSides(tileEntity, tile.getStackInSlot(9), x, y, z); } } diff --git a/src/main/java/resonantinduction/core/prefab/block/BlockRIRotatable.java b/src/main/java/resonantinduction/core/prefab/block/BlockRIRotatable.java index 5731eff2..6f08a295 100644 --- a/src/main/java/resonantinduction/core/prefab/block/BlockRIRotatable.java +++ b/src/main/java/resonantinduction/core/prefab/block/BlockRIRotatable.java @@ -1,5 +1,7 @@ package resonantinduction.core.prefab.block; +import codechicken.multipart.ControlKeyModifer; +import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.Configuration; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInductionTabs; @@ -26,4 +28,10 @@ public class BlockRIRotatable extends BlockRotatable this.setTextureName(Reference.PREFIX + name); this.setHardness(1f); } + + @Override + public boolean isControlDown(EntityPlayer player) + { + return ControlKeyModifer.isControlDown(player); + } } diff --git a/src/main/java/resonantinduction/core/render/RenderImprintable.java b/src/main/java/resonantinduction/core/render/RenderImprintable.java index 06da7ada..5e571746 100644 --- a/src/main/java/resonantinduction/core/render/RenderImprintable.java +++ b/src/main/java/resonantinduction/core/render/RenderImprintable.java @@ -10,6 +10,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.core.prefab.tile.TileEntityFilterable; +import universalelectricity.api.vector.Vector3; import calclavia.lib.render.RenderUtility; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -47,11 +48,11 @@ public abstract class RenderImprintable extends TileEntitySpecialRenderer { if (((TileEntityFilterable) tileEntity).isInverted()) { - RenderUtility.renderFloatingText(filterStack.getTooltip(player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips).get(0).toString(), (float) x + 0.5f, ((float) y + (i * 0.25f)) - 1f, (float) z + 0.5f, 0xFF8888); + RenderUtility.renderFloatingText(filterStack.getTooltip(player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips).get(0).toString(), new Vector3(x, y, z).translate(0.5, i * 0.25f - 1f, z + 0.5f), 0xFF8888); } else { - RenderUtility.renderFloatingText(filterStack.getTooltip(player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips).get(0).toString(), (float) x + 0.5f, ((float) y + (i * 0.25f)) - 1f, (float) z + 0.5f, 0x88FF88); + RenderUtility.renderFloatingText(filterStack.getTooltip(player, Minecraft.getMinecraft().gameSettings.advancedItemTooltips).get(0).toString(), new Vector3(x, y, z).translate(0.5, i * 0.25f - 1f, z + 0.5f), 0x88FF88); } i++; } diff --git a/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java b/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java index d4d64ee7..497d6edb 100644 --- a/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java +++ b/src/main/java/resonantinduction/core/render/RenderItemOverlayTile.java @@ -21,6 +21,7 @@ import org.lwjgl.opengl.GL11; import universalelectricity.api.vector.Vector3; import calclavia.lib.render.RenderUtility; +import calclavia.lib.utility.WorldUtility; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -29,19 +30,15 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer { private final RenderBlocks renderBlocks = new RenderBlocks(); - public void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, double x, double y, double z) + public void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, ForgeDirection dir, double x, double y, double z) { - renderTopOverlay(tileEntity, inventory, 3, 3, x, y, z); + renderTopOverlay(tileEntity, inventory, dir, 3, 3, x, y, z); } - public void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, int matrixX, int matrixZ, double x, double y, double z) + public void renderTopOverlay(TileEntity tileEntity, ItemStack[] inventory, ForgeDirection dir, int matrixX, int matrixZ, double x, double y, double z) { GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5f, y + 0.5f, z + 0.5f); - RenderUtility.rotateBlockBasedOnDirection(ForgeDirection.getOrientation(tileEntity.getBlockMetadata())); - GL11.glTranslated(-0.5f, -0.5f, -0.5f); - /** * Render the Crafting Matrix */ @@ -51,15 +48,17 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer if (objectPosition != null) { - isLooking |= objectPosition.blockX == tileEntity.xCoord && objectPosition.blockY == tileEntity.yCoord && objectPosition.blockZ == tileEntity.zCoord; + isLooking = objectPosition.blockX == tileEntity.xCoord && objectPosition.blockY == tileEntity.yCoord && objectPosition.blockZ == tileEntity.zCoord; } for (int i = 0; i < (matrixX * matrixZ); i++) { if (inventory[i] != null) { - Vector3 translation = new Vector3((double) (i / matrixX) / ((double) matrixX) + (0.5 / (matrixX)), 1.1, (double) (i % matrixZ) / ((double) matrixZ) + (0.5 / (matrixZ))); + Vector3 translation = new Vector3((double) (i / matrixX) / ((double) matrixX) + (0.5 / (matrixX)), 1.1, (double) (i % matrixZ) / ((double) matrixZ) + (0.5 / (matrixZ))).translate(-0.5); GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5f, y + 0.5f, z + 0.5f); + RenderUtility.rotateBlockBasedOnDirection(dir); GL11.glTranslated(translation.x, translation.y, translation.z); GL11.glScalef(0.7f, 0.7f, 0.7f); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); @@ -67,7 +66,13 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer GL11.glPopMatrix(); if (isLooking) - RenderUtility.renderFloatingText("" + inventory[i].stackSize, (float) translation.x, (float) translation.y - 2f, (float) translation.z); + { + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + int angle = WorldUtility.getAngleFromForgeDirection(WorldUtility.invertX(dir)); + RenderUtility.renderFloatingText("" + inventory[i].stackSize, translation.rotate(angle, Vector3.UP()).translate(0.5).translate(0, 0.3, 0)); + GL11.glPopMatrix(); + } } } GL11.glPopMatrix(); diff --git a/src/main/java/resonantinduction/electrical/armbot/RenderArmbot.java b/src/main/java/resonantinduction/electrical/armbot/RenderArmbot.java index 2a8b1f9c..e9425318 100644 --- a/src/main/java/resonantinduction/electrical/armbot/RenderArmbot.java +++ b/src/main/java/resonantinduction/electrical/armbot/RenderArmbot.java @@ -46,7 +46,7 @@ public class RenderArmbot extends TileEntitySpecialRenderer implements ICustomBl { if (objectPosition.blockX == tileEntity.xCoord && (objectPosition.blockY == tileEntity.yCoord || objectPosition.blockY == tileEntity.yCoord + 1) && objectPosition.blockZ == tileEntity.zCoord) { - RenderUtility.renderFloatingText(cmdText, (float) x + 0.5f, ((float) y) + 0.25f, (float) z + 0.5f, 0xFFFFFF); + RenderUtility.renderFloatingText(cmdText, new Vector3(x, y, z).add(0.5), 0xFFFFFF); } } }