From abec9c81aff5fd4c3cc46061dbcb8515b7694a05 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 29 Nov 2015 13:17:45 +0100 Subject: [PATCH] Reconstructor Lens Rendering --- build.gradle | 2 +- .../blocks/BlockAtomicReconstructor.java | 6 +- .../render/RenderReconstructorLens.java | 75 +++++++++++++++++++ .../actuallyadditions/proxy/ClientProxy.java | 6 +- .../tile/TileEntityAtomicReconstructor.java | 24 +++++- .../tile/TileEntityInventoryBase.java | 14 ++-- .../actuallyadditions/util/ModUtil.java | 4 +- 7 files changed, 117 insertions(+), 14 deletions(-) create mode 100644 src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java diff --git a/build.gradle b/build.gradle index 57a0f80e3..1390143e9 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ minecraft { runDir = "idea" replaceIn "ModUtil.java" - replace "mod_version", project.version.toString() + replace "@VERSION@", project.version.toString() } repositories { diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java index 3aa4ce623..2f0ca5cdc 100644 --- a/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/blocks/BlockAtomicReconstructor.java @@ -93,6 +93,11 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IAct return new TileEntityAtomicReconstructor(); } + @Override + public boolean isOpaqueCube(){ + return false; + } + @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack){ int rotation = BlockPistonBase.determineOrientation(world, x, y, z, player); @@ -111,7 +116,6 @@ public class BlockAtomicReconstructor extends BlockContainerBase implements IAct ItemStack toPut = heldItem.copy(); toPut.stackSize = 1; reconstructor.setInventorySlotContents(0, toPut); - player.inventory.decrStackSize(player.inventory.currentItem, 1); } } diff --git a/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java b/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java new file mode 100644 index 000000000..37abdd0fa --- /dev/null +++ b/src/main/java/ellpeck/actuallyadditions/blocks/render/RenderReconstructorLens.java @@ -0,0 +1,75 @@ +/* + * This file ("RenderReconstructorLens.java") is part of the Actually Additions Mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015 Ellpeck + */ + +package ellpeck.actuallyadditions.blocks.render; + +import ellpeck.actuallyadditions.items.IReconstructorLens; +import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor; +import ellpeck.actuallyadditions.util.AssetUtil; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import org.lwjgl.opengl.GL11; + +public class RenderReconstructorLens extends TileEntitySpecialRenderer{ + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float par5){ + if(!(tile instanceof TileEntityAtomicReconstructor)){ + return; + } + ItemStack stack = ((TileEntityAtomicReconstructor)tile).getStackInSlot(0); + + if(stack != null && stack.getItem() instanceof IReconstructorLens){ + GL11.glPushMatrix(); + GL11.glTranslatef((float)x+0.5F, (float)y-0.5F, (float)z+0.5F); + GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); + + int meta = tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord); + if(meta == 0){ + GL11.glTranslatef(0F, -0.5F, 0F); + GL11.glTranslatef(-0.25F, 0F, -0.25F); + GL11.glRotatef(90F, 1F, 0F, 0F); + } + if(meta == 1){ + GL11.glTranslatef(0F, -1.5F-0.5F/16F, 0F); + GL11.glTranslatef(-0.25F, 0F, -0.25F); + GL11.glRotatef(90F, 1F, 0F, 0F); + } + if(meta == 2){ + GL11.glTranslatef(0F, -1F, 0F); + GL11.glTranslatef(0F, 0F, -0.5F); + GL11.glTranslatef(-0.25F, -0.25F, 0F); + } + if(meta == 3){ + GL11.glTranslatef(0F, -1F, 0F); + GL11.glTranslatef(0F, 0F, 0.5F+0.5F/16F); + GL11.glTranslatef(-0.25F, -0.25F, 0F); + } + if(meta == 4){ + GL11.glTranslatef(0F, -1F, 0F); + GL11.glTranslatef(0.5F+0.5F/16F, 0F, 0F); + GL11.glTranslatef(0F, -0.25F, 0.25F); + GL11.glRotatef(90F, 0F, 1F, 0F); + } + if(meta == 5){ + GL11.glTranslatef(0F, -1F, 0F); + GL11.glTranslatef(-0.5F, 0F, 0F); + GL11.glTranslatef(0F, -0.25F, 0.25F); + GL11.glRotatef(90F, 0F, 1F, 0F); + } + + GL11.glScalef(0.5F, 0.5F, 0.5F); + AssetUtil.renderItem(stack, 0); + + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java b/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java index ce5ba2810..33a2f5bd8 100644 --- a/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java +++ b/src/main/java/ellpeck/actuallyadditions/proxy/ClientProxy.java @@ -17,10 +17,7 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.VillagerRegistry; -import ellpeck.actuallyadditions.blocks.render.RenderInventory; -import ellpeck.actuallyadditions.blocks.render.RenderLaserRelay; -import ellpeck.actuallyadditions.blocks.render.RenderSmileyCloud; -import ellpeck.actuallyadditions.blocks.render.RenderTileEntity; +import ellpeck.actuallyadditions.blocks.render.*; import ellpeck.actuallyadditions.blocks.render.model.*; import ellpeck.actuallyadditions.config.values.ConfigBoolValues; import ellpeck.actuallyadditions.config.values.ConfigIntValues; @@ -84,6 +81,7 @@ public class ClientProxy implements IProxy{ registerRenderer(TileEntitySmileyCloud.class, new RenderSmileyCloud(new ModelSmileyCloud()), AssetUtil.smileyCloudRenderId); registerRenderer(TileEntityLaserRelay.class, new RenderLaserRelay(new ModelLaserRelay()), AssetUtil.laserRelayRenderId); registerRenderer(TileEntityBookletStand.class, new RenderTileEntity(new ModelBookletStand()), AssetUtil.bookletStandRenderId); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAtomicReconstructor.class, new RenderReconstructorLens()); VillagerRegistry.instance().registerVillagerSkin(ConfigIntValues.JAM_VILLAGER_ID.getValue(), new ResourceLocation(ModUtil.MOD_ID_LOWER, "textures/entity/villager/jamVillager.png")); } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java index 04fce6df1..ddcfe6f61 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityAtomicReconstructor.java @@ -209,11 +209,33 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple @Override public boolean canInsertItem(int slot, ItemStack stack, int side){ - return stack != null && stack.getItem() instanceof IReconstructorLens; + return this.isItemValidForSlot(slot, stack); } @Override public boolean canExtractItem(int slot, ItemStack stack, int side){ return true; } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack){ + return stack != null && stack.getItem() instanceof IReconstructorLens; + } + + @Override + public boolean shouldSyncSlots(){ + return true; + } + + @Override + public ItemStack decrStackSize(int i, int j){ + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + return super.decrStackSize(i, j); + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack){ + super.setInventorySlotContents(i, stack); + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java index 72db4bd26..2fad740be 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityInventoryBase.java @@ -31,18 +31,22 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements this.slots = new ItemStack[itemAmount]; } + public boolean shouldSyncSlots(){ + return false; + } + @Override public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ - if(!isForSync){ + if(!isForSync || this.shouldSyncSlots()){ if(this.slots.length > 0){ NBTTagList tagList = new NBTTagList(); for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte)currentIndex); if(slots[currentIndex] != null){ - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte)currentIndex); slots[currentIndex].writeToNBT(tagCompound); - tagList.appendTag(tagCompound); } + tagList.appendTag(tagCompound); } compound.setTag("Items", tagList); } @@ -51,7 +55,7 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ - if(!isForSync){ + if(!isForSync || this.shouldSyncSlots()){ if(this.slots.length > 0){ NBTTagList tagList = compound.getTagList("Items", 10); for(int i = 0; i < tagList.tagCount(); i++){ diff --git a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java index 47779d90f..6532858ba 100644 --- a/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java +++ b/src/main/java/ellpeck/actuallyadditions/util/ModUtil.java @@ -15,8 +15,8 @@ import org.apache.logging.log4j.Logger; import java.util.Locale; -public class ModUtil { - public static final String VERSION = "mod_version"; // Will be replaced by gradle +public class ModUtil{ + public static final String VERSION = "@VERSION@"; //build.gradle public static final String MOD_ID = "ActuallyAdditions"; public static final String NAME = "Actually Additions";