Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/main/ModEventHandlerClient.java
2025-06-26 00:32:37 +02:00

1379 lines
52 KiB
Java

package com.hbm.main;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockAshes;
import com.hbm.config.ClientConfig;
import com.hbm.config.GeneralConfig;
import com.hbm.entity.mob.EntityHunterChopper;
import com.hbm.entity.projectile.EntityChopperMine;
import com.hbm.entity.train.EntityRailCarRidable;
import com.hbm.extprop.HbmLivingProps;
import com.hbm.extprop.HbmPlayerProps;
import com.hbm.handler.ArmorModHandler;
import com.hbm.handler.HTTPHandler;
import com.hbm.handler.HazmatRegistry;
import com.hbm.handler.ImpactWorldHandler;
import com.hbm.hazard.HazardSystem;
import com.hbm.interfaces.IHoldableWeapon;
import com.hbm.interfaces.IItemHUD;
import com.hbm.interfaces.Spaghetti;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.gui.GUIArmorTable;
import com.hbm.inventory.gui.GUIScreenPreview;
import com.hbm.inventory.gui.GUIScreenWikiRender;
import com.hbm.items.ItemCustomLore;
import com.hbm.items.ModItems;
import com.hbm.items.armor.*;
import com.hbm.items.machine.ItemDepletedFuel;
import com.hbm.items.machine.ItemFluidDuct;
import com.hbm.items.machine.ItemRBMKPellet;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.lib.Library;
import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.AuxButtonPacket;
import com.hbm.render.anim.HbmAnimations;
import com.hbm.render.anim.HbmAnimations.Animation;
import com.hbm.render.block.ct.CTStitchReceiver;
import com.hbm.render.item.weapon.sedna.ItemRenderWeaponBase;
import com.hbm.render.util.RenderAccessoryUtility;
import com.hbm.render.util.RenderOverhead;
import com.hbm.render.util.RenderScreenOverlay;
import com.hbm.render.util.SoyuzPronter;
import com.hbm.render.world.RenderNTMSkyboxChainloader;
import com.hbm.render.world.RenderNTMSkyboxImpact;
import com.hbm.sound.MovingSoundChopper;
import com.hbm.sound.MovingSoundChopperMine;
import com.hbm.sound.MovingSoundCrashing;
import com.hbm.sound.MovingSoundPlayerLoop;
import com.hbm.sound.MovingSoundPlayerLoop.EnumHbmSound;
import com.hbm.tileentity.bomb.TileEntityNukeCustom;
import com.hbm.tileentity.bomb.TileEntityNukeCustom.CustomNukeEntry;
import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumEntryType;
import com.hbm.util.*;
import com.hbm.util.ArmorRegistry.HazardClass;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.wiaj.GuiWorldInAJar;
import com.hbm.wiaj.cannery.CanneryBase;
import com.hbm.wiaj.cannery.Jars;
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent;
import cpw.mods.fml.relauncher.ReflectionHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.client.C03PacketPlayer;
import net.minecraft.network.play.client.C0CPacketInput;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.*;
import net.minecraft.world.World;
import net.minecraft.world.WorldProviderSurface;
import net.minecraftforge.client.GuiIngameForge;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.IRenderHandler;
import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraftforge.client.event.*;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.sound.PlaySoundEvent17;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import java.lang.reflect.Method;
import java.util.*;
public class ModEventHandlerClient {
public static final int flashDuration = 5_000;
public static long flashTimestamp;
public static final int shakeDuration = 1_500;
public static long shakeTimestamp;
@SubscribeEvent
public void onOverlayRender(RenderGameOverlayEvent.Pre event) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
/// NUKE FLASH ///
if(event.type == ElementType.CROSSHAIRS && (flashTimestamp + flashDuration - Clock.get_ms()) > 0 && ClientConfig.NUKE_HUD_FLASH.get()) {
int width = event.resolution.getScaledWidth();
int height = event.resolution.getScaledHeight();
Tessellator tess = Tessellator.instance;
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.0F);
GL11.glDepthMask(false);
tess.startDrawingQuads();
float brightness = (flashTimestamp + flashDuration - Clock.get_ms()) / (float) flashDuration;
tess.setColorRGBA_F(1F, 1F, 1F, brightness * 1F);
tess.addVertex(width, 0, 0);
tess.addVertex(0, 0, 0);
tess.addVertex(0, height, 0);
tess.addVertex(width, height, 0);
tess.draw();
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
GL11.glDepthMask(true);
return;
}
/*if(event.type == ElementType.CROSSHAIRS && player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.gun_aberrator) {
int width = event.resolution.getScaledWidth();
int height = event.resolution.getScaledHeight();
Tessellator tess = Tessellator.instance;
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR, 1, 0);
GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.0F);
GL11.glDepthMask(false);
tess.startDrawingQuads();
float intensity = 0.2F;
tess.setColorRGBA_F(intensity, intensity, intensity, 1F);
tess.addVertex(width, 0, 0);
tess.addVertex(0, 0, 0);
tess.addVertex(0, height, 0);
tess.addVertex(width, height, 0);
tess.draw();
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F);
GL11.glDepthMask(true);
}*/
/// HANDLE GUN OVERLAYS ///
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IItemHUD) {
((IItemHUD)player.getHeldItem().getItem()).renderHUD(event, event.type, player, player.getHeldItem());
}
/// HANDLE GEIGER COUNTER HUD ///
if(event.type == ElementType.HOTBAR) {
if(!(ArmorFSB.hasFSBArmor(player) && ((ArmorFSB)player.inventory.armorInventory[2].getItem()).customGeiger)) {
if(player.inventory.hasItem(ModItems.geiger_counter)) {
float rads = HbmLivingProps.getRadiation(player);
RenderScreenOverlay.renderRadCounter(event.resolution, rads, Minecraft.getMinecraft().ingameGUI);
}
}
}
/// DODD DIAG HOOK FOR RBMK
if(event.type == ElementType.CROSSHAIRS && ClientConfig.DODD_RBMK_DIAGNOSTIC.get()) {
Minecraft mc = Minecraft.getMinecraft();
World world = mc.theWorld;
MovingObjectPosition mop = mc.objectMouseOver;
if(mop != null) {
if(mop.typeOfHit == mop.typeOfHit.BLOCK) {
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ILookOverlay) {
((ILookOverlay) player.getHeldItem().getItem()).printHook(event, world, mop.blockX, mop.blockY, mop.blockZ);
} else if(world.getBlock(mop.blockX, mop.blockY, mop.blockZ) instanceof ILookOverlay) {
((ILookOverlay) world.getBlock(mop.blockX, mop.blockY, mop.blockZ)).printHook(event, world, mop.blockX, mop.blockY, mop.blockZ);
}
/*List<String> text = new ArrayList();
text.add("Meta: " + world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ));
ILookOverlay.printGeneric(event, "DEBUG", 0xffff00, 0x4040000, text);*/
} else if(mop.typeOfHit == mop.typeOfHit.ENTITY) {
Entity entity = mop.entityHit;
if(entity instanceof ILookOverlay) {
((ILookOverlay) entity).printHook(event, world, 0, 0, 0);
}
}
GL11.glColor4f(1F, 1F, 1F, 1F);
}
/*List<String> text = new ArrayList();
text.add("IMPACT: " + ImpactWorldHandler.getImpactForClient(world));
text.add("DUST: " + ImpactWorldHandler.getDustForClient(world));
text.add("FIRE: " + ImpactWorldHandler.getFireForClient(world));
ILookOverlay.printGeneric(event, "DEBUG", 0xffff00, 0x4040000, text);*/
/*if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) {
ScaledResolution resolution = event.resolution;
GL11.glPushMatrix();
int pX = resolution.getScaledWidth() / 2 + 8;
int pZ = resolution.getScaledHeight() / 2;
mc.fontRenderer.drawString("META: " + world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ), pX, pZ - 3, 0xffff00);
GL11.glDisable(GL11.GL_BLEND);
GL11.glColor3f(1F, 1F, 1F);
GL11.glPopMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(Gui.icons);
}*/
/*List<String> text = new ArrayList();
MovingObjectPosition pos = Library.rayTrace(player, 500, 1, false, true, false);
for(int i = 0; i < 2; i++) if(pos != null && pos.typeOfHit == pos.typeOfHit.BLOCK) {
float yaw = player.rotationYaw;
Vec3 next = Vec3.createVectorHelper(pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord);
int it = 0;
BlockPos anchor = new BlockPos(pos.blockX, pos.blockY, pos.blockZ);
double distanceToCover = 4D * (i == 0 ? 1 : -1);
if(distanceToCover < 0) {
distanceToCover *= -1;
yaw += 180;
}
do {
it++;
if(it > 30) {
world.createExplosion(player, pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord, 5F, false);
break;
}
int x = anchor.getX();
int y = anchor.getY();
int z = anchor.getZ();
Block block = world.getBlock(x, y, z);
Vec3 rot = Vec3.createVectorHelper(0, 0, 1);
rot.rotateAroundY((float) (-yaw * Math.PI / 180D));
if(block instanceof IRailNTM) {
IRailNTM rail = (IRailNTM) block;
RailContext info = new RailContext();
boolean flip = distanceToCover < 0;
if(it == 1) {
Vec3 snap = next = rail.getTravelLocation(world, x, y, z, next.xCoord, next.yCoord, next.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, 0, info, new MoveContext(RailCheckType.CORE, 0));
if(i == 0) world.spawnParticle("reddust", snap.xCoord, snap.yCoord + 0.25, snap.zCoord, 0.1, 1, 0.1);
}
Vec3 prev = next;
next = rail.getTravelLocation(world, x, y, z, prev.xCoord, prev.yCoord, prev.zCoord, rot.xCoord, rot.yCoord, rot.zCoord, distanceToCover, info, new MoveContext(i == 0 ? RailCheckType.FRONT : RailCheckType.BACK, 0));
distanceToCover = info.overshoot;
anchor = info.pos;
if(i == 0) world.spawnParticle("reddust", next.xCoord, next.yCoord + 0.25, next.zCoord, 0, distanceToCover != 0 ? 0.5 : 0, 0);
else world.spawnParticle("reddust", next.xCoord, next.yCoord + 0.25, next.zCoord, 0, distanceToCover != 0 ? 0.5 : 0, 1);
double deltaX = next.xCoord - prev.xCoord;
double deltaZ = next.zCoord - prev.zCoord;
double radians = -Math.atan2(deltaX, deltaZ);
yaw = (float) MathHelper.wrapAngleTo180_double(radians * 180D / Math.PI + (flip ? 180 : 0));
text.add(it + ": " + yaw);
} else {
break;
}
} while(distanceToCover != 0);
ILookOverlay.printGeneric(event, "DEBUG", 0xffff00, 0x4040000, text);
}*/
}
/// HANLDE ANIMATION BUSES ///
for(int i = 0; i < HbmAnimations.hotbar.length; i++) {
for(int j = 0; j < HbmAnimations.hotbar[i].length; j++) {
Animation animation = HbmAnimations.hotbar[i][j];
if(animation == null)
continue;
if(animation.holdLastFrame)
continue;
long time = Clock.get_ms() - animation.startMillis;
if(time > animation.animation.getDuration())
HbmAnimations.hotbar[i][j] = null;
}
}
if(!ducked && Keyboard.isKeyDown(Keyboard.KEY_O) && Minecraft.getMinecraft().currentScreen == null) {
ducked = true;
PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(0, 0, 0, 999, 0));
}
/// HANDLE SCOPE OVERLAY ///
ItemStack held = player.getHeldItem();
if(held != null && held.getItem() instanceof ItemGunBaseNT && ItemGunBaseNT.aimingProgress == ItemGunBaseNT.prevAimingProgress && ItemGunBaseNT.aimingProgress == 1F && event.type == event.type.HOTBAR) {
ItemGunBaseNT gun = (ItemGunBaseNT) held.getItem();
GunConfig cfg = gun.getConfig(held, 0);
if(cfg.getScopeTexture(held) != null) {
ScaledResolution resolution = event.resolution;
RenderScreenOverlay.renderScope(resolution, cfg.getScopeTexture(held));
}
}
//prevents NBT changes (read: every fucking tick) on guns from bringing up the item's name over the hotbar
if(held != null && held.getItem() instanceof ItemGunBaseNT && Minecraft.getMinecraft().ingameGUI.highlightingItemStack != null && Minecraft.getMinecraft().ingameGUI.highlightingItemStack.getItem() == held.getItem()) {
Minecraft.getMinecraft().ingameGUI.highlightingItemStack = held;
}
/// HANDLE FSB HUD ///
ItemStack helmet = player.inventory.armorInventory[3];
if(helmet != null && helmet.getItem() instanceof ArmorFSB) {
((ArmorFSB)helmet.getItem()).handleOverlay(event, player);
}
if(!event.isCanceled() && event.type == event.type.HOTBAR) {
HbmPlayerProps props = HbmPlayerProps.getData(player);
if(props.getDashCount() > 0) {
RenderScreenOverlay.renderDashBar(event.resolution, Minecraft.getMinecraft().ingameGUI, props);
}
}
}
@SubscribeEvent(receiveCanceled = true)
public void onHUDRenderShield(RenderGameOverlayEvent.Pre event) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if(event.type == event.type.ARMOR) {
HbmPlayerProps props = HbmPlayerProps.getData(player);
if(props.getEffectiveMaxShield() > 0) {
RenderScreenOverlay.renderShieldBar(event.resolution, Minecraft.getMinecraft().ingameGUI);
}
}
}
@SubscribeEvent(receiveCanceled = true, priority = EventPriority.LOW)
public void onHUDRenderBar(RenderGameOverlayEvent.Post event) {
/// HANDLE ELECTRIC FSB HUD ///
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
Tessellator tess = Tessellator.instance;
if(event.type == event.type.ARMOR) {
if(ForgeHooks.getTotalArmorValue(player) == 0) {
GuiIngameForge.left_height -= 10;
}
int width = event.resolution.getScaledWidth();
int height = event.resolution.getScaledHeight();
int left = width / 2 - 91;
if(ArmorFSB.hasFSBArmorIgnoreCharge(player)) {
ArmorFSB chestplate = (ArmorFSB) player.inventory.armorInventory[2].getItem();
boolean noHelmet = chestplate.noHelmet;
GL11.glDisable(GL11.GL_TEXTURE_2D);
tess.startDrawingQuads();
for(int i = 0; i < (noHelmet ? 3 : 4); i++) {
int top = height - GuiIngameForge.left_height + 7;
ItemStack stack = player.inventory.armorInventory[i];
if(!(stack != null && stack.getItem() instanceof ArmorFSBPowered))
break;
float tot = 1F - (float) ((ArmorFSBPowered) stack.getItem()).getDurabilityForDisplay(stack);
tess.setColorOpaque_F(0.25F, 0.25F, 0.25F);
tess.addVertex(left - 0.5, top - 0.5, 0);
tess.addVertex(left - 0.5, top + 1.5, 0);
tess.addVertex(left + 81.5, top + 1.5, 0);
tess.addVertex(left + 81.5, top - 0.5, 0);
tess.setColorOpaque_F(1F - tot, tot, 0F);
tess.addVertex(left, top, 0);
tess.addVertex(left, top + 1, 0);
tess.addVertex(left + 81 * tot, top + 1, 0);
tess.addVertex(left + 81 * tot, top, 0);
GuiIngameForge.left_height += 3;
}
tess.draw();
GL11.glEnable(GL11.GL_TEXTURE_2D);
} else if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof JetpackFueledBase) {
ItemStack stack = player.inventory.armorInventory[2];
float tot = (float) ((JetpackFueledBase) stack.getItem()).getFuel(stack) / (float) ((JetpackFueledBase) stack.getItem()).getMaxFill(stack);
int top = height - GuiIngameForge.left_height + 3;
GL11.glDisable(GL11.GL_TEXTURE_2D);
tess.startDrawingQuads();
tess.setColorOpaque_F(0.25F, 0.25F, 0.25F);
tess.addVertex(left - 0.5, top - 0.5, 0);
tess.addVertex(left - 0.5, top + 4.5, 0);
tess.addVertex(left + 81.5, top + 4.5, 0);
tess.addVertex(left + 81.5, top - 0.5, 0);
tess.setColorOpaque_F(1F - tot, tot, 0F);
tess.addVertex(left, top, 0);
tess.addVertex(left, top + 4, 0);
tess.addVertex(left + 81 * tot, top + 4, 0);
tess.addVertex(left + 81 * tot, top, 0);
tess.draw();
GL11.glEnable(GL11.GL_TEXTURE_2D);
}
}
}
@SubscribeEvent
public void setupFOV(FOVUpdateEvent event) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
ItemStack held = player.getHeldItem();
if(held == null) return;
IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(held, IItemRenderer.ItemRenderType.EQUIPPED);
if(!(customRenderer instanceof ItemRenderWeaponBase)) return;
ItemRenderWeaponBase renderGun = (ItemRenderWeaponBase) customRenderer;
event.newfov = renderGun.getViewFOV(held, event.fov);
}
public static boolean ducked = false;
@SubscribeEvent
public void preRenderEvent(RenderPlayerEvent.Pre event) {
RenderPlayer renderer = event.renderer;
AbstractClientPlayer player = (AbstractClientPlayer)event.entityPlayer;
PotionEffect invis = player.getActivePotionEffect(Potion.invisibility);
if(invis != null && invis.getAmplifier() > 0)
event.setCanceled(true);
if(player.getDisplayName().toLowerCase(Locale.US).equals("martmn")) {
event.setCanceled(true);
float pX = (float) (player.prevPosX + (player.posX - player.prevPosX) * (double)event.partialRenderTick);
float pY = (float) (player.prevPosY + (player.posY - player.prevPosY) * (double)event.partialRenderTick);
float pZ = (float) (player.prevPosZ + (player.posZ - player.prevPosZ) * (double)event.partialRenderTick);
EntityPlayer me = Minecraft.getMinecraft().thePlayer;
float mX = (float) (me.prevPosX + (me.posX - me.prevPosX) * (double)event.partialRenderTick);
float mY = (float) (me.prevPosY + (me.posY - me.prevPosY) * (double)event.partialRenderTick);
float mZ = (float) (me.prevPosZ + (me.posZ - me.prevPosZ) * (double)event.partialRenderTick);
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID + ":textures/particle/fart.png"));
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glTranslatef(pX - mX, pY - mY + 0.75F - (float)player.getYOffset(), pZ - mZ);
GL11.glRotatef(-me.rotationYaw, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(me.rotationPitch, 1.0F, 0.0F, 0.0F);
Tessellator t = Tessellator.instance;
t.startDrawingQuads();
t.setBrightness(240);
t.addVertexWithUV(-1, 1, 0, 0, 0);
t.addVertexWithUV(1, 1, 0, 1, 0);
t.addVertexWithUV(1, -1, 0, 1, 1);
t.addVertexWithUV(-1, -1, 0, 0, 1);
t.draw();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopMatrix();
}
ResourceLocation cloak = RenderAccessoryUtility.getCloakFromPlayer(player);
if(cloak != null)
player.func_152121_a(Type.CAPE, cloak);
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof IHoldableWeapon) {
renderer.modelBipedMain.aimedBow = true;
renderer.modelArmor.aimedBow = true;
renderer.modelArmorChestplate.aimedBow = true;
}
}
@SubscribeEvent
public void onRenderArmorEvent(RenderPlayerEvent.SetArmorModel event) {
EntityPlayer player = event.entityPlayer;
for(int i = 0; i < 4; i++) {
ItemStack armor = player.getCurrentArmor(i);
if(armor != null && ArmorModHandler.hasMods(armor)) {
for(ItemStack mod : ArmorModHandler.pryMods(armor)) {
if(mod != null && mod.getItem() instanceof ItemArmorMod) {
((ItemArmorMod)mod.getItem()).modRender(event, armor);
}
}
}
//because armor that isn't ItemArmor doesn't render at all
if(armor != null && armor.getItem() instanceof JetpackBase) {
((ItemArmorMod)armor.getItem()).modRender(event, armor);
}
}
if(player.getCurrentArmor(2) == null && !player.isPotionActive(Potion.invisibility)) {
if(player.getUniqueID().toString().equals(ShadyUtil.HbMinecraft) || player.getDisplayName().equals("HbMinecraft")) RenderAccessoryUtility.renderWings(event, 2);
if(player.getUniqueID().toString().equals(ShadyUtil.the_NCR) || player.getDisplayName().equals("the_NCR")) RenderAccessoryUtility.renderWings(event, 3);
if(player.getUniqueID().toString().equals(ShadyUtil.Barnaby99_x) || player.getDisplayName().equals("pheo7")) RenderAccessoryUtility.renderAxePack(event);
if(player.getUniqueID().toString().equals(ShadyUtil.LePeeperSauvage) || player.getDisplayName().equals("LePeeperSauvage")) RenderAccessoryUtility.renderFaggot(event);
}
}
@Spaghetti("please get this shit out of my face")
@SubscribeEvent
public void onPlaySound(PlaySoundEvent17 e) {
EntityPlayer player = MainRegistry.proxy.me();
Minecraft mc = Minecraft.getMinecraft();
if(player != null && mc.theWorld != null) {
int i = MathHelper.floor_double(player.posX);
int j = MathHelper.floor_double(player.posY);
int k = MathHelper.floor_double(player.posZ);
Block block = mc.theWorld.getBlock(i, j, k);
if(block == ModBlocks.vacuum) {
e.result = null;
return;
}
}
ResourceLocation r = e.sound.getPositionedSoundLocation();
WorldClient wc = mc.theWorld;
//Alright, alright, I give the fuck up, you've wasted my time enough with this bullshit. You win.
//A winner is you.
//Conglaturations.
//Fuck you.
if(r.toString().equals("hbm:misc.nullChopper") && Library.getClosestChopperForSound(wc, e.sound.getXPosF(), e.sound.getYPosF(), e.sound.getZPosF(), 2) != null)
{
EntityHunterChopper ent = Library.getClosestChopperForSound(wc, e.sound.getXPosF(), e.sound.getYPosF(), e.sound.getZPosF(), 2);
if(MovingSoundPlayerLoop.getSoundByPlayer(ent, EnumHbmSound.soundChopperLoop) == null) {
MovingSoundPlayerLoop.globalSoundList.add(new MovingSoundChopper(new ResourceLocation("hbm:entity.chopperFlyingLoop"), ent, EnumHbmSound.soundChopperLoop));
MovingSoundPlayerLoop.getSoundByPlayer(ent, EnumHbmSound.soundChopperLoop).setVolume(10.0F);
}
}
if(r.toString().equals("hbm:misc.nullCrashing") && Library.getClosestChopperForSound(wc, e.sound.getXPosF(), e.sound.getYPosF(), e.sound.getZPosF(), 2) != null)
{
EntityHunterChopper ent = Library.getClosestChopperForSound(wc, e.sound.getXPosF(), e.sound.getYPosF(), e.sound.getZPosF(), 2);
if(MovingSoundPlayerLoop.getSoundByPlayer(ent, EnumHbmSound.soundCrashingLoop) == null) {
MovingSoundPlayerLoop.globalSoundList.add(new MovingSoundCrashing(new ResourceLocation("hbm:entity.chopperCrashingLoop"), ent, EnumHbmSound.soundCrashingLoop));
MovingSoundPlayerLoop.getSoundByPlayer(ent, EnumHbmSound.soundCrashingLoop).setVolume(10.0F);
}
}
if(r.toString().equals("hbm:misc.nullMine") && Library.getClosestMineForSound(wc, e.sound.getXPosF(), e.sound.getYPosF(), e.sound.getZPosF(), 2) != null)
{
EntityChopperMine ent = Library.getClosestMineForSound(wc, e.sound.getXPosF(), e.sound.getYPosF(), e.sound.getZPosF(), 2);
if(MovingSoundPlayerLoop.getSoundByPlayer(ent, EnumHbmSound.soundMineLoop) == null) {
MovingSoundPlayerLoop.globalSoundList.add(new MovingSoundChopperMine(new ResourceLocation("hbm:entity.chopperMineLoop"), ent, EnumHbmSound.soundMineLoop));
MovingSoundPlayerLoop.getSoundByPlayer(ent, EnumHbmSound.soundMineLoop).setVolume(10.0F);
}
}
for(MovingSoundPlayerLoop sounds : MovingSoundPlayerLoop.globalSoundList)
{
if(!sounds.init || sounds.isDonePlaying()) {
sounds.init = true;
sounds.setDone(false);
mc.getSoundHandler().playSound(sounds);
}
}
}
@SubscribeEvent
public void drawTooltip(ItemTooltipEvent event) {
ItemStack stack = event.itemStack;
List<String> list = event.toolTip;
/// DAMAGE RESISTANCE ///
DamageResistanceHandler.addInfo(stack, list);
/// HAZMAT INFO ///
List<HazardClass> hazInfo = ArmorRegistry.hazardClasses.get(stack.getItem());
if(hazInfo != null) {
if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hazard.prot"));
for(HazardClass clazz : hazInfo) {
list.add(EnumChatFormatting.YELLOW + " " + I18nUtil.resolveKey(clazz.lang));
}
} else {
list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" +
EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" +
EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC + "> to display protection info");
}
}
/// CLADDING (LEGACY) ///
double rad = HazmatRegistry.getResistance(stack);
rad = ((int)(rad * 1000)) / 1000D;
if(rad > 0) list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.radResistance", rad));
/// ARMOR MODS ///
if(stack.getItem() instanceof ItemArmor && ArmorModHandler.hasMods(stack)) {
if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && !(Minecraft.getMinecraft().currentScreen instanceof GUIArmorTable)) {
list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" +
EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" +
EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC + "> to display installed armor mods");
} else {
list.add(EnumChatFormatting.YELLOW + "Mods:");
ItemStack[] mods = ArmorModHandler.pryMods(stack);
for(int i = 0; i < 8; i++) {
if(mods[i] != null && mods[i].getItem() instanceof ItemArmorMod) {
((ItemArmorMod)mods[i].getItem()).addDesc(list, mods[i], stack);
}
}
}
}
/// HAZARDS ///
HazardSystem.addFullTooltip(stack, event.entityPlayer, list);
if(event.showAdvancedItemTooltips && ClientConfig.ITEM_TOOLTIP_SHOW_OREDICT.get()) {
List<String> names = ItemStackUtil.getOreDictNames(stack);
if(names.size() > 0) {
list.add(EnumChatFormatting.BLUE + "Ore Dict:");
for(String s : names) {
list.add(EnumChatFormatting.AQUA + " -" + s);
}
}
}
/// CUSTOM NUKE ///
ComparableStack comp = new ComparableStack(stack).makeSingular();
if(ClientConfig.ITEM_TOOLTIP_SHOW_CUSTOM_NUKE.get()) {
CustomNukeEntry entry = TileEntityNukeCustom.entries.get(comp);
if(entry != null) {
if(!list.isEmpty())
list.add("");
if(entry.entry == EnumEntryType.ADD)
list.add(EnumChatFormatting.GOLD + "Adds " + entry.value + " to the custom nuke stage " + entry.type);
if(entry.entry == EnumEntryType.MULT)
list.add(EnumChatFormatting.GOLD + "Adds multiplier " + entry.value + " to the custom nuke stage " + entry.type);
}
}
try {
CanneryBase cannery = Jars.canneries.get(comp);
if(cannery != null) {
list.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey("cannery.f1"));
lastCannery = comp;
canneryTimestamp = Clock.get_ms();
}
} catch(Exception ex) {
list.add(EnumChatFormatting.RED + "Error loading cannery: " + ex.getLocalizedMessage());
}
/*ItemStack copy = stack.copy();
List<MaterialStack> materials = Mats.getMaterialsFromItem(copy);
if(!materials.isEmpty()) {
for(MaterialStack mat : materials) {
list.add(EnumChatFormatting.DARK_PURPLE + mat.material.names[0] + ": " + Mats.formatAmount(mat.amount * stack.stackSize));
}
}*/
}
private static long canneryTimestamp;
private static ComparableStack lastCannery = null;
private ResourceLocation ashes = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_ash.png");
@SideOnly(Side.CLIENT)
//@SubscribeEvent
public void onRenderStorm(RenderHandEvent event) {
if(BlockAshes.ashes == 0)
return;
GL11.glPushMatrix();
Minecraft mc = Minecraft.getMinecraft();
GL11.glRotatef((float)-mc.thePlayer.rotationYaw, 0, 1, 0);
GL11.glRotatef((float)(mc.thePlayer.rotationPitch), 1, 0, 0);
ScaledResolution resolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glEnable(GL11.GL_ALPHA_TEST);
int w = resolution.getScaledWidth();
int h = resolution.getScaledHeight();
double off = Clock.get_ms() / -10000D % 10000D;
double aw = 25;
Tessellator tessellator = Tessellator.instance;
//int d = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(mc.thePlayer.posX), MathHelper.floor_double(mc.thePlayer.posY), MathHelper.floor_double(mc.thePlayer.posZ), 0);
int cX = currentBrightness % 65536;
int cY = currentBrightness / 65536;
int lX = lastBrightness % 65536;
int lY = lastBrightness / 65536;
float interp = (mc.theWorld.getTotalWorldTime() % 20) * 0.05F;
if(mc.theWorld.getTotalWorldTime() == 1)
lastBrightness = currentBrightness;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)(lX + (cX - lX) * interp) / 1.0F, (float)(lY + (cY - lY) * interp) / 1.0F);
mc.entityRenderer.enableLightmap((double)event.partialTicks);
mc.getTextureManager().bindTexture(ashes);
for(int i = 1; i < 3; i++) {
GL11.glRotatef(-15, 0, 0, 1);
GL11.glColor4f(1.0F, 1.0F, 1.0F, BlockAshes.ashes / 256F * 0.98F / i);
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(-w * 0.25, h * 0.25, aw, 0.0D + off * i, 1.0D);
tessellator.addVertexWithUV(w * 0.25, h * 0.25, aw, 1.0D + off * i, 1.0D);
tessellator.addVertexWithUV(w * 0.25, -h * 0.25, aw, 1.0D + off * i, 0.0D);
tessellator.addVertexWithUV(-w * 0.25, -h * 0.25, aw, 0.0D + off * i, 0.0D);
tessellator.draw();
}
mc.entityRenderer.disableLightmap((double)event.partialTicks);
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_BLEND);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
public static int currentBrightness = 0;
public static int lastBrightness = 0;
static boolean isRenderingItems = false;
@SubscribeEvent
public void clientTick(ClientTickEvent event) {
Minecraft mc = Minecraft.getMinecraft();
ArmorNo9.updateWorldHook(mc.theWorld);
boolean supportsHighRenderDistance = FMLClientHandler.instance().hasOptifine() || Loader.isModLoaded("angelica");
if(mc.gameSettings.renderDistanceChunks > 16 && GeneralConfig.enableRenderDistCheck && !supportsHighRenderDistance) {
mc.gameSettings.renderDistanceChunks = 16;
LoggingUtil.errorWithHighlight("========================== WARNING ==========================");
LoggingUtil.errorWithHighlight("Dangerous render distance detected: Values over 16 only work on 1.8+ or with Optifine/Angelica installed!!");
LoggingUtil.errorWithHighlight("Set '1.25_enableRenderDistCheck' in hbm.cfg to 'false' to disable this check.");
LoggingUtil.errorWithHighlight("========================== WARNING ==========================");
LoggingUtil.errorWithHighlight("If you got this error after removing Optifine/Angelica: Consider deleting your option files after removing mods.");
LoggingUtil.errorWithHighlight("If you got this error after downgrading your Minecraft version: Consider using a launcher that doesn't reuse the same folders for every game instance. MultiMC for example, it's really good and it comes with a dedicated cat button. You like cats, right? Are you using the Microsoft launcher? The one launcher that turns every version switch into a tightrope act because all the old config and options files are still here because different instances all use the same folder structure instead of different folders like a competent launcher would, because some MO-RON thought that this was an acceptable way of doing things? Really? The launcher that circumcises every crashlog into indecipherable garbage, tricking oblivious people into posting that as a \"crash report\", effectively wasting everyone's time? The launcher made by the company that thought it would be HI-LA-RI-OUS to force everyone to use Microsoft accounts, effectively breaking every other launcher until they implement their terrible auth system?");
LoggingUtil.errorWithHighlight("========================== WARNING ==========================");
}
if(mc.theWorld == null || mc.thePlayer == null)
return;
if(event.phase == Phase.START && event.side == Side.CLIENT) {
if(BlockAshes.ashes > 256) BlockAshes.ashes = 256;
if(BlockAshes.ashes > 0) BlockAshes.ashes -= 2;
if(BlockAshes.ashes < 0) BlockAshes.ashes = 0;
if(mc.theWorld.getTotalWorldTime() % 20 == 0) {
this.lastBrightness = this.currentBrightness;
currentBrightness = mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(mc.thePlayer.posX), MathHelper.floor_double(mc.thePlayer.posY), MathHelper.floor_double(mc.thePlayer.posZ), 0);
}
if(ArmorUtil.isWearingEmptyMask(mc.thePlayer)) {
MainRegistry.proxy.displayTooltip(EnumChatFormatting.RED + "Your mask has no filter!", MainRegistry.proxy.ID_FILTER);
}
}
if(Keyboard.isKeyDown(Keyboard.KEY_F1) && Minecraft.getMinecraft().currentScreen != null) {
ComparableStack comp = canneryTimestamp > Clock.get_ms() - 100 ? lastCannery : null;
if(comp == null) {
ItemStack stack = getMouseOverStack();
if(stack != null) comp = new ComparableStack(stack).makeSingular();
}
if(comp != null) {
CanneryBase cannery = Jars.canneries.get(comp);
if(cannery != null) {
Minecraft.getMinecraft().thePlayer.closeScreen();
FMLCommonHandler.instance().showGuiScreen(new GuiWorldInAJar(cannery.createScript(), cannery.getName(), cannery.getIcon(), cannery.seeAlso()));
}
}
}
if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && Keyboard.isKeyDown(Keyboard.KEY_LMENU)) {
ItemStack stack = getMouseOverStack();
if(stack != null) {
stack = stack.copy();
stack.stackSize = 1;
Minecraft.getMinecraft().thePlayer.closeScreen();
FMLCommonHandler.instance().showGuiScreen(new GUIScreenPreview(stack));
}
}
if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && Keyboard.isKeyDown(Keyboard.KEY_0) && Keyboard.isKeyDown(Keyboard.KEY_1)) {
if (!isRenderingItems) {
isRenderingItems = true;
MainRegistry.logger.info("Taking a screenshot of ALL items, if you did this by mistake: fucking lmao get rekt nerd");
List<Item> ignoredItems = Arrays.asList(
ModItems.assembly_template,
ModItems.crucible_template,
ModItems.chemistry_template,
ModItems.chemistry_icon,
ModItems.achievement_icon,
Items.spawn_egg,
Item.getItemFromBlock(Blocks.mob_spawner)
);
List<Class<? extends Item>> collapsedClasses = Arrays.asList(
ItemRBMKPellet.class,
ItemDepletedFuel.class,
ItemFluidDuct.class
);
String prefix = "Slot ";
//int gunScale = 8;
int slotScale = 1;
boolean ignoreNonNTM = true;
boolean onlyGuns = true;
List<ItemStack> stacks = new ArrayList<ItemStack>();
for (Object reg : Item.itemRegistry) {
Item item = (Item) reg;
if(ignoreNonNTM && !Item.itemRegistry.getNameForObject(item).startsWith("hbm:")) continue;
if(ignoredItems.contains(item)) continue;
if(onlyGuns && !(item instanceof ItemGunBaseNT)) continue;
if(collapsedClasses.contains(item.getClass())) {
stacks.add(new ItemStack(item));
} else {
item.getSubItems(item, null, stacks);
}
}
Minecraft.getMinecraft().thePlayer.closeScreen();
FMLCommonHandler.instance().showGuiScreen(new GUIScreenWikiRender(stacks.toArray(new ItemStack[0]), prefix, "wiki-block-renders-256", slotScale));
}
} else {
isRenderingItems = false;
}
EntityPlayer player = mc.thePlayer;
if(event.phase == Phase.START) {
float discriminator = 0.003F;
float defaultStepSize = 0.5F;
int newStepSize = 0;
if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof ArmorFSB) {
ArmorFSB plate = (ArmorFSB) player.inventory.armorInventory[2].getItem();
if(plate.hasFSBArmor(player)) newStepSize = plate.stepSize;
}
if(newStepSize > 0) {
player.stepHeight = newStepSize + discriminator;
} else {
for(int i = 1; i < 4; i++) if(player.stepHeight == i + discriminator) player.stepHeight = defaultStepSize;
}
}
if(event.phase == Phase.END) {
if(ClientConfig.GUN_VISUAL_RECOIL.get()) {
ItemGunBaseNT.offsetVertical += ItemGunBaseNT.recoilVertical;
ItemGunBaseNT.offsetHorizontal += ItemGunBaseNT.recoilHorizontal;
player.rotationPitch -= ItemGunBaseNT.recoilVertical;
player.rotationYaw -= ItemGunBaseNT.recoilHorizontal;
ItemGunBaseNT.recoilVertical *= ItemGunBaseNT.recoilDecay;
ItemGunBaseNT.recoilHorizontal *= ItemGunBaseNT.recoilDecay;
float dV = ItemGunBaseNT.offsetVertical * ItemGunBaseNT.recoilRebound;
float dH = ItemGunBaseNT.offsetHorizontal * ItemGunBaseNT.recoilRebound;
ItemGunBaseNT.offsetVertical -= dV;
ItemGunBaseNT.offsetHorizontal -= dH;
player.rotationPitch += dV;
player.rotationYaw += dH;
} else {
ItemGunBaseNT.offsetVertical = 0;
ItemGunBaseNT.offsetHorizontal = 0;
ItemGunBaseNT.recoilVertical = 0;
ItemGunBaseNT.recoilHorizontal = 0;
}
}
}
public static ItemStack getMouseOverStack() {
Minecraft mc = Minecraft.getMinecraft();
if(mc.currentScreen instanceof GuiContainer) {
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
int width = scaledresolution.getScaledWidth();
int height = scaledresolution.getScaledHeight();
int mouseX = Mouse.getX() * width / mc.displayWidth;
int mouseY = height - Mouse.getY() * height / mc.displayHeight - 1;
GuiContainer container = (GuiContainer) mc.currentScreen;
for(Object o : container.inventorySlots.inventorySlots) {
Slot slot = (Slot) o;
if(slot.getHasStack()) {
try {
Method isMouseOverSlot = ReflectionHelper.findMethod(GuiContainer.class, container, new String[] {"func_146981_a", "isMouseOverSlot"}, Slot.class, int.class, int.class);
if((boolean) isMouseOverSlot.invoke(container, slot, mouseX, mouseY)) {
return slot.getStack();
}
} catch(Exception ex) { }
}
}
}
return null;
}
public static boolean renderLodeStar = false;
public static long lastStarCheck = 0L;
@SideOnly(Side.CLIENT)
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onClientTickLast(ClientTickEvent event) {
if(event.phase == Phase.START && GeneralConfig.enableSkyboxes) {
World world = Minecraft.getMinecraft().theWorld;
if(world == null) return;
IRenderHandler sky = world.provider.getSkyRenderer();
if(world.provider instanceof WorldProviderSurface) {
if(ImpactWorldHandler.getDustForClient(world) > 0 || ImpactWorldHandler.getFireForClient(world) > 0) {
//using a chainloader isn't necessary since none of the sky effects should render anyway
if(!(sky instanceof RenderNTMSkyboxImpact)) {
world.provider.setSkyRenderer(new RenderNTMSkyboxImpact());
return;
}
}
}
if(world.provider.dimensionId == 0) {
if(!(sky instanceof RenderNTMSkyboxChainloader)) {
world.provider.setSkyRenderer(new RenderNTMSkyboxChainloader(sky));
}
}
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
long millis = Clock.get_ms();
if(lastStarCheck + 200 < millis) {
renderLodeStar = false;
lastStarCheck = millis;
if(player != null) {
Vec3NT pos = new Vec3NT(player.posX, player.posY, player.posZ);
Vec3NT lodestarHeading = new Vec3NT(0, 0, -1D).rotateAroundXDeg(-15).multiply(25);
Vec3NT nextPos = new Vec3NT(pos).add(lodestarHeading.xCoord,lodestarHeading.yCoord, lodestarHeading.zCoord);
MovingObjectPosition mop = world.func_147447_a(pos, nextPos, false, true, false);
if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK && world.getBlock(mop.blockX, mop.blockY, mop.blockZ) == ModBlocks.glass_polarized) {
renderLodeStar = true;
}
}
}
}
// ???
/*if(event.phase == Phase.START) {
Minecraft mc = Minecraft.getMinecraft();
if(mc.currentScreen != null && mc.currentScreen.allowUserInput) {
HbmPlayerProps props = HbmPlayerProps.getData(MainRegistry.proxy.me());
for(EnumKeybind key : EnumKeybind.values()) {
boolean last = props.getKeyPressed(key);
if(last) {
PacketDispatcher.wrapper.sendToServer(new KeybindPacket(key, !last));
props.setKeyPressed(key, !last);
}
}
}
}*/
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onPlayerTick(TickEvent.PlayerTickEvent event) {
EntityPlayer player = event.player;
int x = MathHelper.floor_double(player.posX);
int y = MathHelper.floor_double(player.posY);
int z = MathHelper.floor_double(player.posZ);
Block b = player.worldObj.getBlock(x, y, z);
// Support climbing freestanding vines and chains using spacebar
if (
b.isLadder(player.worldObj, x, y, z, player) &&
b.getCollisionBoundingBoxFromPool(player.worldObj, x, y, z) == null &&
!player.capabilities.isFlying &&
GameSettings.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindJump) &&
player.motionY < 0.15
) {
player.motionY = 0.15;
}
}
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onRenderWorldLastEvent(RenderWorldLastEvent event) {
Clock.update();
GL11.glPushMatrix();
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
double dx = player.prevPosX + (player.posX - player.prevPosX) * event.partialTicks;
double dy = player.prevPosY + (player.posY - player.prevPosY) * event.partialTicks;
double dz = player.prevPosZ + (player.posZ - player.prevPosZ) * event.partialTicks;
int dist = 300;
int x = 0;
int y = 500;
int z = 0;
Vec3 vec = Vec3.createVectorHelper(x - dx, y - dy, z - dz);
if(player.worldObj.provider.dimensionId == 0 && vec.lengthVector() < dist && !HTTPHandler.capsule.isEmpty()) {
GL11.glTranslated(vec.xCoord, vec.yCoord, vec.zCoord);
GL11.glPushMatrix();
RenderHelper.enableStandardItemLighting();
GL11.glRotated(80, 0, 0, 1);
GL11.glRotated(30, 0, 1, 0);
double sine = Math.sin(Clock.get_ms() * 0.0005) * 5;
double sin3 = Math.sin(Clock.get_ms() * 0.0005 + Math.PI * 0.5) * 5;
GL11.glRotated(sine, 0, 0, 1);
GL11.glRotated(sin3, 1, 0, 0);
GL11.glTranslated(0, -3, 0);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 6500F, 30F);
SoyuzPronter.prontCapsule();
GL11.glRotated(Clock.get_ms() * 0.025 % 360, 0, -1, 0);
int rand = new Random(MainRegistry.startupTime).nextInt(HTTPHandler.capsule.size());
String msg = HTTPHandler.capsule.get(rand);
GL11.glTranslated(0, 3.75, 0);
GL11.glRotated(180, 1, 0, 0);
float rot = 0F;
// looks dumb but we'll use this technology for the cyclotron
for(char c : msg.toCharArray()) {
GL11.glPushMatrix();
GL11.glRotatef(rot, 0, 1, 0);
float width = Minecraft.getMinecraft().fontRenderer.getStringWidth(msg);
float scale = 5 / width;
rot -= Minecraft.getMinecraft().fontRenderer.getCharWidth(c) * scale * 50;
GL11.glTranslated(2, 0, 0);
GL11.glRotatef(-90, 0, 1, 0);
GL11.glScalef(scale, scale, scale);
GL11.glDisable(GL11.GL_CULL_FACE);
Minecraft.getMinecraft().fontRenderer.drawString(String.valueOf(c), 0, 0, 0xff00ff);
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glPopMatrix();
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
RenderHelper.disableStandardItemLighting();
GL11.glPopMatrix();
}
GL11.glPopMatrix();
boolean hudOn = HbmPlayerProps.getData(player).enableHUD;
if(hudOn) {
RenderOverhead.renderMarkers(event.partialTicks);
boolean thermalSights = false;
if(ArmorFSB.hasFSBArmor(player)) {
ItemStack plate = player.inventory.armorInventory[2];
ArmorFSB chestplate = (ArmorFSB) plate.getItem();
if(chestplate.thermal) thermalSights = true;
}
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT && ItemGunBaseNT.aimingProgress == 1) {
ItemGunBaseNT gun = (ItemGunBaseNT) player.getHeldItem().getItem();
for(int i = 0; i < gun.getConfigCount(); i++) if(gun.getConfig(player.getHeldItem(), i).hasThermalSights(player.getHeldItem())) thermalSights = true;
}
if(thermalSights) RenderOverhead.renderThermalSight(event.partialTicks);
}
RenderOverhead.renderActionPreview(event.partialTicks);
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void preRenderEventFirst(RenderLivingEvent.Pre event) {
if(MainRegistry.proxy.isVanished(event.entity))
event.setCanceled(true);
}
@SubscribeEvent
public void preRenderEvent(RenderLivingEvent.Pre event) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if(ArmorFSB.hasFSBArmor(player) && HbmPlayerProps.getData(player).enableHUD) {
ItemStack plate = player.inventory.armorInventory[2];
ArmorFSB chestplate = (ArmorFSB)plate.getItem();
if(chestplate.vats) {
int count = (int)Math.min(event.entity.getMaxHealth(), 100);
int bars = (int)Math.ceil(event.entity.getHealth() * count / event.entity.getMaxHealth());
String bar = EnumChatFormatting.RED + "";
for(int i = 0; i < count; i++) {
if(i == bars)
bar += EnumChatFormatting.RESET + "";
bar += "|";
}
RenderOverhead.renderTag(event.entity, event.x, event.y, event.z, event.renderer, bar, chestplate.thermal);
}
}
}
public static IIcon particleBase;
public static IIcon particleLeaf;
public static IIcon particleSplash;
public static IIcon particleAshes;
@SubscribeEvent
public void onTextureStitch(TextureStitchEvent.Pre event) {
if(event.map.getTextureType() == 0) {
particleBase = event.map.registerIcon(RefStrings.MODID + ":particle/particle_base");
particleLeaf = event.map.registerIcon(RefStrings.MODID + ":particle/dead_leaf");
particleSplash = event.map.registerIcon(RefStrings.MODID + ":particle/particle_splash");
particleAshes = event.map.registerIcon(RefStrings.MODID + ":particle/particle_ashes");
}
}
@SubscribeEvent
public void postTextureStitch(TextureStitchEvent.Post event) {
CTStitchReceiver.receivers.forEach(x -> x.postStitch());
}
private static final ResourceLocation poster = new ResourceLocation(RefStrings.MODID + ":textures/models/misc/poster.png");
private static final ResourceLocation poster_cat = new ResourceLocation(RefStrings.MODID + ":textures/models/misc/poster_cat.png");
@SubscribeEvent
public void renderFrame(RenderItemInFrameEvent event) {
if(event.item != null && event.item.getItem() == ModItems.flame_pony) {
event.setCanceled(true);
double p = 0.0625D;
double o = p * 2.75D;
GL11.glDisable(GL11.GL_LIGHTING);
Minecraft.getMinecraft().renderEngine.bindTexture(poster);
Tessellator tess = Tessellator.instance;
tess.startDrawingQuads();
tess.addVertexWithUV(0.5, 0.5 + o, p * 0.5, 1, 0);
tess.addVertexWithUV(-0.5, 0.5 + o, p * 0.5, 0, 0);
tess.addVertexWithUV(-0.5, -0.5 + o, p * 0.5, 0, 1);
tess.addVertexWithUV(0.5, -0.5 + o, p * 0.5, 1, 1);
tess.draw();
GL11.glEnable(GL11.GL_LIGHTING);
}
if(event.item != null && event.item.getItem() == Items.paper) {
event.setCanceled(true);
double p = 0.0625D;
double o = p * 2.75D;
GL11.glDisable(GL11.GL_LIGHTING);
Minecraft.getMinecraft().renderEngine.bindTexture(poster_cat);
Tessellator tess = Tessellator.instance;
tess.startDrawingQuads();
tess.addVertexWithUV(0.5, 0.5 + o, p * 0.5, 1, 0);
tess.addVertexWithUV(-0.5, 0.5 + o, p * 0.5, 0, 0);
tess.addVertexWithUV(-0.5, -0.5 + o, p * 0.5, 0, 1);
tess.addVertexWithUV(0.5, -0.5 + o, p * 0.5, 1, 1);
tess.draw();
GL11.glEnable(GL11.GL_LIGHTING);
}
}
@SubscribeEvent
public void worldTick(WorldTickEvent event) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if(player != null && player.ridingEntity instanceof EntityRailCarRidable && player instanceof EntityClientPlayerMP) {
EntityRailCarRidable train = (EntityRailCarRidable) player.ridingEntity;
EntityClientPlayerMP client = (EntityClientPlayerMP) player;
//mojank compensation, because apparently the "this makes the render work" method also determines the fucking input
if(!train.shouldRiderSit()) {
client.sendQueue.addToSendQueue(new C03PacketPlayer.C05PacketPlayerLook(client.rotationYaw, client.rotationPitch, client.onGround));
client.sendQueue.addToSendQueue(new C0CPacketInput(client.moveStrafing, client.moveForward, client.movementInput.jump, client.movementInput.sneak));
}
}
if(event.phase == event.phase.END) {
ItemCustomLore.updateSystem();
}
}
@SubscribeEvent
public void onOpenGUI(GuiOpenEvent event) {
if(event.gui instanceof GuiMainMenu && ClientConfig.MAIN_MENU_WACKY_SPLASHES.get()) {
GuiMainMenu main = (GuiMainMenu) event.gui;
int rand = (int)(Math.random() * 150);
switch(rand) {
case 0: main.splashText = "Floppenheimer!"; break;
case 1: main.splashText = "i should dip my balls in sulfuric acid"; break;
case 2: main.splashText = "All answers are popbob!"; break;
case 3: main.splashText = "None may enter The Orb!"; break;
case 4: main.splashText = "Wacarb was here"; break;
case 5: main.splashText = "SpongeBoy me Bob I am overdosing on keramine agagagagaga"; break;
case 6: main.splashText = EnumChatFormatting.RED + "I know where you live, " + System.getProperty("user.name"); break;
case 7: main.splashText = "Nice toes, now hand them over."; break;
case 8: main.splashText = "I smell burnt toast!"; break;
case 9: main.splashText = "There are bugs under your skin!"; break;
case 10: main.splashText = "Fentanyl!"; break;
case 11: main.splashText = "Do drugs!"; break;
case 12: main.splashText = "Imagine being scared by splash texts!"; break;
}
double d = Math.random();
if(d < 0.1) main.splashText = "Redditors aren't people!";
else if(d < 0.2) main.splashText = "Can someone tell me what corrosive fumes the people on Reddit are huffing so I can avoid those more effectively?";
}
}
}