666 lines
24 KiB
Java
666 lines
24 KiB
Java
package tschipp.carryon.client.event;
|
|
|
|
import java.io.File;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.state.IBlockState;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.entity.AbstractClientPlayer;
|
|
import net.minecraft.client.entity.EntityPlayerSP;
|
|
import net.minecraft.client.gui.inventory.GuiContainer;
|
|
import net.minecraft.client.model.ModelPlayer;
|
|
import net.minecraft.client.model.ModelRenderer;
|
|
import net.minecraft.client.renderer.GlStateManager;
|
|
import net.minecraft.client.renderer.OpenGlHelper;
|
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
|
import net.minecraft.client.renderer.entity.RenderManager;
|
|
import net.minecraft.client.renderer.entity.RenderPlayer;
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
|
import net.minecraft.client.settings.GameSettings;
|
|
import net.minecraft.client.settings.KeyBinding;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.EnumHand;
|
|
import net.minecraft.util.ResourceLocation;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.util.math.MathHelper;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.client.event.GuiScreenEvent.InitGuiEvent;
|
|
import net.minecraftforge.client.event.MouseEvent;
|
|
import net.minecraftforge.client.event.RenderHandEvent;
|
|
import net.minecraftforge.client.event.RenderPlayerEvent;
|
|
import net.minecraftforge.common.config.Configuration;
|
|
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
|
import net.minecraftforge.fml.common.Loader;
|
|
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
import net.minecraftforge.fml.common.gameevent.InputEvent;
|
|
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
|
import tschipp.carryon.CarryOn;
|
|
import tschipp.carryon.client.keybinds.CarryOnKeybinds;
|
|
import tschipp.carryon.common.config.CarryOnConfig;
|
|
import tschipp.carryon.common.handler.ModelOverridesHandler;
|
|
import tschipp.carryon.common.handler.RegistrationHandler;
|
|
import tschipp.carryon.common.helper.ScriptParseHelper;
|
|
import tschipp.carryon.common.helper.StringParser;
|
|
import tschipp.carryon.common.item.ItemEntity;
|
|
import tschipp.carryon.common.item.ItemTile;
|
|
import tschipp.carryon.common.scripting.CarryOnOverride;
|
|
import tschipp.carryon.common.scripting.ScriptChecker;
|
|
import tschipp.carryon.network.server.SyncKeybindPacket;
|
|
|
|
public class RenderEvents
|
|
{
|
|
private static boolean initModels;
|
|
|
|
/*
|
|
* Prevents the Player from scrolling
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent
|
|
public void onScroll(MouseEvent event)
|
|
{
|
|
if (event.getDwheel() > 0 || event.getDwheel() < 0 || Minecraft.getMinecraft().gameSettings.keyBindPickBlock.isPressed())
|
|
{
|
|
ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand();
|
|
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile)
|
|
{
|
|
if (ItemTile.hasTileData(stack))
|
|
{
|
|
event.setCanceled(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@SubscribeEvent
|
|
@SideOnly(Side.CLIENT)
|
|
public void onPlayerTick(PlayerTickEvent event) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException
|
|
{
|
|
EntityPlayer player = event.player;
|
|
|
|
if (player != null && event.side == Side.CLIENT)
|
|
{
|
|
boolean keyPressed = CarryOnKeybinds.carryKey.isKeyDown();
|
|
boolean playerKeyPressed = CarryOnKeybinds.isKeyPressed(player);
|
|
|
|
if (keyPressed && !playerKeyPressed)
|
|
{
|
|
CarryOnKeybinds.setKeyPressed(player, true);
|
|
CarryOn.network.sendToServer(new SyncKeybindPacket(true));
|
|
}
|
|
else if (!keyPressed && playerKeyPressed)
|
|
{
|
|
CarryOnKeybinds.setKeyPressed(player, false);
|
|
CarryOn.network.sendToServer(new SyncKeybindPacket(false));
|
|
}
|
|
}
|
|
}
|
|
|
|
@SubscribeEvent
|
|
@SideOnly(Side.CLIENT)
|
|
public void onJoinWorld(EntityJoinWorldEvent event)
|
|
{
|
|
if (event.getEntity() instanceof EntityPlayer)
|
|
{
|
|
EntityPlayer player = (EntityPlayer) event.getEntity();
|
|
if (player.world.isRemote)
|
|
{
|
|
CarryOnKeybinds.setKeyPressed(player, false);
|
|
CarryOn.network.sendToServer(new SyncKeybindPacket(false));
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Prevents the Player from opening Guis
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent
|
|
public void onGuiInit(InitGuiEvent.Pre event)
|
|
{
|
|
if (event.getGui() != null)
|
|
{
|
|
boolean inventory = event.getGui() instanceof GuiContainer;
|
|
EntityPlayer player = Minecraft.getMinecraft().player;
|
|
|
|
if (player != null && inventory)
|
|
{
|
|
ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND);
|
|
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack))
|
|
{
|
|
Minecraft.getMinecraft().player.closeScreen();
|
|
Minecraft.getMinecraft().currentScreen = null;
|
|
Minecraft.getMinecraft().setIngameFocus();
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Prevents the Player from switching Slots
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent
|
|
public void inputEvent(InputEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
|
|
{
|
|
GameSettings settings = Minecraft.getMinecraft().gameSettings;
|
|
Field field = KeyBinding.class.getDeclaredFields()[8];
|
|
field.setAccessible(true);
|
|
ItemStack stack = Minecraft.getMinecraft().player.getHeldItemMainhand();
|
|
EntityPlayer player = Minecraft.getMinecraft().player;
|
|
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack))
|
|
{
|
|
if (settings.keyBindDrop.isPressed())
|
|
{
|
|
field.set(settings.keyBindDrop, false);
|
|
}
|
|
if (settings.keyBindSwapHands.isPressed())
|
|
{
|
|
field.set(settings.keyBindSwapHands, false);
|
|
}
|
|
for (KeyBinding keyBind : settings.keyBindsHotbar)
|
|
{
|
|
if (keyBind.isPressed())
|
|
{
|
|
field.set(keyBind, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
int current = player.inventory.currentItem;
|
|
|
|
if (player.getEntityData().hasKey("carrySlot") ? player.getEntityData().getInteger("carrySlot") != current : false)
|
|
{
|
|
player.inventory.currentItem = player.getEntityData().getInteger("carrySlot");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Renders the Block in First Person
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent
|
|
public void renderHand(RenderHandEvent event)
|
|
{
|
|
World world = Minecraft.getMinecraft().world;
|
|
EntityPlayer player = Minecraft.getMinecraft().player;
|
|
AbstractClientPlayer aplayer = (AbstractClientPlayer) player;
|
|
ItemStack stack = player.getHeldItemMainhand();
|
|
int perspective = Minecraft.getMinecraft().gameSettings.thirdPersonView;
|
|
boolean f1 = Minecraft.getMinecraft().gameSettings.hideGUI;
|
|
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) && perspective == 0 && !f1)
|
|
{
|
|
if (Loader.isModLoaded("realrender") || Loader.isModLoaded("rfpr"))
|
|
return;
|
|
|
|
Block block = ItemTile.getBlock(stack);
|
|
NBTTagCompound tag = ItemTile.getTileData(stack);
|
|
IBlockState state = ItemTile.getBlockState(stack);
|
|
ItemStack tileStack = ItemTile.getItemStack(stack);
|
|
|
|
GlStateManager.pushMatrix();
|
|
GlStateManager.scale(2.5, 2.5, 2.5);
|
|
GlStateManager.translate(0, -0.6, -1);
|
|
GlStateManager.enableBlend();
|
|
|
|
if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block))
|
|
{
|
|
GlStateManager.rotate(180, 0, 1f, 0);
|
|
GlStateManager.rotate(-8, 1f, 0, 0);
|
|
}
|
|
else
|
|
{
|
|
GlStateManager.rotate(8, 1f, 0, 0);
|
|
}
|
|
|
|
IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileStack, world, player);
|
|
|
|
CarryOnOverride carryOverride = ScriptChecker.getOverride(player);
|
|
if (carryOverride != null)
|
|
{
|
|
double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation());
|
|
double[] rotation = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation());
|
|
double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale());
|
|
Block b = StringParser.getBlock(carryOverride.getRenderNameBlock());
|
|
if (b != null)
|
|
{
|
|
ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta());
|
|
s.setTagCompound(carryOverride.getRenderNBT());
|
|
model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player);
|
|
}
|
|
|
|
GlStateManager.translate(translation[0], translation[1], translation[2]);
|
|
GlStateManager.rotate((float) rotation[0], 1, 0, 0);
|
|
GlStateManager.rotate((float) rotation[1], 0, 1, 0);
|
|
GlStateManager.rotate((float) rotation[2], 0, 0, 1);
|
|
GlStateManager.scale(scale[0], scale[1], scale[2]);
|
|
|
|
}
|
|
|
|
int i = this.getBrightnessForRender(Minecraft.getMinecraft().player);
|
|
int j = i % 65536;
|
|
int k = i / 65536;
|
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j, k);
|
|
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
|
|
this.setLightmapDisabled(false);
|
|
|
|
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
|
|
|
if (ModelOverridesHandler.hasCustomOverrideModel(state, tag))
|
|
{
|
|
Object override = ModelOverridesHandler.getOverrideObject(state, tag);
|
|
|
|
if (override instanceof ItemStack)
|
|
{
|
|
|
|
Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model);
|
|
}
|
|
else
|
|
{
|
|
Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Minecraft.getMinecraft().getRenderItem().renderItem(tileStack.isEmpty() ? stack : tileStack, model);
|
|
}
|
|
|
|
this.setLightmapDisabled(true);
|
|
|
|
if (perspective == 0)
|
|
{
|
|
event.setCanceled(true);
|
|
}
|
|
|
|
GlStateManager.disableBlend();
|
|
GlStateManager.scale(1, 1, 1);
|
|
GlStateManager.popMatrix();
|
|
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private int getBrightnessForRender(EntityPlayer player)
|
|
{
|
|
BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(MathHelper.floor(player.posX), 0, MathHelper.floor(player.posZ));
|
|
|
|
if (player.world.isBlockLoaded(blockpos$mutableblockpos))
|
|
{
|
|
blockpos$mutableblockpos.setY(MathHelper.floor(player.posY + player.getEyeHeight()));
|
|
return player.world.getCombinedLight(blockpos$mutableblockpos, 0);
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private void setLightmapDisabled(boolean disabled)
|
|
{
|
|
GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
|
|
|
|
if (disabled)
|
|
{
|
|
GlStateManager.disableTexture2D();
|
|
}
|
|
else
|
|
{
|
|
GlStateManager.enableTexture2D();
|
|
}
|
|
|
|
GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
|
|
}
|
|
|
|
/*
|
|
* Renders the Block in Third Person
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent
|
|
public void onPlayerRenderPost(RenderPlayerEvent.Post event)
|
|
{
|
|
World world = Minecraft.getMinecraft().world;
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player;
|
|
ItemStack stack = player.getHeldItemMainhand();
|
|
float partialticks = event.getPartialRenderTick();
|
|
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack))
|
|
{
|
|
Block block = ItemTile.getBlock(stack);
|
|
IBlockState state = ItemTile.getBlockState(stack);
|
|
NBTTagCompound tag = ItemTile.getTileData(stack);
|
|
ItemStack tileItem = ItemTile.getItemStack(stack);
|
|
|
|
float rotation = 0f;
|
|
|
|
if (player.isRiding() && player.getRidingEntity() instanceof EntityLivingBase)
|
|
rotation = -(player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * partialticks);
|
|
else
|
|
rotation = -(player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks);
|
|
|
|
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks;
|
|
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks;
|
|
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks;
|
|
|
|
double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks;
|
|
double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks;
|
|
double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks;
|
|
|
|
double xOffset = d0 - c0;
|
|
double yOffset = d1 - c1;
|
|
double zOffset = d2 - c2;
|
|
|
|
GlStateManager.pushMatrix();
|
|
GlStateManager.translate(xOffset, yOffset, zOffset);
|
|
GlStateManager.scale(0.6, 0.6, 0.6);
|
|
GlStateManager.enableBlend();
|
|
|
|
if (CarryOnConfig.settings.facePlayer ? !isChest(block) : isChest(block))
|
|
{
|
|
GlStateManager.rotate(rotation, 0, 1.0f, 0);
|
|
GlStateManager.translate(0, 1.6, 0.65);
|
|
if ((Loader.isModLoaded("realrender") || Loader.isModLoaded("rfpr")) && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0)
|
|
GlStateManager.translate(0, 0, -0.4);
|
|
}
|
|
else
|
|
{
|
|
GlStateManager.rotate(rotation + 180, 0, 1.0f, 0);
|
|
GlStateManager.translate(0, 1.6, -0.65);
|
|
if ((Loader.isModLoaded("realrender") || Loader.isModLoaded("rfpr")) && Minecraft.getMinecraft().gameSettings.thirdPersonView == 0)
|
|
GlStateManager.translate(0, 0, 0.4);
|
|
}
|
|
|
|
if (player.isSneaking())
|
|
{
|
|
GlStateManager.translate(0, -0.3, 0);
|
|
}
|
|
|
|
IBakedModel model = ModelOverridesHandler.hasCustomOverrideModel(state, tag) ? ModelOverridesHandler.getCustomOverrideModel(state, tag, world, player) : Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(tileItem, world, player);
|
|
|
|
CarryOnOverride carryOverride = ScriptChecker.getOverride(player);
|
|
if (carryOverride != null)
|
|
{
|
|
double[] translation = ScriptParseHelper.getXYZArray(carryOverride.getRenderTranslation());
|
|
double[] rot = ScriptParseHelper.getXYZArray(carryOverride.getRenderRotation());
|
|
double[] scale = ScriptParseHelper.getScale(carryOverride.getRenderScale());
|
|
Block b = StringParser.getBlock(carryOverride.getRenderNameBlock());
|
|
if (b != null)
|
|
{
|
|
ItemStack s = new ItemStack(b, 1, carryOverride.getRenderMeta());
|
|
s.setTagCompound(carryOverride.getRenderNBT());
|
|
model = Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(s, world, player);
|
|
}
|
|
|
|
GlStateManager.translate(translation[0], translation[1], translation[2]);
|
|
GlStateManager.rotate((float) rot[0], 1, 0, 0);
|
|
GlStateManager.rotate((float) rot[1], 0, 1, 0);
|
|
GlStateManager.rotate((float) rot[2], 0, 0, 1);
|
|
GlStateManager.scale(scale[0], scale[1], scale[2]);
|
|
|
|
}
|
|
|
|
Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
|
|
|
if (ModelOverridesHandler.hasCustomOverrideModel(state, tag))
|
|
{
|
|
Object override = ModelOverridesHandler.getOverrideObject(state, tag);
|
|
|
|
if (override instanceof ItemStack)
|
|
{
|
|
Minecraft.getMinecraft().getRenderItem().renderItem((ItemStack) override, model);
|
|
}
|
|
else
|
|
{
|
|
Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Minecraft.getMinecraft().getRenderItem().renderItem(tileItem.isEmpty() ? stack : tileItem, model);
|
|
}
|
|
|
|
GlStateManager.disableBlend();
|
|
GlStateManager.scale(1, 1, 1);
|
|
GlStateManager.popMatrix();
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Renders correct arm rotation
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent(priority = EventPriority.HIGH)
|
|
public void onEvent(RenderPlayerEvent.Post event)
|
|
{
|
|
if(!CarryOnConfig.settings.renderArms)
|
|
return;
|
|
|
|
if (handleMobends() && !Loader.isModLoaded("obfuscate"))
|
|
{
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
EntityPlayerSP clientPlayer = Minecraft.getMinecraft().player;
|
|
float partialticks = event.getPartialRenderTick();
|
|
|
|
RenderPlayer render = event.getRenderer();
|
|
|
|
ItemStack stack = player.getHeldItemMainhand();
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))
|
|
{
|
|
ModelPlayer model = event.getRenderer().getMainModel();
|
|
float rotation = 0;
|
|
|
|
if (player.isRiding() && player.getRidingEntity() instanceof EntityLivingBase)
|
|
rotation = (player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * partialticks);
|
|
else
|
|
rotation = (player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialticks);
|
|
|
|
AbstractClientPlayer aplayer = (AbstractClientPlayer) player;
|
|
ResourceLocation skinLoc = aplayer.getLocationSkin();
|
|
|
|
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialticks;
|
|
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialticks;
|
|
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialticks;
|
|
|
|
double c0 = clientPlayer.lastTickPosX + (clientPlayer.posX - clientPlayer.lastTickPosX) * partialticks;
|
|
double c1 = clientPlayer.lastTickPosY + (clientPlayer.posY - clientPlayer.lastTickPosY) * partialticks;
|
|
double c2 = clientPlayer.lastTickPosZ + (clientPlayer.posZ - clientPlayer.lastTickPosZ) * partialticks;
|
|
|
|
double xOffset = d0 - c0;
|
|
double yOffset = d1 - c1;
|
|
double zOffset = d2 - c2;
|
|
|
|
GlStateManager.pushMatrix();
|
|
GlStateManager.translate(xOffset, yOffset, zOffset);
|
|
|
|
Minecraft.getMinecraft().getTextureManager().bindTexture(skinLoc);
|
|
|
|
CarryOnOverride overrider = ScriptChecker.getOverride(player);
|
|
if (overrider != null)
|
|
{
|
|
double[] rotLeft = null;
|
|
double[] rotRight = null;
|
|
if (overrider.getRenderRotationLeftArm() != null)
|
|
rotLeft = ScriptParseHelper.getXYZArray(overrider.getRenderRotationLeftArm());
|
|
if (overrider.getRenderRotationRightArm() != null)
|
|
rotRight = ScriptParseHelper.getXYZArray(overrider.getRenderRotationRightArm());
|
|
|
|
boolean renderRight = overrider.isRenderRightArm();
|
|
boolean renderLeft = overrider.isRenderLeftArm();
|
|
|
|
if (renderLeft && rotLeft != null)
|
|
{
|
|
renderArmPost(model.bipedLeftArm, (float) rotLeft[0], (float) rotLeft[2], rotation, false, player.isSneaking());
|
|
renderArmPost(model.bipedLeftArmwear, (float) rotLeft[0], (float) rotLeft[2], rotation, false, player.isSneaking());
|
|
}
|
|
else if (renderLeft)
|
|
{
|
|
renderArmPost(model.bipedLeftArm, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation, false, player.isSneaking());
|
|
renderArmPost(model.bipedLeftArmwear, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation, false, player.isSneaking());
|
|
}
|
|
|
|
if (renderRight && rotRight != null)
|
|
{
|
|
renderArmPost(model.bipedRightArm, (float) rotRight[0], (float) rotRight[2], rotation, true, player.isSneaking());
|
|
renderArmPost(model.bipedRightArmwear, (float) rotRight[0], (float) rotRight[2], rotation, true, player.isSneaking());
|
|
}
|
|
else if (renderRight)
|
|
{
|
|
renderArmPost(model.bipedRightArm, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation, true, player.isSneaking());
|
|
renderArmPost(model.bipedRightArmwear, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation, true, player.isSneaking());
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
renderArmPost(model.bipedRightArm, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation, true, player.isSneaking());
|
|
renderArmPost(model.bipedLeftArm, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation, false, player.isSneaking());
|
|
renderArmPost(model.bipedLeftArmwear, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? 0.15f : 0), rotation, false, player.isSneaking());
|
|
renderArmPost(model.bipedRightArmwear, 2.0F + (player.isSneaking() ? 0f : 0.2f) - (stack.getItem() == RegistrationHandler.itemEntity ? 0.3f : 0), (stack.getItem() == RegistrationHandler.itemEntity ? -0.15f : 0), rotation, true, player.isSneaking());
|
|
}
|
|
GlStateManager.popMatrix();
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Hides the vanilla arm for rendering the rotation
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
@SubscribeEvent(priority = EventPriority.NORMAL)
|
|
public void onEvent(RenderPlayerEvent.Pre event)
|
|
{
|
|
if(!CarryOnConfig.settings.renderArms)
|
|
return;
|
|
|
|
if (handleMobends() && !Loader.isModLoaded("obfuscate"))
|
|
{
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
ItemStack stack = player.getHeldItemMainhand();
|
|
if (!stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile && ItemTile.hasTileData(stack) || stack.getItem() == RegistrationHandler.itemEntity && ItemEntity.hasEntityData(stack))
|
|
{
|
|
ModelPlayer model = event.getRenderer().getMainModel();
|
|
|
|
CarryOnOverride overrider = ScriptChecker.getOverride(player);
|
|
if (overrider != null)
|
|
{
|
|
boolean renderRight = overrider.isRenderRightArm();
|
|
boolean renderLeft = overrider.isRenderLeftArm();
|
|
|
|
if (renderRight)
|
|
{
|
|
renderArmPre(model.bipedRightArm);
|
|
renderArmPre(model.bipedRightArmwear);
|
|
|
|
|
|
}
|
|
|
|
if (renderLeft)
|
|
{
|
|
renderArmPre(model.bipedLeftArm);
|
|
renderArmPre(model.bipedLeftArmwear);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
renderArmPre(model.bipedRightArm);
|
|
renderArmPre(model.bipedLeftArm);
|
|
renderArmPre(model.bipedLeftArmwear);
|
|
renderArmPre(model.bipedRightArmwear);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void renderArmPost(ModelRenderer arm, float x, float z, float rotation, boolean right, boolean sneaking)
|
|
{
|
|
arm.isHidden = false;
|
|
if (right)
|
|
{
|
|
arm.rotationPointZ = -MathHelper.sin((float) Math.toRadians(rotation)) * 4.75F;
|
|
arm.rotationPointX = -MathHelper.cos((float) Math.toRadians(rotation)) * 4.75F;
|
|
}
|
|
else
|
|
{
|
|
arm.rotationPointZ = MathHelper.sin((float) Math.toRadians(rotation)) * 4.75F;
|
|
arm.rotationPointX = MathHelper.cos((float) Math.toRadians(rotation)) * 4.75F;
|
|
}
|
|
|
|
if (!sneaking)
|
|
arm.rotationPointY = 20;
|
|
else
|
|
arm.rotationPointY = 15;
|
|
|
|
arm.rotateAngleX = (float) x;
|
|
arm.rotateAngleY = (float) -Math.toRadians(rotation);
|
|
arm.rotateAngleZ = (float) z;
|
|
arm.renderWithRotation(0.0625F);
|
|
arm.rotationPointY = 2;
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void renderArmPre(ModelRenderer arm)
|
|
{
|
|
arm.isHidden = true;
|
|
}
|
|
|
|
public boolean handleMobends()
|
|
{
|
|
if (Loader.isModLoaded("mobends"))
|
|
{
|
|
Configuration config = new Configuration(new File(CarryOn.CONFIGURATION_FILE.getPath().substring(0, CarryOn.CONFIGURATION_FILE.getPath().length() - 16), "mobends.cfg"));
|
|
|
|
boolean renderPlayer = config.get("animated", "player", true).getBoolean();
|
|
return !renderPlayer;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static boolean isChest(Block block)
|
|
{
|
|
return block == Blocks.CHEST || block == Blocks.ENDER_CHEST || block == Blocks.TRAPPED_CHEST;
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private static RenderPlayer getRenderPlayer(AbstractClientPlayer player)
|
|
{
|
|
Minecraft mc = Minecraft.getMinecraft();
|
|
RenderManager manager = mc.getRenderManager();
|
|
return manager.getSkinMap().get(player.getSkinType());
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
private static ModelPlayer getPlayerModel(AbstractClientPlayer player)
|
|
{
|
|
return getRenderPlayer(player).getMainModel();
|
|
}
|
|
|
|
@SubscribeEvent
|
|
@SideOnly(Side.CLIENT)
|
|
public void hideItems(RenderPlayerEvent.Specials.Pre event)
|
|
{
|
|
EntityPlayer player = event.getEntityPlayer();
|
|
ItemStack stack = player.getHeldItemMainhand();
|
|
|
|
if (stack != null && (stack.getItem() == RegistrationHandler.itemTile || stack.getItem() == RegistrationHandler.itemEntity))
|
|
{
|
|
event.setRenderItem(false);
|
|
}
|
|
}
|
|
}
|