Engineering table now can rotate it's crafting matrix
This commit is contained in:
parent
24079ee908
commit
8219fdfb11
9 changed files with 65 additions and 22 deletions
|
@ -14,6 +14,7 @@ import net.minecraft.world.World;
|
||||||
import resonantinduction.core.prefab.block.BlockRIRotatable;
|
import resonantinduction.core.prefab.block.BlockRIRotatable;
|
||||||
import universalelectricity.api.vector.Vector2;
|
import universalelectricity.api.vector.Vector2;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
|
import calclavia.lib.utility.WorldUtility;
|
||||||
import calclavia.lib.utility.inventory.InventoryUtility;
|
import calclavia.lib.utility.inventory.InventoryUtility;
|
||||||
import codechicken.multipart.ControlKeyModifer;
|
import codechicken.multipart.ControlKeyModifer;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
@ -58,10 +59,10 @@ public class BlockEngineeringTable extends BlockRIRotatable
|
||||||
{
|
{
|
||||||
IInventory inventory = (IInventory) tileEntity;
|
IInventory inventory = (IInventory) tileEntity;
|
||||||
|
|
||||||
// PREVENTS OUTPUT FROM DROPPING!
|
// Don't drop the output, so subtract by one.
|
||||||
for (int var6 = 0; var6 < inventory.getSizeInventory() - 1; ++var6)
|
for (int i = 0; i < inventory.getSizeInventory() - 1; ++i)
|
||||||
{
|
{
|
||||||
ItemStack var7 = inventory.getStackInSlot(var6);
|
ItemStack var7 = inventory.getStackInSlot(i);
|
||||||
|
|
||||||
if (var7 != null)
|
if (var7 != null)
|
||||||
{
|
{
|
||||||
|
@ -92,6 +93,11 @@ public class BlockEngineeringTable extends BlockRIRotatable
|
||||||
var12.motionY = ((float) random.nextGaussian() * var13 + 0.2F);
|
var12.motionY = ((float) random.nextGaussian() * var13 + 0.2F);
|
||||||
var12.motionZ = ((float) random.nextGaussian() * var13);
|
var12.motionZ = ((float) random.nextGaussian() * var13);
|
||||||
world.spawnEntityInWorld(var12);
|
world.spawnEntityInWorld(var12);
|
||||||
|
|
||||||
|
if (var7.stackSize <= 0)
|
||||||
|
{
|
||||||
|
inventory.setInventorySlotContents(i, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,9 +120,14 @@ public class BlockEngineeringTable extends BlockRIRotatable
|
||||||
{
|
{
|
||||||
if (!world.isRemote)
|
if (!world.isRemote)
|
||||||
{
|
{
|
||||||
Vector2 hitVector = new Vector2(hitX, hitZ);
|
Vector3 hitVector = new Vector3(hitX, 0, hitZ);
|
||||||
final double regionLength = 1d / 3d;
|
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
|
* Crafting Matrix
|
||||||
*/
|
*/
|
||||||
|
@ -127,7 +138,7 @@ public class BlockEngineeringTable extends BlockRIRotatable
|
||||||
{
|
{
|
||||||
Vector2 check = new Vector2(j, k).scale(regionLength);
|
Vector2 check = new Vector2(j, k).scale(regionLength);
|
||||||
|
|
||||||
if (check.distance(hitVector) < regionLength)
|
if (check.distance(hitVector.toVector2()) < regionLength)
|
||||||
{
|
{
|
||||||
int slotID = j * 3 + k;
|
int slotID = j * 3 + k;
|
||||||
interactCurrentItem(tile, slotID, player);
|
interactCurrentItem(tile, slotID, player);
|
||||||
|
@ -143,6 +154,9 @@ public class BlockEngineeringTable extends BlockRIRotatable
|
||||||
}
|
}
|
||||||
else if (hitSide != 0)
|
else if (hitSide != 0)
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Take out of engineering table.
|
||||||
|
*/
|
||||||
if (!world.isRemote && player.inventory.getCurrentItem() == null)
|
if (!world.isRemote && player.inventory.getCurrentItem() == null)
|
||||||
{
|
{
|
||||||
tile.setPlayerInventory(player.inventory);
|
tile.setPlayerInventory(player.inventory);
|
||||||
|
|
|
@ -22,7 +22,7 @@ public class RenderEngineeringTable extends RenderItemOverlayTile
|
||||||
{
|
{
|
||||||
TileEngineeringTable tile = (TileEngineeringTable) tileEntity;
|
TileEngineeringTable tile = (TileEngineeringTable) tileEntity;
|
||||||
renderItemOnSides(tileEntity, tile.getStackInSlot(9), x, y, z);
|
renderItemOnSides(tileEntity, tile.getStackInSlot(9), x, y, z);
|
||||||
renderTopOverlay(tileEntity, tile.craftingMatrix, x, y, z);
|
renderTopOverlay(tileEntity, tile.craftingMatrix, tile.getDirection(), x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.network.IPacketReceiver;
|
import calclavia.lib.network.IPacketReceiver;
|
||||||
import calclavia.lib.network.PacketHandler;
|
import calclavia.lib.network.PacketHandler;
|
||||||
import calclavia.lib.prefab.slot.ISlotPickResult;
|
import calclavia.lib.prefab.slot.ISlotPickResult;
|
||||||
|
import calclavia.lib.prefab.tile.IRotatable;
|
||||||
import calclavia.lib.prefab.tile.TileAdvanced;
|
import calclavia.lib.prefab.tile.TileAdvanced;
|
||||||
import calclavia.lib.utility.inventory.AutoCraftingManager;
|
import calclavia.lib.utility.inventory.AutoCraftingManager;
|
||||||
import calclavia.lib.utility.inventory.AutoCraftingManager.IAutoCrafter;
|
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.builtbroken.common.Pair;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
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_MATRIX_END = 9;
|
||||||
public static final int CRAFTING_OUTPUT_END = CRAFTING_MATRIX_END + 1;
|
public static final int CRAFTING_OUTPUT_END = CRAFTING_MATRIX_END + 1;
|
||||||
|
@ -530,4 +531,16 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive
|
||||||
return slots;
|
return slots;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ForgeDirection getDirection()
|
||||||
|
{
|
||||||
|
return ForgeDirection.getOrientation(getBlockMetadata());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDirection(ForgeDirection direction)
|
||||||
|
{
|
||||||
|
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package resonantinduction.archaic.firebox;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.RenderBlocks;
|
import net.minecraft.client.renderer.RenderBlocks;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import resonantinduction.core.render.RenderItemOverlayTile;
|
import resonantinduction.core.render.RenderItemOverlayTile;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
@ -17,7 +18,7 @@ public class RenderHotPlate extends RenderItemOverlayTile
|
||||||
if (tileEntity instanceof TileHotPlate)
|
if (tileEntity instanceof TileHotPlate)
|
||||||
{
|
{
|
||||||
TileHotPlate tile = (TileHotPlate) tileEntity;
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package resonantinduction.archaic.imprint;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.RenderBlocks;
|
import net.minecraft.client.renderer.RenderBlocks;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import resonantinduction.core.render.RenderItemOverlayTile;
|
import resonantinduction.core.render.RenderItemOverlayTile;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
@ -17,7 +18,7 @@ public class RenderImprinter extends RenderItemOverlayTile
|
||||||
if (tileEntity instanceof TileImprinter)
|
if (tileEntity instanceof TileImprinter)
|
||||||
{
|
{
|
||||||
TileImprinter tile = (TileImprinter) tileEntity;
|
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);
|
renderItemOnSides(tileEntity, tile.getStackInSlot(9), x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package resonantinduction.core.prefab.block;
|
package resonantinduction.core.prefab.block;
|
||||||
|
|
||||||
|
import codechicken.multipart.ControlKeyModifer;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraftforge.common.Configuration;
|
import net.minecraftforge.common.Configuration;
|
||||||
import resonantinduction.core.Reference;
|
import resonantinduction.core.Reference;
|
||||||
import resonantinduction.core.ResonantInductionTabs;
|
import resonantinduction.core.ResonantInductionTabs;
|
||||||
|
@ -26,4 +28,10 @@ public class BlockRIRotatable extends BlockRotatable
|
||||||
this.setTextureName(Reference.PREFIX + name);
|
this.setTextureName(Reference.PREFIX + name);
|
||||||
this.setHardness(1f);
|
this.setHardness(1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isControlDown(EntityPlayer player)
|
||||||
|
{
|
||||||
|
return ControlKeyModifer.isControlDown(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import resonantinduction.archaic.imprint.ItemBlockImprint;
|
import resonantinduction.archaic.imprint.ItemBlockImprint;
|
||||||
import resonantinduction.core.prefab.tile.TileEntityFilterable;
|
import resonantinduction.core.prefab.tile.TileEntityFilterable;
|
||||||
|
import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.render.RenderUtility;
|
import calclavia.lib.render.RenderUtility;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
@ -47,11 +48,11 @@ public abstract class RenderImprintable extends TileEntitySpecialRenderer
|
||||||
{
|
{
|
||||||
if (((TileEntityFilterable) tileEntity).isInverted())
|
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
|
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++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.render.RenderUtility;
|
import calclavia.lib.render.RenderUtility;
|
||||||
|
import calclavia.lib.utility.WorldUtility;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
|
@ -29,19 +30,15 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
|
||||||
{
|
{
|
||||||
private final RenderBlocks renderBlocks = new RenderBlocks();
|
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.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
|
* Render the Crafting Matrix
|
||||||
*/
|
*/
|
||||||
|
@ -51,15 +48,17 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
|
||||||
|
|
||||||
if (objectPosition != null)
|
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++)
|
for (int i = 0; i < (matrixX * matrixZ); i++)
|
||||||
{
|
{
|
||||||
if (inventory[i] != null)
|
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.glPushMatrix();
|
||||||
|
GL11.glTranslated(x + 0.5f, y + 0.5f, z + 0.5f);
|
||||||
|
RenderUtility.rotateBlockBasedOnDirection(dir);
|
||||||
GL11.glTranslated(translation.x, translation.y, translation.z);
|
GL11.glTranslated(translation.x, translation.y, translation.z);
|
||||||
GL11.glScalef(0.7f, 0.7f, 0.7f);
|
GL11.glScalef(0.7f, 0.7f, 0.7f);
|
||||||
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240);
|
||||||
|
@ -67,7 +66,13 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
|
||||||
GL11.glPopMatrix();
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
if (isLooking)
|
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();
|
GL11.glPopMatrix();
|
||||||
|
|
|
@ -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)
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue