diff options
author | Alexdoru <57050655+Alexdoru@users.noreply.github.com> | 2024-10-21 21:21:33 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-21 19:21:33 +0000 |
commit | 901cb0d294b0c4f114bb247fbd7d6f97e7484f3c (patch) | |
tree | fd4900d59f98ec34c9119c2003f79f7467abddf0 /src/mixin/java/gregtech | |
parent | e741976ea6a6fa5dbcb45813fd1e2ca368331ba5 (diff) | |
download | GT5-Unofficial-901cb0d294b0c4f114bb247fbd7d6f97e7484f3c.tar.gz GT5-Unofficial-901cb0d294b0c4f114bb247fbd7d6f97e7484f3c.tar.bz2 GT5-Unofficial-901cb0d294b0c4f114bb247fbd7d6f97e7484f3c.zip |
Import pollution mixins from hodgepodge (#3395)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: boubou19 <miisterunknown@gmail.com>
Diffstat (limited to 'src/mixin/java/gregtech')
12 files changed, 508 insertions, 0 deletions
diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinExplosionPollution.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinExplosionPollution.java new file mode 100644 index 0000000000..b7ed023243 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinExplosionPollution.java @@ -0,0 +1,39 @@ +package gregtech.mixin.mixins.early.minecraft.pollution; + +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(Explosion.class) +public class MixinExplosionPollution { + + @Shadow + public float explosionSize; + + @Shadow + private World worldObj; + + @Shadow + public double explosionX; + + @Shadow + public double explosionZ; + + @Inject(method = "doExplosionA", at = @At(value = "TAIL")) + public void gt5u$addExplosionPollution(CallbackInfo ci) { + if (!this.worldObj.isRemote) { + Pollution.addPollution( + this.worldObj.getChunkFromBlockCoords((int) this.explosionX, (int) this.explosionZ), + (int) Math.ceil(explosionSize * PollutionConfig.explosionPollutionAmount)); + } + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithOptifine.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithOptifine.java new file mode 100644 index 0000000000..f15e2e1716 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithOptifine.java @@ -0,0 +1,86 @@ +package gregtech.mixin.mixins.early.minecraft.pollution; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.RenderBlocks; + +import org.spongepowered.asm.mixin.Dynamic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import gregtech.common.pollution.ColorOverrideType; +import gregtech.common.pollution.Pollution; + +@Mixin(RenderBlocks.class) +public class MixinRenderBlocks_PollutionWithOptifine { + + @Dynamic("Target is an optifine method") + @ModifyExpressionValue( + method = "renderStandardBlock", + at = @At( + value = "INVOKE", + target = "LCustomColorizer;getColorMultiplier(Lnet/minecraft/block/Block;Lnet/minecraft/world/IBlockAccess;III)I", + remap = false)) + private int gt5u$pollutionStandardBlock(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.standardBlocks.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } + + @Dynamic("Target is an optifine method") + @ModifyExpressionValue( + method = "renderBlockLiquid", + at = @At( + value = "INVOKE", + target = "LCustomColorizer;getFluidColor(Lnet/minecraft/block/Block;Lnet/minecraft/world/IBlockAccess;III)I", + remap = false)) + private int gt5u$pollutionBlockLiquid(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.liquidBlocks.matchesID(block); + if (type == null || block.getMaterial() != Material.water) { + return color; + } + return type.getColor(color, blockX, blockZ); + } + + @Dynamic("Target is an optifine method") + @ModifyExpressionValue( + method = "renderBlockDoublePlant", + at = @At( + value = "INVOKE", + target = "LCustomColorizer;getColorMultiplier(Lnet/minecraft/block/Block;Lnet/minecraft/world/IBlockAccess;III)I", + remap = false)) + private int gt5u$pollutionBlockDoublePlant(int color, BlockDoublePlant block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.doublePlants.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } + + @Dynamic("Target is an optifine method") + @ModifyExpressionValue( + method = "renderCrossedSquares", + at = @At( + value = "INVOKE", + target = "LCustomColorizer;getColorMultiplier(Lnet/minecraft/block/Block;Lnet/minecraft/world/IBlockAccess;III)I", + remap = false)) + private int gt5u$pollutionCrossedSquares(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.crossedSquares.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } + + @Dynamic("Target is an optifine method") + @ModifyExpressionValue( + method = "renderBlockVine", + at = @At( + value = "INVOKE", + target = "LCustomColorizer;getColorMultiplier(Lnet/minecraft/block/Block;Lnet/minecraft/world/IBlockAccess;III)I", + remap = false)) + private int gt5u$pollutionBlockVine(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.blockVine.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithoutOptifine.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithoutOptifine.java new file mode 100644 index 0000000000..e400f04904 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithoutOptifine.java @@ -0,0 +1,75 @@ +package gregtech.mixin.mixins.early.minecraft.pollution; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.RenderBlocks; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import gregtech.common.pollution.ColorOverrideType; +import gregtech.common.pollution.Pollution; + +@Mixin(RenderBlocks.class) +public class MixinRenderBlocks_PollutionWithoutOptifine { + + @ModifyExpressionValue( + method = "renderStandardBlock", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Block;colorMultiplier(Lnet/minecraft/world/IBlockAccess;III)I")) + private int gt5u$pollutionStandardBlock(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.standardBlocks.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } + + @ModifyExpressionValue( + method = "renderBlockLiquid", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Block;colorMultiplier(Lnet/minecraft/world/IBlockAccess;III)I")) + private int gt5u$pollutionBlockLiquid(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.liquidBlocks.matchesID(block); + if (type == null || block.getMaterial() != Material.water) { + return color; + } + return type.getColor(color, blockX, blockZ); + } + + @ModifyExpressionValue( + method = "renderBlockDoublePlant", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/BlockDoublePlant;colorMultiplier(Lnet/minecraft/world/IBlockAccess;III)I")) + private int gt5u$pollutionBlockDoublePlant(int color, BlockDoublePlant block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.doublePlants.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } + + @ModifyExpressionValue( + method = "renderCrossedSquares", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Block;colorMultiplier(Lnet/minecraft/world/IBlockAccess;III)I")) + private int gt5u$pollutionCrossedSquares(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.crossedSquares.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } + + @ModifyExpressionValue( + method = "renderBlockVine", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Block;colorMultiplier(Lnet/minecraft/world/IBlockAccess;III)I")) + private int gt5u$pollutionBlockVine(int color, Block block, int blockX, int blockY, int blockZ) { + ColorOverrideType type = Pollution.blockVine.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinTileEntityFurnacePollution.java b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinTileEntityFurnacePollution.java new file mode 100644 index 0000000000..4a1e088524 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinTileEntityFurnacePollution.java @@ -0,0 +1,33 @@ +package gregtech.mixin.mixins.early.minecraft.pollution; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; + +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(TileEntityFurnace.class) +public abstract class MixinTileEntityFurnacePollution extends TileEntity { + + @Inject( + method = "updateEntity", + at = @At( + value = "FIELD", + target = "net/minecraft/tileentity/TileEntityFurnace.furnaceBurnTime:I", + opcode = Opcodes.GETFIELD, + ordinal = 2)) + private void gt5u$addPollution(CallbackInfo ci) { + if (!this.worldObj.isRemote && (this.worldObj.getTotalWorldTime() % 20) == 0) { + Pollution.addPollution( + this.worldObj.getChunkFromBlockCoords(this.xCoord, this.zCoord), + PollutionConfig.furnacePollutionAmount); + } + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/biomesoplenty/MixinFoliageRendererPollution.java b/src/mixin/java/gregtech/mixin/mixins/late/biomesoplenty/MixinFoliageRendererPollution.java new file mode 100644 index 0000000000..3b6b7f5423 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/biomesoplenty/MixinFoliageRendererPollution.java @@ -0,0 +1,31 @@ +package gregtech.mixin.mixins.late.biomesoplenty; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import biomesoplenty.client.render.blocks.FoliageRenderer; +import gregtech.common.pollution.ColorOverrideType; +import gregtech.common.pollution.Pollution; + +@Mixin(FoliageRenderer.class) +public class MixinFoliageRendererPollution { + + @ModifyExpressionValue( + method = "renderCrossedSquares", + remap = false, + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/Block;func_149720_d(Lnet/minecraft/world/IBlockAccess;III)I", + remap = false)) + private int gt5u$pollutionCrossedSquares(int color, Block block, int blockX, int blockY, int blockZ, + RenderBlocks renderer) { + ColorOverrideType type = Pollution.blockVine.matchesID(block); + if (type == null) return color; + return type.getColor(color, blockX, blockZ); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/galacticraftcore/MixinGalacticraftRocketPollution.java b/src/mixin/java/gregtech/mixin/mixins/late/galacticraftcore/MixinGalacticraftRocketPollution.java new file mode 100644 index 0000000000..53aee62ba5 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/galacticraftcore/MixinGalacticraftRocketPollution.java @@ -0,0 +1,39 @@ +package gregtech.mixin.mixins.late.galacticraftcore; + +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; +import micdoodle8.mods.galacticraft.api.entity.IRocketType; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityAutoRocket; +import micdoodle8.mods.galacticraft.api.prefab.entity.EntityTieredRocket; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(EntityTieredRocket.class) +public abstract class MixinGalacticraftRocketPollution extends EntityAutoRocket implements IRocketType { + + private MixinGalacticraftRocketPollution(World world) { + super(world); + } + + @Inject(method = "onUpdate", at = @At("HEAD")) + private void gt5u$addRocketPollution(CallbackInfo ci) { + if (this.worldObj.isRemote || !(launchPhase == EnumLaunchPhase.LAUNCHED.ordinal() + || launchPhase == EnumLaunchPhase.IGNITED.ordinal())) { + return; + } + + int pollutionAmount = 0; + if (launchPhase == EnumLaunchPhase.LAUNCHED.ordinal()) { + pollutionAmount = PollutionConfig.rocketPollutionAmount * this.getRocketTier(); + } else if (launchPhase == EnumLaunchPhase.IGNITED.ordinal()) { + pollutionAmount = PollutionConfig.rocketPollutionAmount * this.getRocketTier() / 100; + } + Pollution.addPollution(worldObj.getChunkFromBlockCoords((int) posX, (int) posZ), pollutionAmount); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIC2IronFurnacePollution.java b/src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIC2IronFurnacePollution.java new file mode 100644 index 0000000000..0df3897d51 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIC2IronFurnacePollution.java @@ -0,0 +1,32 @@ +package gregtech.mixin.mixins.late.ic2; + +import net.minecraft.tileentity.TileEntity; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; +import ic2.core.block.machine.tileentity.TileEntityIronFurnace; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(value = TileEntityIronFurnace.class, remap = false) +public abstract class MixinIC2IronFurnacePollution extends TileEntity { + + @Shadow + public abstract boolean isBurning(); + + @Inject(method = "updateEntityServer", at = @At("TAIL")) + private void gt5u$updateEntityServer(CallbackInfo ci) { + if (worldObj.isRemote || !isBurning()) { + return; + } + if ((worldObj.getTotalWorldTime() % 20) == 0) { + Pollution + .addPollution(worldObj.getChunkFromBlockCoords(xCoord, zCoord), PollutionConfig.furnacePollutionAmount); + } + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIc2Hazmat.java b/src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIc2Hazmat.java new file mode 100644 index 0000000000..cd451f0a46 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIc2Hazmat.java @@ -0,0 +1,22 @@ +package gregtech.mixin.mixins.late.ic2; + +import net.minecraft.entity.EntityLivingBase; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import gregtech.api.util.GTUtility; +import ic2.core.item.armor.ItemArmorHazmat; + +@Mixin(value = ItemArmorHazmat.class, remap = false) +public class MixinIc2Hazmat { + + /** + * @author Sphyix + * @reason Hazmat - IC2 logic superseded by GT check + */ + @Overwrite + public static boolean hasCompleteHazmat(EntityLivingBase entity) { + return GTUtility.isWearingFullRadioHazmat(entity); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftBoilerPollution.java b/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftBoilerPollution.java new file mode 100644 index 0000000000..f86255ed45 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftBoilerPollution.java @@ -0,0 +1,45 @@ +package gregtech.mixin.mixins.late.railcraft; + +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; +import mods.railcraft.common.blocks.RailcraftTileEntity; +import mods.railcraft.common.blocks.machine.TileMultiBlock; +import mods.railcraft.common.blocks.machine.beta.TileEngineSteamHobby; +import mods.railcraft.common.util.steam.SteamBoiler; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(SteamBoiler.class) +public class MixinRailcraftBoilerPollution { + + @Shadow(remap = false) + private RailcraftTileEntity tile; + + @Shadow(remap = false) + protected boolean isBurning; + + @Inject(method = "tick", at = @At(value = "HEAD"), remap = false) + private void gt5u$tick(int x, CallbackInfo ci) { + if (!this.isBurning || this.tile == null || this.tile.getWorld() == null) return; + final World world = this.tile.getWorldObj(); + if ((world.getTotalWorldTime() % 20) == 0) { + int pollutionAmount; + if (this.tile instanceof TileMultiBlock) { + pollutionAmount = (((TileMultiBlock) this.tile).getComponents() + .size() - x) * PollutionConfig.fireboxPollutionAmount; + } else if (this.tile instanceof TileEngineSteamHobby) { + pollutionAmount = PollutionConfig.hobbyistEnginePollutionAmount; + } else { + pollutionAmount = 40; + } + Pollution.addPollution(world.getChunkFromBlockCoords(this.tile.getX(), this.tile.getZ()), pollutionAmount); + } + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftCokeOvenPollution.java b/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftCokeOvenPollution.java new file mode 100644 index 0000000000..147fe554c4 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftCokeOvenPollution.java @@ -0,0 +1,39 @@ +package gregtech.mixin.mixins.late.railcraft; + +import java.util.List; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; +import mods.railcraft.common.blocks.machine.MultiBlockPattern; +import mods.railcraft.common.blocks.machine.TileMultiBlock; +import mods.railcraft.common.blocks.machine.TileMultiBlockOven; +import mods.railcraft.common.blocks.machine.alpha.TileBlastFurnace; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(TileMultiBlockOven.class) +public abstract class MixinRailcraftCokeOvenPollution extends TileMultiBlock { + + @Shadow(remap = false) + protected boolean cooking; + + private MixinRailcraftCokeOvenPollution(List<? extends MultiBlockPattern> patterns) { + super(patterns); + } + + @Inject(method = "updateEntity", at = @At("HEAD")) + private void gt5u$addPollution(CallbackInfo ci) { + if (this.worldObj.isRemote || !this.cooking || !this.isMaster) return; + if ((this.worldObj.getTotalWorldTime() % 20) == 0) { + final int pollution = (((TileMultiBlock) this) instanceof TileBlastFurnace) + ? PollutionConfig.advancedCokeOvenPollutionAmount + : PollutionConfig.cokeOvenPollutionAmount; + Pollution.addPollution(this.worldObj.getChunkFromBlockCoords(this.xCoord, this.zCoord), pollution); + } + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftTunnelBorePollution.java b/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftTunnelBorePollution.java new file mode 100644 index 0000000000..7ddc4031a2 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftTunnelBorePollution.java @@ -0,0 +1,34 @@ +package gregtech.mixin.mixins.late.railcraft; + +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.world.World; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; +import mods.railcraft.common.carts.EntityTunnelBore; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(EntityTunnelBore.class) +public abstract class MixinRailcraftTunnelBorePollution extends EntityMinecart { + + @Shadow(remap = false) + private boolean active; + + private MixinRailcraftTunnelBorePollution(World world) { + super(world); + } + + @Inject(method = "onUpdate", at = @At("HEAD")) + private void gt5u$addPollution(CallbackInfo ci) { + if (!worldObj.isRemote || !active) return; + Pollution.addPollution( + worldObj.getChunkFromBlockCoords((int) posX, (int) posZ), + PollutionConfig.tunnelBorePollutionAmount); + } +} diff --git a/src/mixin/java/gregtech/mixin/mixins/late/thaumcraft/MixinThaumcraftAlchemyFurnacePollution.java b/src/mixin/java/gregtech/mixin/mixins/late/thaumcraft/MixinThaumcraftAlchemyFurnacePollution.java new file mode 100644 index 0000000000..a842f42d57 --- /dev/null +++ b/src/mixin/java/gregtech/mixin/mixins/late/thaumcraft/MixinThaumcraftAlchemyFurnacePollution.java @@ -0,0 +1,33 @@ +package gregtech.mixin.mixins.late.thaumcraft; + +import net.minecraft.tileentity.TileEntity; + +import org.spongepowered.asm.lib.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import gregtech.common.pollution.Pollution; +import gregtech.common.pollution.PollutionConfig; +import thaumcraft.common.tiles.TileAlchemyFurnace; + +// Merged from ModMixins under the MIT License Copyright bartimaeusnek & GTNewHorizons +@Mixin(TileAlchemyFurnace.class) +public abstract class MixinThaumcraftAlchemyFurnacePollution extends TileEntity { + + @Inject( + method = "updateEntity", + at = @At( + value = "FIELD", + target = "thaumcraft/common/tiles/TileAlchemyFurnace.furnaceBurnTime:I", + opcode = Opcodes.PUTFIELD, + remap = false)) + private void gt5u$addPollution(CallbackInfo ci) { + if (!this.worldObj.isRemote && (this.worldObj.getTotalWorldTime() % 20) == 0) { + Pollution.addPollution( + this.worldObj.getChunkFromBlockCoords(this.xCoord, this.zCoord), + PollutionConfig.furnacePollutionAmount); + } + } +} |