From 973185191b5cef96745b0b86767dda7e18d046ba Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 7 Apr 2026 16:29:17 +0200 Subject: [PATCH] fuckin laser grenades whatever man --- changelog | 6 +- .../hbm/blocks/machine/MachineCrucible.java | 3 - .../java/com/hbm/config/ServerConfig.java | 2 - .../grenade/EntityGrenadeUniversal.java | 10 + .../hbm/handler/DispenserBehaviorHandler.java | 273 ++---------------- .../weapon/grenade/ItemGrenadeExtra.java | 1 + .../weapon/grenade/ItemGrenadeFilling.java | 33 +++ .../weapon/grenade/ItemGrenadeUniversal.java | 2 +- .../sedna/factory/GunFactoryClient.java | 1 + .../com/hbm/main/ModEventHandlerClient.java | 2 +- .../machine/TileEntityCrucible.java | 12 +- 11 files changed, 76 insertions(+), 269 deletions(-) diff --git a/changelog b/changelog index f43d0be0e..c6030241b 100644 --- a/changelog +++ b/changelog @@ -26,4 +26,8 @@ * Fixed PWR RoR components not properly showing the possible values/functions when connected to ports * Fixed missing ports on the plasma forge * Fixed wrong texture being bound in the crucible for the molten metal gauge -* Fixed RoR panels having no hardness at all \ No newline at end of file +* Fixed RoR panels having no hardness at all +* Undid the change to the crucible where using no recipe would fill up the recipe stack anyway because people would NOT STOP smelting stuff then setting the recipe after the fact which DOES NOT WORK. + * This change however introduced yet another inconsistency with external pouring behavior that I simply cannot be assed to fix, so we are just rolling all that back + * If you're still to dumb, old or irradiated to use the crucible correctly, please bother LITERALLY ANOYNE EXCEPT ME. + * This basically fixes the aforementioned inconsistency \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java index c7ad347bd..9687bb2d3 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java @@ -149,9 +149,6 @@ public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor float exp = 0.002F; ICustomBlockHighlight.setup(); - /*event.context.drawOutlinedBoundingBox(AxisAlignedBB.getBoundingBox(x - 1, y, z - 1, x + 2, y + 0.5, z + 2).expand(exp, exp, exp).getOffsetBoundingBox(-dX, -dY, -dZ), -1); - event.context.drawOutlinedBoundingBox(AxisAlignedBB.getBoundingBox(x - 0.75, y + 0.5, z - 0.75, x + 1.75, y + 1.5, z + 1.75).expand(exp, exp, exp).getOffsetBoundingBox(-dX, -dY, -dZ), -1); - event.context.drawOutlinedBoundingBox(AxisAlignedBB.getBoundingBox(x - 0.5, y + 0.75, z - 0.5, x + 1.5, y + 1.5, z + 1.5).expand(exp, exp, exp).getOffsetBoundingBox(-dX, -dY, -dZ), -1);*/ for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(aabb.expand(exp, exp, exp).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 71042f0c6..890c114a7 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -21,7 +21,6 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); public static ConfigWrapper ENABLE_MKU = new ConfigWrapper(true); - public static ConfigWrapper LEGACY_CRUCIBLE_RULES = new ConfigWrapper(false); private static void initDefaults() { configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE); @@ -35,7 +34,6 @@ public class ServerConfig extends RunningConfig { configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); configMap.put("ITEM_HAZARD_DROP_TICKRATE", ITEM_HAZARD_DROP_TICKRATE); configMap.put("ENABLE_MKU", ENABLE_MKU); - configMap.put("LEGACY_CRUCIBLE_RULES", LEGACY_CRUCIBLE_RULES); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java b/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java index d55504ae2..3eddeb922 100644 --- a/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java +++ b/src/main/java/com/hbm/entity/grenade/EntityGrenadeUniversal.java @@ -1,5 +1,8 @@ package com.hbm.entity.grenade; +import org.apache.logging.log4j.Level; + +import com.hbm.config.GeneralConfig; import com.hbm.entity.projectile.EntityThrowableInterp; import com.hbm.items.weapon.grenade.ItemGrenadeExtra.EnumGrenadeExtra; import com.hbm.items.weapon.grenade.ItemGrenadeFilling.EnumGrenadeFilling; @@ -42,6 +45,7 @@ public class EntityGrenadeUniversal extends EntityThrowableInterp { public EntityGrenadeUniversal(World world, EntityPlayer thrower, ItemStack grenade) { super(world); + this.setThrower(thrower); ItemStack copy = grenade.copy(); copy.stackSize = 1; this.dataWatcher.updateObject(DW_GRENADE, copy); @@ -147,6 +151,12 @@ public class EntityGrenadeUniversal extends EntityThrowableInterp { if(filling.explode != null) filling.explode.accept(this); EnumGrenadeExtra extra = this.getExtra(); if(extra != null && extra.onExplode != null) extra.onExplode.accept(this); + + if(GeneralConfig.enableExtendedLogging) { + String s = "null"; + if(getThrower() != null && getThrower() instanceof EntityPlayer) s = ((EntityPlayer) getThrower()).getDisplayName(); + MainRegistry.logger.log(Level.INFO, "[GREN] Set off grenade at " + ((int) posX) + " / " + ((int) posY) + " / " + ((int) posZ) + " by " + s + "!"); + } } public int getTimer() { return this.ticksInAir + this.ticksInGround; } diff --git a/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java b/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java index b6fba216b..c3483e26a 100644 --- a/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java +++ b/src/main/java/com/hbm/handler/DispenserBehaviorHandler.java @@ -1,52 +1,10 @@ package com.hbm.handler; -import com.hbm.entity.grenade.EntityGrenadeASchrab; -import com.hbm.entity.grenade.EntityGrenadeBlackHole; -import com.hbm.entity.grenade.EntityGrenadeBreach; -import com.hbm.entity.grenade.EntityGrenadeBurst; -import com.hbm.entity.grenade.EntityGrenadeCloud; -import com.hbm.entity.grenade.EntityGrenadeCluster; -import com.hbm.entity.grenade.EntityGrenadeDynamite; -import com.hbm.entity.grenade.EntityGrenadeElectric; -import com.hbm.entity.grenade.EntityGrenadeFire; -import com.hbm.entity.grenade.EntityGrenadeFlare; -import com.hbm.entity.grenade.EntityGrenadeFrag; -import com.hbm.entity.grenade.EntityGrenadeGas; -import com.hbm.entity.grenade.EntityGrenadeGascan; -import com.hbm.entity.grenade.EntityGrenadeGeneric; -import com.hbm.entity.grenade.EntityGrenadeIFBouncy; -import com.hbm.entity.grenade.EntityGrenadeIFBrimstone; -import com.hbm.entity.grenade.EntityGrenadeIFConcussion; -import com.hbm.entity.grenade.EntityGrenadeIFGeneric; -import com.hbm.entity.grenade.EntityGrenadeIFHE; -import com.hbm.entity.grenade.EntityGrenadeIFHopwire; -import com.hbm.entity.grenade.EntityGrenadeIFImpact; -import com.hbm.entity.grenade.EntityGrenadeIFIncendiary; -import com.hbm.entity.grenade.EntityGrenadeIFMystery; -import com.hbm.entity.grenade.EntityGrenadeIFNull; -import com.hbm.entity.grenade.EntityGrenadeIFSpark; -import com.hbm.entity.grenade.EntityGrenadeIFSticky; -import com.hbm.entity.grenade.EntityGrenadeIFToxic; -import com.hbm.entity.grenade.EntityGrenadeImpactGeneric; -import com.hbm.entity.grenade.EntityGrenadeLemon; -import com.hbm.entity.grenade.EntityGrenadeMIRV; -import com.hbm.entity.grenade.EntityGrenadeMk2; -import com.hbm.entity.grenade.EntityGrenadeNuclear; -import com.hbm.entity.grenade.EntityGrenadeNuke; -import com.hbm.entity.grenade.EntityGrenadePC; -import com.hbm.entity.grenade.EntityGrenadePlasma; -import com.hbm.entity.grenade.EntityGrenadePoison; -import com.hbm.entity.grenade.EntityGrenadePulse; -import com.hbm.entity.grenade.EntityGrenadeSchrabidium; -import com.hbm.entity.grenade.EntityGrenadeShrapnel; -import com.hbm.entity.grenade.EntityGrenadeSmart; -import com.hbm.entity.grenade.EntityGrenadeStrong; -import com.hbm.entity.grenade.EntityGrenadeTau; -import com.hbm.entity.grenade.EntityGrenadeZOMG; -import com.hbm.entity.grenade.EntityWastePearl; +import com.hbm.entity.grenade.*; import com.hbm.items.ModItems; import com.hbm.items.tool.ItemFertilizer; import com.hbm.items.weapon.ItemGenericGrenade; +import com.hbm.items.weapon.grenade.ItemGrenadeShell.EnumGrenadeShell; import net.minecraft.block.BlockDispenser; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; @@ -62,211 +20,27 @@ public class DispenserBehaviorHandler { public static void init() { - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_generic, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeGeneric(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_strong, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeStrong(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_frag, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeFrag(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_fire, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeFire(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_cluster, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeCluster(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_flare, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeFlare(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_electric, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeElectric(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_poison, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadePoison(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_gas, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeGas(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_schrabidium, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeSchrabidium(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_nuke, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeNuke(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_nuclear, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeNuclear(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_pulse, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadePulse(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_plasma, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadePlasma(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_tau, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeTau(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_lemon, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeLemon(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_mk2, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeMk2(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_aschrab, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeASchrab(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_zomg, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeZOMG(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_shrapnel, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeShrapnel(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_black_hole, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeBlackHole(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_gascan, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeGascan(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_cloud, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeCloud(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_pink_cloud, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadePC(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_smart, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeSmart(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_mirv, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeMIRV(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_breach, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeBreach(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_burst, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeBurst(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_generic, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFGeneric(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_he, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFHE(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_bouncy, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFBouncy(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_sticky, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFSticky(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_impact, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFImpact(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_incendiary, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFIncendiary(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_toxic, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFToxic(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_concussion, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFConcussion(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_brimstone, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFBrimstone(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_mystery, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFMystery(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_spark, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFSpark(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_hopwire, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFHopwire(world, position.getX(), position.getY(), position.getZ()); - } - }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_if_null, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeIFNull(world, position.getX(), position.getY(), position.getZ()); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_universal, new BehaviorDefaultDispenseItem() { + @Override protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { + + IPosition iposition = BlockDispenser.func_149939_a(source); + EnumFacing enumfacing = BlockDispenser.func_149937_b(source.getBlockMetadata()); + + EntityGrenadeUniversal grenade = new EntityGrenadeUniversal(source.getWorld(), stack); + EnumGrenadeShell shell = grenade.getShell(); + + // this kinda sucks ass but it works so i'm not complaining + grenade.setPosition(source.getX() + enumfacing.getFrontOffsetX() * 0.75, source.getY() + enumfacing.getFrontOffsetY() * 0.75, source.getZ() + enumfacing.getFrontOffsetZ() * 0.75); + grenade.motionX = enumfacing.getFrontOffsetX() * shell.getYeetForce(); + grenade.motionY = enumfacing.getFrontOffsetY() * shell.getYeetForce(); + grenade.motionZ = enumfacing.getFrontOffsetZ() * shell.getYeetForce(); + source.getWorld().spawnEntityInWorld(grenade); + + stack.stackSize--; + return stack; } }); + BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.nuclear_waste_pearl, new BehaviorProjectileDispense() { protected IProjectile getProjectileEntity(World world, IPosition position) { return new EntityWastePearl(world, position.getX(), position.getY(), position.getZ()); @@ -277,11 +51,6 @@ public class DispenserBehaviorHandler { return new EntityGrenadeDynamite(world, position.getX(), position.getY(), position.getZ()); } }); - BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.grenade_kyiv, new BehaviorProjectileDispense() { - protected IProjectile getProjectileEntity(World world, IPosition position) { - return new EntityGrenadeImpactGeneric(world, position.getX(), position.getY(), position.getZ()).setType((ItemGenericGrenade) ModItems.grenade_kyiv); - } - }); BlockDispenser.dispenseBehaviorRegistry.putObject(ModItems.stick_dynamite_fishing, new BehaviorProjectileDispense() { protected IProjectile getProjectileEntity(World world, IPosition position) { return new EntityGrenadeImpactGeneric(world, position.getX(), position.getY(), position.getZ()).setType((ItemGenericGrenade) ModItems.stick_dynamite_fishing); diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeExtra.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeExtra.java index b359e36e1..66086323a 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeExtra.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeExtra.java @@ -71,6 +71,7 @@ public class ItemGrenadeExtra extends ItemEnumMulti { for(int i = 0; i < 3; i++) { EntityGrenadeUniversal triplet = new EntityGrenadeUniversal(grenade.worldObj, frag).setTrail(EntityGrenadeUniversal.TRAIL_TRIPLET); triplet.setPosition(grenade.posX, grenade.posY, grenade.posZ); + triplet.setThrower(grenade.getThrower()); triplet.motionX = vec.xCoord; triplet.motionY = 0.75D; triplet.motionZ = vec.zCoord; diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java index 43825f1f7..b92196714 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeFilling.java @@ -1,6 +1,8 @@ package com.hbm.items.weapon.grenade; +import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -8,6 +10,7 @@ import java.util.function.Consumer; import com.hbm.entity.effect.EntityFireLingering; import com.hbm.entity.grenade.EntityGrenadeUniversal; import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.entity.projectile.EntityBulletBeamBase; import com.hbm.explosion.vanillant.ExplosionVNT; import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; import com.hbm.explosion.vanillant.standard.BlockMutatorFire; @@ -30,9 +33,12 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.util.DamageResistanceHandler.DamageClass; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -40,11 +46,13 @@ public class ItemGrenadeFilling extends ItemEnumMulti { public static BulletConfig fragmentation; public static BulletConfig pellets; + public static BulletConfig laser; public ItemGrenadeFilling() { super(EnumGrenadeFilling.class, true, true); fragmentation = new BulletConfig().setLife(3).setThresholdNegation(5F).setRicochetAngle(90).setRicochetCount(2); pellets = new BulletConfig().setLife(100).setGrav(0.04).setVel(1.5F).setOnImpact(LAMBDA_TINY_EXPLODE); + laser = new BulletConfig().setBeam().setupDamageClass(DamageClass.LASER).setLife(3).setRenderRotations(false).setThresholdNegation(10F).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); } public static enum EnumGrenadeFilling { @@ -55,6 +63,7 @@ public class ItemGrenadeFilling extends ItemEnumMulti { CLUSTER(EXPLODE_CLUSTER, 0x5A5A5A, 0xFFC711, FRAG, STICK, NUKE), // explosive pellets EMP(EXPLODE_EMP, 0x93A1AC, 0x00FFFF, TECH), // tesla PLASMA(EXPLODE_PLASMA, 0x655B2C, 0x4CFF00, TECH), // EMP but more oomph + LASER(EXPLODE_LASER, 0x493A3A, 0xFF0000, TECH), // pew pew pew NUCLEAR(EXPLODE_NUKE, 0, 0xA49D62, NUKE), // nuka grenade NUCLEAR_DEMO(EXPLODE_NUKE_DEMO, 0, 0xDD4029, NUKE); // demolition nuka grenade @@ -127,6 +136,30 @@ public class ItemGrenadeFilling extends ItemEnumMulti { public static Consumer EXPLODE_PLASMA = (grenade) -> { explodeStandardEnergy(grenade, 50F, 5F, DamageClass.PLASMA, 0.5F, 1F, 0.5F, 4F); // TODO: unique effect because this sucks }; + + public static Consumer EXPLODE_LASER = (grenade) -> { // yeah this is good, we like this one + tinyExplode(grenade, 2, 5F); + + double x = grenade.posX; + double y = grenade.posY + 0.125; + double z = grenade.posZ; + + double range = 15; + List potentialTargets = grenade.worldObj.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x, y, z, x, y, z).expand(range, range, range)); + Collections.shuffle(potentialTargets); + + for(EntityLivingBase target : potentialTargets) { + if(target == grenade.getThrower()) continue; + + Vec3 delta = Vec3.createVectorHelper(target.posX - x, target.posY + target.height / 2 - y, target.posZ - z); + if(delta.lengthVector() > range) continue; + EntityBulletBeamBase sub = new EntityBulletBeamBase(grenade.getThrower(), laser, 30); + sub.setPosition(x, y, z); + sub.setRotationsFromVector(delta); + sub.performHitscanExternal(delta.lengthVector()); + grenade.worldObj.spawnEntityInWorld(sub); + } + }; public static Consumer EXPLODE_NUKE = (grenade) -> { ExplosionVNT vnt = new ExplosionVNT(grenade.worldObj, grenade.posX, grenade.posY, grenade.posZ, 10); diff --git a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java index 4fa150262..7aa4cfa79 100644 --- a/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java +++ b/src/main/java/com/hbm/items/weapon/grenade/ItemGrenadeUniversal.java @@ -40,7 +40,7 @@ public class ItemGrenadeUniversal extends Item implements IEquipReceiver { * | || | * | || | * | || | - * | || | + * | || | _________ EXTRA - optional bonus like additional fuzes, special explosion effects, glue for sticky bombs, et cetera * | || | * | || | * / || \ diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 6f862a8e2..17c697e68 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -246,6 +246,7 @@ public class GunFactoryClient { ItemGrenadeFilling.fragmentation.setRenderer(LegoClient.RENDER_FRAGMENTATION); ItemGrenadeFilling.pellets.setRenderer(LegoClient.RENDER_FRAGMENTATION); + ItemGrenadeFilling.laser.setRendererBeam(LegoClient.RENDER_LASER_RED); //HUDS ((ItemGunBaseNT) ModItems.gun_debug) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO, LegoClient.HUD_COMPONENT_AMMO_SECOND); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index cf7fa4a87..43fd795a2 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1464,7 +1464,7 @@ public class ModEventHandlerClient { } double d = Math.random(); - if(d < 0.1) main.splashText = "Redditors aren't people!"; + if(d < 0.025) main.splashText = "Redditors aren't people!"; } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 61ff69ff0..85e6899c9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -7,7 +7,6 @@ import java.util.List; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; import com.hbm.blocks.BlockDummyable; -import com.hbm.config.ServerConfig; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; import com.hbm.handler.threading.PacketThreading; @@ -393,7 +392,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro for(MaterialStack material : materials) { boolean recipeMaterial = recipe != null && (getQuantaFromType(recipe.input, material.material) > 0 || getQuantaFromType(recipe.output, material.material) > 0); - if((recipe == null && !ServerConfig.LEGACY_CRUCIBLE_RULES.get()) || recipeMaterial) { + if(recipeMaterial) { this.addToStack(this.recipeStack, material); } else { this.addToStack(this.wasteStack, material); @@ -482,13 +481,8 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro } if(recipeInputRequired == 0) { - // if no recipe is set and legacy support is turned off, throw everything into the recipe stack - if(recipe == null && !ServerConfig.LEGACY_CRUCIBLE_RULES.get()) { - recipeAmount += mat.amount; - } else { - //if this type isn't required by the recipe, add it to the waste stack - wasteAmount += mat.amount; - } + //if this type isn't required by the recipe, add it to the waste stack + wasteAmount += mat.amount; } else { //the maximum is the recipe's ratio scaled up to the recipe stack's capacity