diff --git a/src/main/java/noppes/npcs/blocks/BlockScripted.java b/src/main/java/noppes/npcs/blocks/BlockScripted.java index f1b4b9266..c34283704 100644 --- a/src/main/java/noppes/npcs/blocks/BlockScripted.java +++ b/src/main/java/noppes/npcs/blocks/BlockScripted.java @@ -25,6 +25,8 @@ import noppes.npcs.constants.EnumGuiType; import java.util.Random; public class BlockScripted extends BlockContainer { + + public int renderId = -1; public static final AxisAlignedBB AABB = AxisAlignedBB.getBoundingBox(0.001f, 0.001f, 0.001f, 0.998f, 0.998f, 0.998f); public static final AxisAlignedBB AABB_EMPTY = AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); @@ -109,12 +111,12 @@ public class BlockScripted extends BlockContainer { @Override public boolean canRenderInPass(int pass) { - return false; + return super.canRenderInPass(pass); } @Override public int getRenderType() { - return 0; + return renderId; } @Override public boolean isOpaqueCube() { diff --git a/src/main/java/noppes/npcs/blocks/tiles/TileScripted.java b/src/main/java/noppes/npcs/blocks/tiles/TileScripted.java index b2d3bf8b4..2628c494a 100644 --- a/src/main/java/noppes/npcs/blocks/tiles/TileScripted.java +++ b/src/main/java/noppes/npcs/blocks/tiles/TileScripted.java @@ -15,6 +15,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; import noppes.npcs.*; import noppes.npcs.api.IBlock; import noppes.npcs.api.block.ITextPlane; @@ -48,6 +49,7 @@ public class TileScripted extends TileEntity implements IScriptBlockHandler { public ItemStack itemModel = new ItemStack(CustomItems.scripted); public Block blockModel = null; + private int metadata; public boolean needsClientUpdate = false; @@ -68,6 +70,7 @@ public class TileScripted extends TileEntity implements IScriptBlockHandler { public TileEntity renderTile; public boolean renderTileErrored = true; + public boolean renderFullBlock = true; public ITickable renderTileUpdate = null; public TextPlane text1 = new TextPlane(); @@ -219,9 +222,14 @@ public class TileScripted extends TileEntity implements IScriptBlockHandler { EventHooks.onScriptBlockUpdate(this); ticksExisted = 0; if(needsClientUpdate){ - markDirty(); + worldObj.func_147451_t(xCoord, yCoord, zCoord); worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - worldObj.notifyBlocksOfNeighborChange(xCoord,yCoord,zCoord,getBlockType(),3); + worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, CustomItems.scripted); + + Chunk chunk = worldObj.getChunkFromChunkCoords(xCoord >> 4, zCoord >> 4); + chunk.setBlockMetadata(xCoord & 15, yCoord, zCoord & 15, metadata); + blockMetadata = metadata; + needsClientUpdate = false; } } @@ -273,6 +281,11 @@ public class TileScripted extends TileEntity implements IScriptBlockHandler { if(NoppesUtilPlayer.compareItems(item, itemModel, false, false) && b != blockModel) return; + boolean blockChanged = b != blockModel; + int meta = item.getItemDamage(); + metadata = (meta == 0 || meta == metadata) && blockChanged ? metadata + 1 : meta; + this.blockMetadata = metadata; + itemModel = item; blockModel = b; needsClientUpdate = true; diff --git a/src/main/java/noppes/npcs/client/renderer/blocks/BlockScriptedRenderer.java b/src/main/java/noppes/npcs/client/renderer/blocks/BlockScriptedRenderer.java index 96aa40e7e..12e3a69fb 100644 --- a/src/main/java/noppes/npcs/client/renderer/blocks/BlockScriptedRenderer.java +++ b/src/main/java/noppes/npcs/client/renderer/blocks/BlockScriptedRenderer.java @@ -1,18 +1,18 @@ package noppes.npcs.client.renderer.blocks; +import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.src.FMLRenderAccessLibrary; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraftforge.client.ForgeHooksClient; import noppes.npcs.CustomItems; import noppes.npcs.blocks.BlockScripted; @@ -28,6 +28,38 @@ public class BlockScriptedRenderer extends BlockRendererInterface{ private static final RenderBlocks renderBlocks = new RenderBlocks(); private static final Random random = new Random(); + public BlockScriptedRenderer() { + ((BlockScripted) CustomItems.scripted).renderId = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(this); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + TileScripted tile = (TileScripted) world.getTileEntity(x, y, z); + Block blockModel = tile.blockModel; + + if (!overrideModel() && blockModel != null) { + GL11.glPushMatrix(); + GL11.glRotatef(tile.rotationY, 0, 1, 0); + GL11.glRotatef(tile.rotationX, 1, 0, 0); + GL11.glRotatef(tile.rotationZ, 0, 0, 1); + GL11.glScalef(tile.scaleX, tile.scaleY, tile.scaleZ); + if (blockModel != CustomItems.scripted) { + tile.renderFullBlock = renderer.renderBlockByRenderType(blockModel, x, y, z); + } else { + renderer.renderStandardBlock(blockModel, x, y, z); + tile.renderFullBlock = true; + } + GL11.glPopMatrix(); + } + + return true; + } + + public int getRenderId() { + return CustomItems.scripted.getRenderType(); + } + @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTicks) { TileScripted tile = (TileScripted) te; @@ -38,8 +70,7 @@ public class BlockScriptedRenderer extends BlockRendererInterface{ GL11.glTranslatef((float) (x + 0.5), (float) y, (float) (z + 0.5)); if (overrideModel()) { GL11.glTranslatef(0, 0.5F, 0); - renderItem(te, new ItemStack(CustomItems.scripted)); - } else { + } else if (!tile.renderFullBlock) { GL11.glRotatef(tile.rotationY, 0, 1, 0); GL11.glRotatef(tile.rotationX, 1, 0, 0); GL11.glRotatef(tile.rotationZ, 0, 0, 1); @@ -166,7 +197,7 @@ public class BlockScriptedRenderer extends BlockRendererInterface{ } @Override - public int getRenderId() { - return 0; + public boolean shouldRender3DInInventory(int modelId) { + return false; } }