diff options
author | kuba6000 <kuba.123123.6000@gmail.com> | 2022-08-23 01:32:59 +0200 |
---|---|---|
committer | kuba6000 <kuba.123123.6000@gmail.com> | 2022-08-23 01:32:59 +0200 |
commit | 525cc9553de2be9b0f14c6c646d69808abecb02d (patch) | |
tree | 615899c5f8f05f27a0bdf0df17bb41bde6245f93 /src/main/java/kubatech | |
parent | 6dbbff6804894bc69033df91d1344d8d523c178b (diff) | |
download | GT5-Unofficial-525cc9553de2be9b0f14c6c646d69808abecb02d.tar.gz GT5-Unofficial-525cc9553de2be9b0f14c6c646d69808abecb02d.tar.bz2 GT5-Unofficial-525cc9553de2be9b0f14c6c646d69808abecb02d.zip |
Basic looting implementation
Diffstat (limited to 'src/main/java/kubatech')
-rw-r--r-- | src/main/java/kubatech/loaders/MobRecipeLoader.java | 16 | ||||
-rw-r--r-- | src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java | 25 |
2 files changed, 37 insertions, 4 deletions
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<ItemStack> 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); diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java index 197d83af29..03bc9f7cdc 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java @@ -49,6 +49,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import gregtech.api.util.GT_Utility; @@ -64,6 +65,8 @@ import kubatech.client.effect.EntityRenderer; import kubatech.loaders.MobRecipeLoader; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; @@ -71,6 +74,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.StatCollector; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; @@ -127,6 +131,10 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber CASING_INDEX, 1), ofHatchAdder( + GT_MetaTileEntity_ExtremeExterminationChamber::addInputToMachineList, + CASING_INDEX, + 1), + ofHatchAdder( GT_MetaTileEntity_ExtremeExterminationChamber::addEnergyInputToMachineList, CASING_INDEX, 1), @@ -188,6 +196,7 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber .addInfo("Spawns and Exterminates monsters for you") .addInfo("Base energy usage: 2,000 EU/t") .addInfo("Recipe time is based on mob health") + .addInfo("You have to put weapon in ULV Input Bus") .addInfo("Also produces 120 Liquid XP per operation") .addInfo("If the mob spawns infernal") .addInfo("it will drain 8 times more power") @@ -204,6 +213,8 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber .addStructureInfo("The glass tier limits the Energy Input tier") .addOtherStructurePart("Steel Frame Box", "All vertical corners (except top and bottom)") .addOutputBus("Any casing", 1) + .addOtherStructurePart( + "1x ULV " + StatCollector.translateToLocal("GT5U.MBTT.InputBus"), "Any casing", 1) .addOutputHatch("Any casing", 1) .addEnergyHatch("Any casing", 1) .addMaintenanceHatch("Any casing", 1) @@ -417,7 +428,13 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber if (!recipe.isPeacefulAllowed && this.getBaseMetaTileEntity().getWorld().difficultySetting == EnumDifficulty.PEACEFUL) return false; - this.mOutputItems = recipe.generateOutputs(rand, this); + GT_MetaTileEntity_Hatch_InputBus inputbus = this.mInputBusses.get(0); + if (inputbus == null || !isValidMetaTileEntity(inputbus)) return false; + ItemStack lootingholder = inputbus.getStackInSlot(0); + if (lootingholder == null || !Enchantment.looting.canApply(lootingholder)) return false; + + this.mOutputItems = recipe.generateOutputs( + rand, this, EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, lootingholder)); if (isInRitualMode && isRitualValid()) { this.mMaxProgresstime = 400; @@ -474,7 +491,11 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { mGlassTier = 0; if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 6, 0)) return false; - if (mCasing < 10 || mMaintenanceHatches.size() != 1 || mEnergyHatches.size() == 0) return false; + if (mCasing < 10 + || mMaintenanceHatches.size() != 1 + || mEnergyHatches.size() == 0 + || mInputBusses.size() != 1 + || mInputBusses.get(0).mTier != 0) return false; if (mGlassTier < 8) for (GT_MetaTileEntity_Hatch_Energy hatch : mEnergyHatches) if (hatch.mTier > mGlassTier) return false; if (isInRitualMode) connectToRitual(); |