aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorkuba6000 <kuba.123123.6000@gmail.com>2022-08-23 01:32:59 +0200
committerkuba6000 <kuba.123123.6000@gmail.com>2022-08-23 01:32:59 +0200
commit525cc9553de2be9b0f14c6c646d69808abecb02d (patch)
tree615899c5f8f05f27a0bdf0df17bb41bde6245f93 /src/main/java
parent6dbbff6804894bc69033df91d1344d8d523c178b (diff)
downloadGT5-Unofficial-525cc9553de2be9b0f14c6c646d69808abecb02d.tar.gz
GT5-Unofficial-525cc9553de2be9b0f14c6c646d69808abecb02d.tar.bz2
GT5-Unofficial-525cc9553de2be9b0f14c6c646d69808abecb02d.zip
Basic looting implementation
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/kubatech/loaders/MobRecipeLoader.java16
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java25
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();