From 525cc9553de2be9b0f14c6c646d69808abecb02d Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Tue, 23 Aug 2022 01:32:59 +0200 Subject: Basic looting implementation --- src/main/java/kubatech/loaders/MobRecipeLoader.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/main/java/kubatech/loaders') diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 1374c94d75..eeb37ba2fb 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -207,13 +207,25 @@ public class MobRecipeLoader { entity = e; } - public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeExterminationChamber MTE) { + public ItemStack[] generateOutputs( + Random rnd, GT_MetaTileEntity_ExtremeExterminationChamber MTE, int lootinglevel) { MTE.mEUt = mEUt; MTE.mMaxProgresstime = mDuration; ArrayList stacks = new ArrayList<>(mOutputs.size()); for (MobDrop o : mOutputs) { - if (o.chance == 10000 || rnd.nextInt(10000) < o.chance) { + int chance = o.chance; + int amount = o.stack.stackSize; + if (o.lootable && lootinglevel > 0) { + chance += lootinglevel * 5000; + if (chance > 10000) { + int div = (int) Math.ceil(chance / 10000d); + amount *= div; + chance /= div; + } + } + if (chance == 10000 || rnd.nextInt(10000) < chance) { ItemStack s = o.stack.copy(); + s.stackSize = amount; if (o.enchantable != null) EnchantmentHelper.addRandomEnchantment(rnd, s, o.enchantable); if (o.damages != null) { int rChance = rnd.nextInt(mMaxDamageChance); -- cgit From 831f61807e824b4660175da986a3d0deec04c40c Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Tue, 23 Aug 2022 03:16:43 +0200 Subject: Time is based on the weapon inserted --- src/main/java/kubatech/loaders/MobRecipeLoader.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/main/java/kubatech/loaders') diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index eeb37ba2fb..25ed2780da 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -113,6 +113,7 @@ public class MobRecipeLoader { public static droplist infernaldrops; public final boolean isPeacefulAllowed; public final EntityLiving entity; + public final float maxEntityHealth; @SuppressWarnings("unchecked") public MobRecipe copy() { @@ -123,7 +124,8 @@ public class MobRecipeLoader { infernalityAllowed, alwaysinfernal, isPeacefulAllowed, - entity); + entity, + maxEntityHealth); } private MobRecipe( @@ -133,7 +135,8 @@ public class MobRecipeLoader { boolean infernalityAllowed, boolean alwaysinfernal, boolean isPeacefulAllowed, - EntityLiving entity) { + EntityLiving entity, + float maxEntityHealth) { this.mOutputs = mOutputs; this.mDuration = mDuration; this.mMaxDamageChance = mMaxDamageChance; @@ -141,6 +144,7 @@ public class MobRecipeLoader { this.alwaysinfernal = alwaysinfernal; this.isPeacefulAllowed = isPeacefulAllowed; this.entity = entity; + this.maxEntityHealth = maxEntityHealth; } @SuppressWarnings("unchecked") @@ -203,14 +207,15 @@ public class MobRecipeLoader { } mMaxDamageChance = maxdamagechance; // Powered spawner with octadic capacitor spawns ~22/min ~= 0.366/sec ~= 2.72s/spawn ~= 54.54t/spawn - mDuration = 55 + 10 + (((int) e.getMaxHealth() / 5) * 10); + maxEntityHealth = e.getMaxHealth(); + mDuration = 55 + (int) (maxEntityHealth * 10); entity = e; } public ItemStack[] generateOutputs( - Random rnd, GT_MetaTileEntity_ExtremeExterminationChamber MTE, int lootinglevel) { + Random rnd, GT_MetaTileEntity_ExtremeExterminationChamber MTE, double attackDamage, int lootinglevel) { MTE.mEUt = mEUt; - MTE.mMaxProgresstime = mDuration; + MTE.mMaxProgresstime = Math.min(55, (int) ((maxEntityHealth / attackDamage) * 10d)); ArrayList stacks = new ArrayList<>(mOutputs.size()); for (MobDrop o : mOutputs) { int chance = o.chance; -- cgit From e33e4dec48db3b0b030bec94fe4ccb29c72b2222 Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Tue, 23 Aug 2022 17:32:23 +0200 Subject: Fix --- src/main/java/kubatech/loaders/MobRecipeLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/kubatech/loaders') diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java index 25ed2780da..adece13f23 100644 --- a/src/main/java/kubatech/loaders/MobRecipeLoader.java +++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java @@ -215,7 +215,7 @@ public class MobRecipeLoader { public ItemStack[] generateOutputs( Random rnd, GT_MetaTileEntity_ExtremeExterminationChamber MTE, double attackDamage, int lootinglevel) { MTE.mEUt = mEUt; - MTE.mMaxProgresstime = Math.min(55, (int) ((maxEntityHealth / attackDamage) * 10d)); + MTE.mMaxProgresstime = Math.max(55, (int) ((maxEntityHealth / attackDamage) * 10d)); ArrayList stacks = new ArrayList<>(mOutputs.size()); for (MobDrop o : mOutputs) { int chance = o.chance; -- cgit