From cf2bf0dc56c92d6964b827a4eb5a54b7d3c6586e Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sat, 8 Sep 2018 19:47:54 +0200 Subject: [PATCH] 2 new sirens, death ray visual effect, jetpacks now need kerosene --- assets/hbm/sounds.json | 4 +- assets/hbm/sounds/alarm/foKlaxonA.ogg | Bin 0 -> 15305 bytes assets/hbm/sounds/alarm/foKlaxonB.ogg | Bin 0 -> 17865 bytes com/hbm/entity/effect/EntityCloudFleija.java | 7 + .../effect/EntityCloudFleijaRainbow.java | 7 + .../entity/effect/EntityNukeCloudSmall.java | 7 + com/hbm/entity/logic/EntityDeathBlast.java | 59 +++++++++ com/hbm/inventory/FluidTank.java | 38 ++++++ com/hbm/items/gear/ArmorT45.java | 18 +-- com/hbm/items/gear/JetpackBooster.java | 35 ++++- com/hbm/items/gear/JetpackBreak.java | 33 ++++- com/hbm/items/gear/JetpackRegular.java | 32 ++++- com/hbm/items/gear/JetpackVectorized.java | 33 ++++- com/hbm/items/tool/ItemCassette.java | 2 + com/hbm/main/ClientProxy.java | 2 + com/hbm/main/MainRegistry.java | 2 + com/hbm/packet/SatLaserPacket.java | 9 +- com/hbm/render/entity/RenderDeathBlast.java | 120 ++++++++++++++++++ 18 files changed, 393 insertions(+), 15 deletions(-) create mode 100644 assets/hbm/sounds/alarm/foKlaxonA.ogg create mode 100644 assets/hbm/sounds/alarm/foKlaxonB.ogg create mode 100644 com/hbm/entity/logic/EntityDeathBlast.java create mode 100644 com/hbm/render/entity/RenderDeathBlast.java diff --git a/assets/hbm/sounds.json b/assets/hbm/sounds.json index aab905ea8..83693bb96 100644 --- a/assets/hbm/sounds.json +++ b/assets/hbm/sounds.json @@ -104,5 +104,7 @@ "alarm.blastDoorAlarm": {"category": "record", "sounds": [{"name": "alarm/blastDoorAlarm", "stream": false}]}, "alarm.klaxon": {"category": "record", "sounds": [{"name": "alarm/klaxon", "stream": false}]}, "alarm.striderSiren": {"category": "record", "sounds": [{"name": "alarm/striderSiren", "stream": false}]}, - "alarm.regularSiren": {"category": "record", "sounds": [{"name": "alarm/regularSiren", "stream": false}]} + "alarm.regularSiren": {"category": "record", "sounds": [{"name": "alarm/regularSiren", "stream": false}]}, + "alarm.foKlaxonA": {"category": "record", "sounds": [{"name": "alarm/foKlaxonA", "stream": false}]}, + "alarm.foKlaxonB": {"category": "record", "sounds": [{"name": "alarm/foKlaxonB", "stream": false}]} } diff --git a/assets/hbm/sounds/alarm/foKlaxonA.ogg b/assets/hbm/sounds/alarm/foKlaxonA.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e2471c001b5394507439aea4f6da734d15151b62 GIT binary patch literal 15305 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 YAJLouGm{C#GTjC)-jeKX&|Ta&g2Hda)WKM*dfE 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 Swhfm^GyZhxVwHzd2mS|^78~gR literal 0 HcmV?d00001 diff --git a/com/hbm/entity/effect/EntityCloudFleija.java b/com/hbm/entity/effect/EntityCloudFleija.java index 5962681a1..ec4a3f694 100644 --- a/com/hbm/entity/effect/EntityCloudFleija.java +++ b/com/hbm/entity/effect/EntityCloudFleija.java @@ -81,4 +81,11 @@ public class EntityCloudFleija extends Entity { public int getMaxAge() { return this.dataWatcher.getWatchableObjectInt(16); } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 25000; + } } diff --git a/com/hbm/entity/effect/EntityCloudFleijaRainbow.java b/com/hbm/entity/effect/EntityCloudFleijaRainbow.java index 9b23ae778..0bd74f21b 100644 --- a/com/hbm/entity/effect/EntityCloudFleijaRainbow.java +++ b/com/hbm/entity/effect/EntityCloudFleijaRainbow.java @@ -81,4 +81,11 @@ public class EntityCloudFleijaRainbow extends Entity { public int getMaxAge() { return this.dataWatcher.getWatchableObjectInt(16); } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 25000; + } } diff --git a/com/hbm/entity/effect/EntityNukeCloudSmall.java b/com/hbm/entity/effect/EntityNukeCloudSmall.java index 7444391a4..8ea634974 100644 --- a/com/hbm/entity/effect/EntityNukeCloudSmall.java +++ b/com/hbm/entity/effect/EntityNukeCloudSmall.java @@ -88,5 +88,12 @@ public class EntityNukeCloudSmall extends Entity { return cloud; } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 25000; + } } diff --git a/com/hbm/entity/logic/EntityDeathBlast.java b/com/hbm/entity/logic/EntityDeathBlast.java new file mode 100644 index 000000000..e9db9a631 --- /dev/null +++ b/com/hbm/entity/logic/EntityDeathBlast.java @@ -0,0 +1,59 @@ +package com.hbm.entity.logic; + +import com.hbm.explosion.ExplosionLarge; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.Entity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class EntityDeathBlast extends Entity { + + public static final int maxAge = 60; + + public EntityDeathBlast(World p_i1582_1_) { + super(p_i1582_1_); + this.ignoreFrustumCheck = true; + } + + @Override + protected void entityInit() { } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) { } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) { } + + @Override + public void onUpdate() { + + if(this.ticksExisted >= maxAge && !worldObj.isRemote) { + this.setDead(); + + ExplosionLarge.explodeFire(worldObj, posX, posY, posZ, 25, true, true, true); + } + } + + @Override + @SideOnly(Side.CLIENT) + public int getBrightnessForRender(float p_70070_1_) + { + return 15728880; + } + + @Override + public float getBrightness(float p_70013_1_) + { + return 1.0F; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 25000; + } + +} diff --git a/com/hbm/inventory/FluidTank.java b/com/hbm/inventory/FluidTank.java index 037126fa5..af5206ae5 100644 --- a/com/hbm/inventory/FluidTank.java +++ b/com/hbm/inventory/FluidTank.java @@ -5,6 +5,10 @@ import java.util.Arrays; import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.inventory.gui.GuiInfoContainer; import com.hbm.items.ModItems; +import com.hbm.items.gear.JetpackBooster; +import com.hbm.items.gear.JetpackBreak; +import com.hbm.items.gear.JetpackRegular; +import com.hbm.items.gear.JetpackVectorized; import com.hbm.items.tool.ItemFluidIdentifier; import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; @@ -108,6 +112,40 @@ public class FluidTank { ItemStack full = null; if(slots[in] != null) { + + for(int i = 0; i < 25; i++) { + if(slots[in].getItem() == ModItems.jetpack_boost && this.type.name().equals(FluidType.KEROSENE.name())) { + if(this.fluid > 0 && JetpackBooster.getFuel(slots[in]) < JetpackBooster.maxFuel) { + this.fluid--; + JetpackBooster.setFuel(slots[in], JetpackBooster.getFuel(slots[in]) + 1); + } else { + return; + } + } else if(slots[in].getItem() == ModItems.jetpack_break && this.type.name().equals(FluidType.KEROSENE.name())) { + if(this.fluid > 0 && JetpackBreak.getFuel(slots[in]) < JetpackBreak.maxFuel) { + this.fluid--; + JetpackBreak.setFuel(slots[in], JetpackBreak.getFuel(slots[in]) + 1); + } else { + return; + } + } else if(slots[in].getItem() == ModItems.jetpack_fly && this.type.name().equals(FluidType.KEROSENE.name())) { + if(this.fluid > 0 && JetpackRegular.getFuel(slots[in]) < JetpackRegular.maxFuel) { + this.fluid--; + JetpackRegular.setFuel(slots[in], JetpackRegular.getFuel(slots[in]) + 1); + } else { + return; + } + } else if(slots[in].getItem() == ModItems.jetpack_vector && this.type.name().equals(FluidType.KEROSENE.name())) { + if(this.fluid > 0 && JetpackVectorized.getFuel(slots[in]) < JetpackVectorized.maxFuel) { + this.fluid--; + JetpackVectorized.setFuel(slots[in], JetpackVectorized.getFuel(slots[in]) + 1); + } else { + return; + } + } else { + break; + } + } if(slots[in].getItem() == ModItems.fluid_barrel_infinite) { this.fluid = 0; diff --git a/com/hbm/items/gear/ArmorT45.java b/com/hbm/items/gear/ArmorT45.java index d341ccde8..0d9ef924d 100644 --- a/com/hbm/items/gear/ArmorT45.java +++ b/com/hbm/items/gear/ArmorT45.java @@ -191,18 +191,18 @@ public class ArmorT45 extends ItemArmor implements ISpecialArmor { } if (Library.checkArmor(player, ModItems.t45_helmet, ModItems.t45_plate, ModItems.t45_legs, - ModItems.t45_boots)) { + ModItems.t45_boots) && !world.isRemote) { if (player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() == ModItems.t45_plate && player.inventory.armorInventory[2].stackTagCompound != null && player.inventory.armorInventory[2].stackTagCompound.getInteger("charge") > 0) { - player.addPotionEffect(new PotionEffect(Potion.jump.id, 20, 0, true)); - player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 20, 1, true)); - player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 20, 2, true)); - player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 20, 0, true)); + player.addPotionEffect(new PotionEffect(Potion.jump.id, 30, 0, true)); + player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 30, 1, true)); + player.addPotionEffect(new PotionEffect(Potion.damageBoost.id, 30, 2, true)); + player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 30, 0, true)); } else { - player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 20, 1, true)); - player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 20, 0, true)); + player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 30, 1, true)); + player.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 30, 0, true)); } } } @@ -212,9 +212,9 @@ public class ArmorT45 extends ItemArmor implements ISpecialArmor { if (itemstack.getItem() == ModItems.t45_plate) { if (itemstack.stackTagCompound != null) { if (itemstack.stackTagCompound.getInteger("charge") != 0) - list.add("Charge: " + (itemstack.stackTagCompound.getInteger("charge") / 50 + 1) + "%"); + list.add("Charge: " + (itemstack.stackTagCompound.getInteger("charge") / 2000 + 1) + "%"); else - list.add("Charge: " + (itemstack.stackTagCompound.getInteger("charge") / 50) + "%"); + list.add("Charge: " + (itemstack.stackTagCompound.getInteger("charge") / 2000) + "%"); } } } diff --git a/com/hbm/items/gear/JetpackBooster.java b/com/hbm/items/gear/JetpackBooster.java index 58f5b354b..b0d71fbc5 100644 --- a/com/hbm/items/gear/JetpackBooster.java +++ b/com/hbm/items/gear/JetpackBooster.java @@ -1,5 +1,7 @@ package com.hbm.items.gear; +import java.util.List; + import com.hbm.entity.particle.EntityGasFlameFX; import com.hbm.items.ModItems; import com.hbm.render.model.ModelGoggles; @@ -21,10 +23,17 @@ import net.minecraft.world.World; public class JetpackBooster extends ItemArmor { private ModelJetPack model; + public static int maxFuel = 750; public JetpackBooster(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { super(p_i45325_1_, p_i45325_2_, p_i45325_3_); } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) + { + list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); + } @Override @@ -52,7 +61,7 @@ public class JetpackBooster extends ItemArmor { public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if(player.isSneaking() && this.getBoost(stack) == 0 && this.getCooldown(stack) == 0) { + if(player.isSneaking() && this.getBoost(stack) == 0 && this.getCooldown(stack) == 0 && this.getFuel(stack) > 0) { this.setBoost(stack, 15); this.setCooldown(stack, 40); } @@ -71,12 +80,17 @@ public class JetpackBooster extends ItemArmor { fx.motionY = -0.1; world.spawnEntityInWorld(fx); + this.setFuel(stack, this.getFuel(stack) - 1); + if(player.motionY > 0) player.fallDistance = 0; } if(this.getCooldown(stack) > 0) this.setCooldown(stack, this.getCooldown(stack) - 1); + + if(this.getFuel(stack) == 0) + this.setBoost(stack, 0); } public void setBoost(ItemStack stack, int i) { @@ -106,5 +120,24 @@ public class JetpackBooster extends ItemArmor { return stack.stackTagCompound.getInteger("cool"); } + + public static int getFuel(ItemStack stack) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + + return stack.stackTagCompound.getInteger("fuel"); + + } + + public static void setFuel(ItemStack stack, int i) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + } + + stack.stackTagCompound.setInteger("fuel", i); + + } } diff --git a/com/hbm/items/gear/JetpackBreak.java b/com/hbm/items/gear/JetpackBreak.java index 4b0283591..27025a59e 100644 --- a/com/hbm/items/gear/JetpackBreak.java +++ b/com/hbm/items/gear/JetpackBreak.java @@ -1,5 +1,7 @@ package com.hbm.items.gear; +import java.util.List; + import com.hbm.entity.particle.EntityGasFlameFX; import com.hbm.render.model.ModelJetPack; @@ -12,16 +14,24 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; public class JetpackBreak extends ItemArmor { private ModelJetPack model; + public static int maxFuel = 1200; public JetpackBreak(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { super(p_i45325_1_, p_i45325_2_, p_i45325_3_); } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) + { + list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); + } @Override @@ -49,7 +59,7 @@ public class JetpackBreak extends ItemArmor { public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if(player.motionY < -0.25) { + if(player.motionY < -0.25 && this.getFuel(stack) > 0) { Vec3 vec = Vec3.createVectorHelper(player.getLookVec().xCoord, 0, player.getLookVec().zCoord); vec.normalize(); @@ -63,6 +73,27 @@ public class JetpackBreak extends ItemArmor { world.spawnEntityInWorld(fx); player.fallDistance = 0; + + this.setFuel(stack, this.getFuel(stack) - 1); } } + + public static int getFuel(ItemStack stack) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + + return stack.stackTagCompound.getInteger("fuel"); + + } + + public static void setFuel(ItemStack stack, int i) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + } + + stack.stackTagCompound.setInteger("fuel", i); + + } } diff --git a/com/hbm/items/gear/JetpackRegular.java b/com/hbm/items/gear/JetpackRegular.java index e69032984..dafe0404f 100644 --- a/com/hbm/items/gear/JetpackRegular.java +++ b/com/hbm/items/gear/JetpackRegular.java @@ -1,5 +1,7 @@ package com.hbm.items.gear; +import java.util.List; + import com.hbm.entity.particle.EntityGasFlameFX; import com.hbm.items.ModItems; import com.hbm.render.model.ModelGoggles; @@ -21,10 +23,17 @@ import net.minecraft.world.World; public class JetpackRegular extends ItemArmor { private ModelJetPack model; + public static int maxFuel = 3000; public JetpackRegular(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { super(p_i45325_1_, p_i45325_2_, p_i45325_3_); } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) + { + list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); + } @Override @@ -52,7 +61,7 @@ public class JetpackRegular extends ItemArmor { public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if(player.isSneaking()) { + if(player.isSneaking() && this.getFuel(stack) > 0) { Vec3 vec = Vec3.createVectorHelper(player.getLookVec().xCoord, 0, player.getLookVec().zCoord); vec.normalize(); @@ -66,7 +75,28 @@ public class JetpackRegular extends ItemArmor { world.spawnEntityInWorld(fx); player.fallDistance = 0; + + this.setFuel(stack, this.getFuel(stack) - 1); } } + + public static int getFuel(ItemStack stack) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + + return stack.stackTagCompound.getInteger("fuel"); + + } + + public static void setFuel(ItemStack stack, int i) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + } + + stack.stackTagCompound.setInteger("fuel", i); + + } } diff --git a/com/hbm/items/gear/JetpackVectorized.java b/com/hbm/items/gear/JetpackVectorized.java index 52d6484b0..c623eaddd 100644 --- a/com/hbm/items/gear/JetpackVectorized.java +++ b/com/hbm/items/gear/JetpackVectorized.java @@ -1,5 +1,7 @@ package com.hbm.items.gear; +import java.util.List; + import com.hbm.entity.particle.EntityGasFlameFX; import com.hbm.render.model.ModelJetPack; @@ -12,16 +14,24 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemArmor.ArmorMaterial; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; public class JetpackVectorized extends ItemArmor { private ModelJetPack model; + public static int maxFuel = 6000; public JetpackVectorized(ArmorMaterial p_i45325_1_, int p_i45325_2_, int p_i45325_3_) { super(p_i45325_1_, p_i45325_2_, p_i45325_3_); } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) + { + list.add("Kerosene: " + this.getFuel(itemstack) + "mB / " + this.maxFuel + "mB"); + } @Override @@ -49,7 +59,7 @@ public class JetpackVectorized extends ItemArmor { public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { - if(player.isSneaking()) { + if(player.isSneaking() && this.getFuel(stack) > 0) { Vec3 vec = Vec3.createVectorHelper(player.getLookVec().xCoord, 0, player.getLookVec().zCoord); vec.normalize(); @@ -68,6 +78,27 @@ public class JetpackVectorized extends ItemArmor { world.spawnEntityInWorld(fx); player.fallDistance = 0; + + this.setFuel(stack, this.getFuel(stack) - 1); } } + + public static int getFuel(ItemStack stack) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + return 0; + } + + return stack.stackTagCompound.getInteger("fuel"); + + } + + public static void setFuel(ItemStack stack, int i) { + if(stack.stackTagCompound == null) { + stack.stackTagCompound = new NBTTagCompound(); + } + + stack.stackTagCompound.setInteger("fuel", i); + + } } diff --git a/com/hbm/items/tool/ItemCassette.java b/com/hbm/items/tool/ItemCassette.java index 103196ec0..e2711536b 100644 --- a/com/hbm/items/tool/ItemCassette.java +++ b/com/hbm/items/tool/ItemCassette.java @@ -31,6 +31,8 @@ public class ItemCassette extends Item { BLAST_DOOR( "Blast Door Alarm", new ResourceLocation("hbm:alarm.blastDoorAlarm"), SoundType.LOOP, 11665408, 50), APC_LOOP( "APC Siren", new ResourceLocation("hbm:alarm.apcLoop"), SoundType.LOOP, 3565216, 50), KLAXON( "Klaxon", new ResourceLocation("hbm:alarm.klaxon"), SoundType.LOOP, 8421504, 50), + KLAXON_A( "Vault Door Alarm", new ResourceLocation("hbm:alarm.foKlaxonA"), SoundType.LOOP, 0x8c810b, 50), + KLAXON_B( "Security Alert", new ResourceLocation("hbm:alarm.foKlaxonB"), SoundType.LOOP, 0x76818e, 50), SIREN( "Standard Siren", new ResourceLocation("hbm:alarm.regularSiren"), SoundType.LOOP, 6684672, 100), BANK_ALARM( "Bank Alarm", new ResourceLocation("hbm:alarm.bankAlarm"), SoundType.LOOP, 3572962, 100), BEEP_SIREN( "Beep Siren", new ResourceLocation("hbm:alarm.beepSiren"), SoundType.LOOP, 13882323, 100), diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index 009bced8b..c60c24322 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -11,6 +11,7 @@ import com.hbm.entity.effect.*; import com.hbm.entity.grenade.*; import com.hbm.entity.item.EntityMinecartTest; import com.hbm.entity.logic.EntityBomber; +import com.hbm.entity.logic.EntityDeathBlast; import com.hbm.entity.logic.EntityNukeExplosionAdvanced; import com.hbm.entity.missile.*; import com.hbm.entity.mob.*; @@ -159,6 +160,7 @@ public class ClientProxy extends ServerProxy RenderingRegistry.registerEntityRenderingHandler(EntityBlackHole.class, new RenderBlackHole()); RenderingRegistry.registerEntityRenderingHandler(EntityVortex.class, new RenderBlackHole()); RenderingRegistry.registerEntityRenderingHandler(EntityRagingVortex.class, new RenderBlackHole()); + RenderingRegistry.registerEntityRenderingHandler(EntityDeathBlast.class, new RenderDeathBlast()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDecoTapeRecorder.class, new RenderTapeRecorder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDecoSteelPoles.class, new RenderSteelPoles()); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index fbf59ae49..be566b7a3 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -90,6 +90,7 @@ import com.hbm.entity.grenade.EntityGrenadeTau; import com.hbm.entity.grenade.EntityGrenadeZOMG; import com.hbm.entity.item.EntityMinecartTest; import com.hbm.entity.logic.EntityBomber; +import com.hbm.entity.logic.EntityDeathBlast; import com.hbm.entity.logic.EntityMissileTest; import com.hbm.entity.logic.EntityNukeExplosion; import com.hbm.entity.logic.EntityNukeExplosionAdvanced; @@ -791,6 +792,7 @@ public class MainRegistry EntityRegistry.registerModEntity(EntityBomber.class, "entity_bomber", 108, this, 1000, 1, true); EntityRegistry.registerModEntity(EntityBombletZeta.class, "entity_zeta", 109, this, 1000, 1, true); EntityRegistry.registerModEntity(EntityOrangeFX.class, "entity_agent_orange", 110, this, 1000, 1, true); + EntityRegistry.registerModEntity(EntityDeathBlast.class, "entity_laser_blast", 111, this, 1000, 1, true); EntityRegistry.registerGlobalEntityID(EntityNuclearCreeper.class, "entity_mob_nuclear_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x204131, 0x75CE00); EntityRegistry.registerGlobalEntityID(EntityHunterChopper.class, "entity_mob_hunter_chopper", EntityRegistry.findGlobalUniqueEntityId(), 0x000020, 0x2D2D72); diff --git a/com/hbm/packet/SatLaserPacket.java b/com/hbm/packet/SatLaserPacket.java index a3cd4d30c..bbf2ac679 100644 --- a/com/hbm/packet/SatLaserPacket.java +++ b/com/hbm/packet/SatLaserPacket.java @@ -1,5 +1,6 @@ package com.hbm.packet; +import com.hbm.entity.logic.EntityDeathBlast; import com.hbm.explosion.ExplosionLarge; import com.hbm.items.ModItems; import com.hbm.saveddata.SatelliteSaveStructure; @@ -70,7 +71,13 @@ public class SatLaserPacket implements IMessage { int y = p.worldObj.getHeightValue(m.x, m.z); - ExplosionLarge.explodeFire(p.worldObj, m.x, y, m.z, 50, true, true, true); + //ExplosionLarge.explodeFire(p.worldObj, m.x, y, m.z, 50, true, true, true); + EntityDeathBlast blast = new EntityDeathBlast(p.worldObj); + blast.posX = m.x; + blast.posY = y; + blast.posZ = m.z; + + p.worldObj.spawnEntityInWorld(blast); } } diff --git a/com/hbm/render/entity/RenderDeathBlast.java b/com/hbm/render/entity/RenderDeathBlast.java new file mode 100644 index 000000000..ef4b301a1 --- /dev/null +++ b/com/hbm/render/entity/RenderDeathBlast.java @@ -0,0 +1,120 @@ +package com.hbm.render.entity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.entity.effect.EntityCloudFleijaRainbow; +import com.hbm.entity.logic.EntityDeathBlast; +import com.hbm.lib.RefStrings; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +public class RenderDeathBlast extends Render { + + private static final IModelCustom sphere = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/Sphere.obj")); + + @Override + public void doRender(Entity entity, double x, double y, double z, float p_76986_8_, float p_76986_9_) { + + GL11.glPushMatrix(); + GL11.glTranslatef((float)x, (float)y, (float)z); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDepthMask(false); + + GL11.glPushMatrix(); + //GL11.glRotatef((entity.ticksExisted % 360) * 10, 0, 1, 0); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + //GL11.glDisable(GL11.GL_ALPHA_TEST); + + GL11.glColor3f(1.0F, 0, 0); + + Vec3 vector = Vec3.createVectorHelper(0.5D, 0, 0); + + Tessellator tessellator = Tessellator.instance; + RenderHelper.disableStandardItemLighting(); + + for(int i = 0; i < 8; i++) { + tessellator.startDrawing(6); + tessellator.addVertex(vector.xCoord, 250.0D, vector.zCoord); + tessellator.addVertex(vector.xCoord, 0.0D, vector.zCoord); + vector.rotateAroundY(45); + tessellator.addVertex(vector.xCoord, 0.0D, vector.zCoord); + tessellator.addVertex(vector.xCoord, 250.0D, vector.zCoord); + tessellator.draw(); + } + + GL11.glColor3f(1.0F, 0, 1.0F); + + for(int i = 0; i < 8; i++) { + tessellator.startDrawing(6); + tessellator.addVertex(vector.xCoord / 2, 250.0D, vector.zCoord / 2); + tessellator.addVertex(vector.xCoord / 2, 0.0D, vector.zCoord / 2); + vector.rotateAroundY(45); + tessellator.addVertex(vector.xCoord / 2, 0.0D, vector.zCoord / 2); + tessellator.addVertex(vector.xCoord / 2, 250.0D, vector.zCoord / 2); + tessellator.draw(); + } + GL11.glPopMatrix(); + + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + + renderOrb(entity, x, y, z, p_76986_8_, p_76986_9_); + } + + public void renderOrb(Entity entity, double x, double y, double z, float p_76986_8_, float p_76986_9_) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)x, (float)y, (float)z); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + double scale = 15 - 15D * (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge)); + double alpha = (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge)); + + if(scale < 0) + scale = 0; + + GL11.glColor4d(1.0, 0, 1.0, alpha); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glScaled(scale, scale, scale); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + sphere.renderAll(); + + GL11.glColor4d(1.0, 0, 0, alpha); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glScaled(1.5, 1.5, 1.5); + sphere.renderAll(); + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glColor4d(1.0, 1.0, 1.0, 1.0); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity p_110775_1_) { + return null; + } + +}