diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/DummyWorld.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/DummyWorld.java index 4409efa3..cb31c298 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/DummyWorld.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/DummyWorld.java @@ -8,6 +8,7 @@ import net.minecraft.world.World; import net.minecraft.world.WorldProviderSurface; import net.minecraft.world.WorldSettings; import net.minecraft.world.WorldType; +import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.storage.WorldInfo; @@ -15,6 +16,8 @@ public class DummyWorld extends World { public static final World INSTANCE = new DummyWorld(); + private final Chunk chunk = new Chunk(this, 0, 0); + private DummyWorld() { super(null, new WorldInfo(new WorldSettings(0, GameType.NOT_SET, false, false, WorldType.DEFAULT), "MpServer"), @@ -33,6 +36,11 @@ public class DummyWorld extends World { return true; } + @Override + public Chunk getChunk(int chunkX, int chunkZ) { + return chunk; + } + @Override public IBlockState getBlockState(BlockPos pos) { return Blocks.AIR.getDefaultState(); diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java b/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java index a6b9b05a..688800a2 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/gui/RenderPlayerModel.java @@ -1,18 +1,25 @@ package com.voxelmodpack.hdskins.gui; +import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBiped.ArmPose; import net.minecraft.client.model.ModelElytra; import net.minecraft.client.model.ModelPlayer; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderLivingBase; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.layers.LayerRenderer; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityBed; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; @@ -92,6 +99,14 @@ public class RenderPlayerModel extends RenderLiving @Override public void doRender(M entity, double x, double y, double z, float entityYaw, float partialTicks) { + + if (entity.isPlayerSleeping()) { + BedHead.instance.render(entity); + } + if (entity.isRiding()) { + MrBoaty.instance.render(); + } + ModelPlayer player = getEntityModel(entity); mainModel = player; @@ -147,7 +162,59 @@ public class RenderPlayerModel extends RenderLiving super.doRender(entity, x, y, z, entityYaw, partialTicks); popMatrix(); - popAttrib(); + + } + + static class BedHead extends TileEntityBed { + public static BedHead instance = new BedHead(Blocks.BED.getDefaultState()); + + public int metadata; + + public BedHead(IBlockState state) { + state.getBlock().getMetaFromState(state); + } + + @Override + public int getBlockMetadata() { + return metadata; + } + + public void render(Entity entity) { + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + pushMatrix(); + + scale(-1, -1, -1); + + TileEntityRendererDispatcher dispatcher = TileEntityRendererDispatcher.instance; + + dispatcher.prepare(entity.getEntityWorld(), Minecraft.getMinecraft().getTextureManager(), Minecraft.getMinecraft().getRenderManager().getFontRenderer(), entity, null, 0); + dispatcher.getRenderer(this).render(BedHead.instance, -0.5F, 0, 0, 0, -1, 1); + + popMatrix(); + popAttrib(); + } + } + + static class MrBoaty extends EntityBoat { + public static MrBoaty instance = new MrBoaty(); + + public MrBoaty() { + super(null); + } + + public void render() { + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + pushMatrix(); + + scale(-1, -1, -1); + + Render render = Minecraft.getMinecraft().getRenderManager().getEntityRenderObject(this); + + render.doRender(this, 0, 0, 0, 0, 0); + + popMatrix(); + popAttrib(); + } } }