From 073bd2a8c4bed6d8756ed4087e8cf4b0bc1cd9d1 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 8 Sep 2021 16:58:25 +0200 Subject: [PATCH] memepack: return of the HIV --- .../entity/mob/siege/EntitySiegeSkeleton.java | 11 ++ .../entity/mob/siege/EntitySiegeZombie.java | 11 ++ .../com/hbm/entity/mob/siege/SiegeTier.java | 137 ++++++++++++++++++ .../assets/hbm/textures/entity/siege_iron.png | Bin 0 -> 935 bytes 4 files changed, 159 insertions(+) create mode 100644 src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java create mode 100644 src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java create mode 100644 src/main/java/com/hbm/entity/mob/siege/SiegeTier.java create mode 100644 src/main/resources/assets/hbm/textures/entity/siege_iron.png diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java new file mode 100644 index 000000000..07c49de11 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java @@ -0,0 +1,11 @@ +package com.hbm.entity.mob.siege; + +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.world.World; + +public class EntitySiegeSkeleton extends EntitySkeleton { + + public EntitySiegeSkeleton(World world) { + super(world); + } +} diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java new file mode 100644 index 000000000..5279faafe --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeZombie.java @@ -0,0 +1,11 @@ +package com.hbm.entity.mob.siege; + +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.world.World; + +public class EntitySiegeZombie extends EntityZombie { + + public EntitySiegeZombie(World world) { + super(world); + } +} diff --git a/src/main/java/com/hbm/entity/mob/siege/SiegeTier.java b/src/main/java/com/hbm/entity/mob/siege/SiegeTier.java new file mode 100644 index 000000000..502d577f4 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/siege/SiegeTier.java @@ -0,0 +1,137 @@ +package com.hbm.entity.mob.siege; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +public class SiegeTier { + + private static SiegeTier[] tiers = new SiegeTier[100]; + private static int nextID = 0; + + public static SiegeTier DEFAULT_BUFF; + public static SiegeTier CLAY; + public static SiegeTier IRON; + public static SiegeTier STONE; + public static SiegeTier SILVER; + public static SiegeTier GOLD; + public static SiegeTier DESH; + public static SiegeTier SCHRAB; + public static SiegeTier DNT; + + public static void registerTiers() { + DEFAULT_BUFF = new SiegeTier(20) .setDR(0.2F) .setDMG(2F); + CLAY = new SiegeTier(30) .setDR(0.2F) .setDMG(3F); + STONE = new SiegeTier(40) .setDR(0.3F) .setDT(1F) .setFP() .setDMG(5F); + IRON = new SiegeTier(50) .setDR(0.3F) .setDT(2F) .setFP() .setDMG(7.5F); + SILVER = new SiegeTier(70) .setDR(0.5F) .setDT(3F) .setNF() .setFP() .setDMG(10F) .setSP(1.5F); + GOLD = new SiegeTier(100) .setDR(0.5F) .setDT(5F) .setNF() .setFP() .setDMG(15F) .setSP(1.5F); + DESH = new SiegeTier(150) .setDR(0.7F) .setDT(7F) .setNF() .setFP() .setDMG(25F) .setSP(1.5F); + SCHRAB = new SiegeTier(250) .setDR(0.7F) .setDT(10F) .setNF() .setFP() .setDMG(50F) .setSP(2F); + DNT = new SiegeTier(500) .setDR(0.9F) .setDT(20F) .setNF() .setFP() .setDMG(100F) .setSP(2F); + } + + public int id; + public float dt = 0F; + public float dr = 0F; + public float health = 20F; + public float damageMod = 1F; + public float speedMod = 1F; + public boolean fireProof = false; + public boolean noFall = false; + public ItemStack dropItem = null; + + //so this is basically delegates but in java? or like, uh, storing lambdas? i don't know what it is but i feel like playing god. i like it. + public Consumer delegate; + + public SiegeTier(float baseHealth) { + this.id = nextID; + SiegeTier.tiers[this.id] = this; + nextID++; + + this.health = baseHealth; + } + + private SiegeTier setDT(float dt) { + this.dt = dt; + return this; + } + + private SiegeTier setDR(float dr) { + this.dr = dr; + return this; + } + + private SiegeTier setDMG(float dmg) { + this.damageMod = dmg; + return this; + } + + private SiegeTier setSP(float sp) { + this.speedMod = sp; + return this; + } + + private SiegeTier setFP() { + this.fireProof = true; + return this; + } + + private SiegeTier setNF() { + this.noFall = true; + return this; + } + + private SiegeTier setDrop(Item drop) { + this.dropItem = new ItemStack(drop); + return this; + } + + private SiegeTier setDrop(ItemStack drop) { + this.dropItem = drop; + return this; + } + + private SiegeTier setAura(int range, PotionEffect... effects) { + this.daisyChain(x -> SiegeTier.doAura(x, range, effects)); //HOLY SHIT THAT ACTUALLY WORKS!! + return this; + } + + private SiegeTier daisyChain(Consumer link) { + + if(this.delegate == null) + this.delegate = link; + else + this.delegate.andThen(link); //HOLY FUCK! + + return this; + } + + public void runDelegate(EntityLivingBase entity) { + if(this.delegate != null) this.delegate.accept(entity); + } + + /* + * DELEGATIONS + */ + private static void doAura(EntityLivingBase entity, int range, PotionEffect... effects) { + + List players = entity.worldObj.getEntitiesWithinAABB(EntityPlayer.class, entity.boundingBox.expand(range, range, range)); + + for(EntityPlayer player : players) { + + if(player.getDistanceSqToEntity(entity) < range * range) { + + for(PotionEffect e : effects) { + player.addPotionEffect(new PotionEffect(e)); + } + } + } + } +} diff --git a/src/main/resources/assets/hbm/textures/entity/siege_iron.png b/src/main/resources/assets/hbm/textures/entity/siege_iron.png new file mode 100644 index 0000000000000000000000000000000000000000..cdbfdd6c434202c0924a8fdad390eca4f78f6267 GIT binary patch literal 935 zcmV;Y16cftP)AR$=Muu430D8}}NY!WA%HC6o>FSUzWglRi~w(*;QwgYGzzdQlqx?hlG*+s-or&8z2p{P2-(x5L$IfAaM4lZCF`^z(yReZ?yKr!hkTQoX7w$6t;S5k{ji$DfZ^ z`R<>FEX&UQpX3YystO_?f(V3B$W~_yYc1B=wS#R6aU7p(-|Rj>)f0ix>2wegq9|f} zXM2qhn?tYHJGWVfy9a$0@jRFyz~y-{<(2U2%|Cvm4r2m#_YYM>P*p?>&mQireSoR| z1`Bh%4$~e~=LsQBK^y?qx#D9*5Kspqs5+#02SJ@ulF$ayG$oE>hQr~^`DG0kAQa;d zGzl>Vbq+BGI6bThLe$#gbD$*x;FN@UbIT$G0rB}R`0@w71fuH600c#yD^?V0(AiIf zrtd&0wvn+UiB? z=gGXzA4;;1j*b?3fb9N#sAb9X70~NIog${(D|kzAlUo6J{^;JqK-R^oq)qSJ+uN%# z!D6~JHYieCz#E>=d9|L9k{Hz)ZDa#DugsS>K`}-1Q)c&MF9>1+pYP(Y!B$H7Q4v34 zI^UO-?6T`G3gKz)8{YsqS9O79Lu7&g=WH=&K%MUcjG1d}(+)i^m+RIyO+uWxj& zb$R#yX$nB;2T&^H_PvpBjXM!)ov#)O@zdo>QC+J#Z+#tc>p~7*KF}Zv*!rWx_+*3$ z13vxt9ueXC{cTL(Ykoe;38D}&5QG7UkdJa6T-|Rpz`6%Ab*MGL8+W%+1(#bc?_443 zUgE}!n~YD!MBPiAd_BSCwj#pjmT)UXtzyR(#%sk_i>4pQd