aboutsummaryrefslogtreecommitdiff
path: root/src/mixin/java/gregtech
diff options
context:
space:
mode:
authorAlexdoru <57050655+Alexdoru@users.noreply.github.com>2024-10-21 21:21:33 +0200
committerGitHub <noreply@github.com>2024-10-21 19:21:33 +0000
commit901cb0d294b0c4f114bb247fbd7d6f97e7484f3c (patch)
treefd4900d59f98ec34c9119c2003f79f7467abddf0 /src/mixin/java/gregtech
parente741976ea6a6fa5dbcb45813fd1e2ca368331ba5 (diff)
downloadGT5-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')
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinExplosionPollution.java39
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithOptifine.java86
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinRenderBlocks_PollutionWithoutOptifine.java75
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/early/minecraft/pollution/MixinTileEntityFurnacePollution.java33
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/biomesoplenty/MixinFoliageRendererPollution.java31
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/galacticraftcore/MixinGalacticraftRocketPollution.java39
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIC2IronFurnacePollution.java32
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/ic2/MixinIc2Hazmat.java22
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftBoilerPollution.java45
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftCokeOvenPollution.java39
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/railcraft/MixinRailcraftTunnelBorePollution.java34
-rw-r--r--src/mixin/java/gregtech/mixin/mixins/late/thaumcraft/MixinThaumcraftAlchemyFurnacePollution.java33
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);
+ }
+ }
+}