From b98a39af6e8722475681cf17a858edc48823962c Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sat, 21 Jan 2023 23:31:46 +0100 Subject: [PATCH] feat: add crucible mechanics config option --- build.gradle | 2 +- src/main/java/dev/tilera/auracore/Config.java | 2 + .../auracore/mixins/MixinTileCrucible.java | 58 ++++++++++++++++--- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 2123ace..c4f8437 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ apply from: './gradle/scripts/mixins.gradle' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 -version = "1.7.5" +version = "1.8.0" group= "dev.tilera" archivesBaseName = "auracore" diff --git a/src/main/java/dev/tilera/auracore/Config.java b/src/main/java/dev/tilera/auracore/Config.java index 2a103ad..3978f0e 100644 --- a/src/main/java/dev/tilera/auracore/Config.java +++ b/src/main/java/dev/tilera/auracore/Config.java @@ -16,6 +16,7 @@ public class Config { public static boolean replaceAspects = true; public static boolean legacyAspects = false; public static boolean generateEldritchRing = true; + public static boolean legacyCrucibleMechanics = true; public static boolean noScanning() { return knowAllAspects; @@ -31,6 +32,7 @@ public class Config { replaceAspects = config.getBoolean("replaceAspects", "client", replaceAspects, "Replace some aspect textures"); legacyAspects = config.getBoolean("legacyAspects", "aspects", legacyAspects, "Use TC3 item aspects"); generateEldritchRing = config.getBoolean("generateEldritchRing", "worldgen", generateEldritchRing, "Generate Eldritch Ring structures"); + legacyCrucibleMechanics = config.getBoolean("legacyCrucibleMechanics", "crucible", legacyCrucibleMechanics, "Use TC3 crucible mechanics"); config.save(); } diff --git a/src/main/java/dev/tilera/auracore/mixins/MixinTileCrucible.java b/src/main/java/dev/tilera/auracore/mixins/MixinTileCrucible.java index 9eaae3d..2544b5c 100644 --- a/src/main/java/dev/tilera/auracore/mixins/MixinTileCrucible.java +++ b/src/main/java/dev/tilera/auracore/mixins/MixinTileCrucible.java @@ -4,6 +4,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +import dev.tilera.auracore.Config; import dev.tilera.auracore.api.IAlembic; import dev.tilera.auracore.aura.AuraManager; import net.minecraft.block.Block; @@ -39,6 +40,8 @@ public abstract class MixinTileCrucible extends TileThaumcraft implements IAspec @Shadow(remap = false) public abstract int tagAmount(); @Shadow(remap = false) + public abstract void spill(); + @Shadow(remap = false) abstract void drawEffects(); boolean spillNextTick = false; @@ -91,8 +94,13 @@ public abstract class MixinTileCrucible extends TileThaumcraft implements IAspec } } } - AuraManager.addFluxToClosest(this.worldObj, (float) this.xCoord + 0.5f, (float) this.yCoord + 0.5f, - (float) this.zCoord + 0.5f, this.aspects); + if (Config.legacyCrucibleMechanics) { + AuraManager.addFluxToClosest(this.worldObj, (float) this.xCoord + 0.5f, (float) this.yCoord + 0.5f, (float) this.zCoord + 0.5f, this.aspects); + } else { + for(int a = 0; a < this.aspects.visSize() / 2; ++a) { + this.spill(); + } + } this.aspects = new AspectList(); this.markDirty(); @@ -143,13 +151,45 @@ public abstract class MixinTileCrucible extends TileThaumcraft implements IAspec } } } - - if (this.tagAmount() > 500 && this.counter % 5L == 0L) { - AspectList tt = this.takeRandomFromSource(); - AuraManager.addFluxToClosest(this.worldObj, this.xCoord, this.yCoord, this.zCoord, tt); - if (this.tagAmount() <= 500) { - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); - } + if (Config.legacyCrucibleMechanics) { + if (this.tagAmount() > 500 && this.counter % 5L == 0L) { + AspectList tt = this.takeRandomFromSource(); + AuraManager.addFluxToClosest(this.worldObj, this.xCoord, this.yCoord, this.zCoord, tt); + if (this.tagAmount() <= 500) { + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + } + } else { + if (this.tagAmount() > 100 && this.counter % 5L == 0L) { + this.takeRandomFromSource(); + this.spill(); + } + + if (this.counter > 100L && this.heat > 150) { + this.counter = 0L; + if (this.tagAmount() > 0) { + int s = this.aspects.getAspects().length; + Aspect a = this.aspects.getAspects()[super.worldObj.rand.nextInt(s)]; + if (a.isPrimal()) { + a = this.aspects.getAspects()[super.worldObj.rand.nextInt(s)]; + } + + this.tank.drain(2, true); + this.aspects.remove(a, 1); + if (!a.isPrimal()) { + if (super.worldObj.rand.nextBoolean()) { + this.aspects.add(a.getComponents()[0], 1); + } else { + this.aspects.add(a.getComponents()[1], 1); + } + } else { + this.spill(); + } + } + + this.markDirty(); + super.worldObj.markBlockForUpdate(super.xCoord, super.yCoord, super.zCoord); + } } } else if (this.tank.getFluidAmount() > 0) { this.drawEffects();