diff --git a/dependencies.gradle b/dependencies.gradle index 2aefa8f..7fd7079 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -6,7 +6,7 @@ dependencies { transitive = false } compileOnly "thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev" - compileOnly('com.github.GTNewHorizons:TC4Tweaks:1.4.26:dev') { + compileOnly('curse.maven:tc4tweaks-431297:7441877') { transitive = false } compileOnly "curse.maven:chunkpregen-267193:3756388" @@ -36,6 +36,8 @@ dependencies { compileOnly(deobfMaven(curseMaven, "curse.maven:ars-magica-2-67313:2280862")) compileOnly(deobfMaven(curseMaven, "curse.maven:waystones-245755:2559125")) runtimeOnly(deobf("https://github.com/makamys/CoreTweaks/releases/download/0.3.3.2/CoreTweaks-1.7.10-0.3.3.2+nomixin.jar")) + compileOnly("com.falsepattern:chunkapi-mc1.7.10:0.8.1:dev") + compileOnly("com.falsepattern:endlessids-mc1.7.10:1.7.1:dev") if(!Boolean.valueOf(project.properties["archaicFix.noRuntimeExtras"] ?: "false")) { runtimeOnly(deobfMaven(curseMaven, "curse.maven:xaerosminimap-263420:3876755")) diff --git a/src/main/java/org/embeddedt/archaicfix/ArchaicFix.java b/src/main/java/org/embeddedt/archaicfix/ArchaicFix.java index 02f11b8..7322353 100644 --- a/src/main/java/org/embeddedt/archaicfix/ArchaicFix.java +++ b/src/main/java/org/embeddedt/archaicfix/ArchaicFix.java @@ -1,5 +1,6 @@ package org.embeddedt.archaicfix; +import com.falsepattern.chunk.api.DataRegistry; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.SidedProxy; @@ -16,6 +17,9 @@ import net.minecraft.network.NetHandlerPlayServer; import net.minecraftforge.common.MinecraftForge; import org.embeddedt.archaicfix.asm.EarlyStringPool; +import org.embeddedt.archaicfix.asm.TargetedMod; +import org.embeddedt.archaicfix.chunkapi.ChunkAPICompat; +import org.embeddedt.archaicfix.chunkapi.ChunkLightingDataManager; import org.embeddedt.archaicfix.config.ArchaicConfig; import org.embeddedt.archaicfix.ducks.IAcceleratedRecipe; import org.embeddedt.archaicfix.proxy.CommonProxy; @@ -24,7 +28,7 @@ import java.util.*; -@Mod(modid = ArchaicFix.MODID, version = ArchaicFix.VERSION, dependencies = "required-after:gtnhmixins@[2.0.0,);required-after:unimixins@[0.1.16,);", guiFactory = "org.embeddedt.archaicfix.config.ArchaicGuiConfigFactory") +@Mod(modid = ArchaicFix.MODID, version = ArchaicFix.VERSION, dependencies = "required-after:gtnhmixins@[2.0.0,);required-after:unimixins@[0.1.16,);after:chunkapi", guiFactory = "org.embeddedt.archaicfix.config.ArchaicGuiConfigFactory") public class ArchaicFix { public static final String MODID = "archaicfix"; @@ -72,6 +76,10 @@ public void preinit(FMLPreInitializationEvent event) @EventHandler public void init(FMLInitializationEvent event) { + if (Loader.isModLoaded(TargetedMod.CHUNKAPI.ModID())) + { + ChunkAPICompat.init(); // This must be a call to the class because otherwise the JVM will try to load DataManager. + } EarlyStringPool.clear(); } diff --git a/src/main/java/org/embeddedt/archaicfix/asm/Mixin.java b/src/main/java/org/embeddedt/archaicfix/asm/Mixin.java index d3f53ee..838c8f2 100644 --- a/src/main/java/org/embeddedt/archaicfix/asm/Mixin.java +++ b/src/main/java/org/embeddedt/archaicfix/asm/Mixin.java @@ -2,6 +2,7 @@ import com.gtnewhorizon.gtnhmixins.builders.IMixins; import com.gtnewhorizon.gtnhmixins.builders.MixinBuilder; +import cpw.mods.fml.common.Loader; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.embeddedt.archaicfix.config.ArchaicConfig; @@ -83,6 +84,10 @@ public enum Mixin implements IMixins { "lighting.MixinMinecraft", "lighting.MixinWorld", "lighting.MixinChunkCache")), + PHOSPHOR_NO_CHUNKAPI(new ArchaicBuilder() + .setPhase(Phase.LATE) + .setApplyIf(() -> ArchaicConfig.enablePhosphor && !Loader.isModLoaded(TargetedMod.CHUNKAPI.ModID())) + .addCommonMixins("lighting.base.MixinAnvilChunkLoaderBase")), PHOSPHOR_FASTCRAFT(new ArchaicBuilder() .setPhase(Phase.EARLY) .setApplyIf(() -> ArchaicConfig.enablePhosphor) @@ -91,7 +96,6 @@ public enum Mixin implements IMixins { "lighting.fastcraft.MixinChunk", "lighting.fastcraft.MixinChunkProviderServer", "lighting.fastcraft.MixinWorld")), - GREGTECH6(new ArchaicBuilder() .setPhase(Phase.LATE) .addRequiredMod(TargetedMod.GREGTECH6) diff --git a/src/main/java/org/embeddedt/archaicfix/asm/TargetedMod.java b/src/main/java/org/embeddedt/archaicfix/asm/TargetedMod.java index 2fbc16a..97a702b 100644 --- a/src/main/java/org/embeddedt/archaicfix/asm/TargetedMod.java +++ b/src/main/java/org/embeddedt/archaicfix/asm/TargetedMod.java @@ -13,6 +13,7 @@ public enum TargetedMod implements ITargetMod { ARS_MAGICA_2("arsmagica2"), BOTANIA("Botania"), CHICKENCHUNKS("ChickenChunks"), + CHUNKAPI("chunkapi"), CHUNK_PREGENERATOR("chunkpregenerator"), COFHCORE("cofh.asm.LoadingPlugin", "CoFHCore"), DIVERSITY("diversity"), @@ -35,12 +36,19 @@ public enum TargetedMod implements ITargetMod { WAYSTONES("waystones"); private final TargetModBuilder builder; - + private final String ID; + TargetedMod(String modId) { this(null, modId); } TargetedMod(String coremodClass, String modId) { this.builder = new TargetModBuilder().setCoreModClass(coremodClass).setModId(modId); + this.ID = modId; + } + + public String ModID() + { + return ID; } } diff --git a/src/main/java/org/embeddedt/archaicfix/chunkapi/ChunkAPICompat.java b/src/main/java/org/embeddedt/archaicfix/chunkapi/ChunkAPICompat.java new file mode 100644 index 0000000..14a3e52 --- /dev/null +++ b/src/main/java/org/embeddedt/archaicfix/chunkapi/ChunkAPICompat.java @@ -0,0 +1,11 @@ +package org.embeddedt.archaicfix.chunkapi; + +import com.falsepattern.chunk.api.DataRegistry; + +public class ChunkAPICompat +{ + public static void init() + { + DataRegistry.registerDataManager(new ChunkLightingDataManager(), 1000); + } +} diff --git a/src/main/java/org/embeddedt/archaicfix/chunkapi/ChunkLightingDataManager.java b/src/main/java/org/embeddedt/archaicfix/chunkapi/ChunkLightingDataManager.java new file mode 100644 index 0000000..4387bca --- /dev/null +++ b/src/main/java/org/embeddedt/archaicfix/chunkapi/ChunkLightingDataManager.java @@ -0,0 +1,66 @@ +package org.embeddedt.archaicfix.chunkapi; + +import com.falsepattern.chunk.api.DataManager; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.chunk.Chunk; +import org.embeddedt.archaicfix.lighting.api.IChunkLightingData; +import org.embeddedt.archaicfix.lighting.world.lighting.LightingHooks; + +public class ChunkLightingDataManager implements DataManager.ChunkDataManager +{ + @Override + public String domain() { + return "archaicfix"; + } + + @Override + public String id() { + return "lighting"; + } + + @Override + public void writeChunkToNBT(Chunk chunk, NBTTagCompound nbt) + { + LightingHooks.writeNeighborLightChecksToNBT(chunk, nbt); + nbt.setBoolean("LightPopulated", ((IChunkLightingData) chunk).isLightInitialized()); + } + + @Override + public void readChunkFromNBT(Chunk chunk, NBTTagCompound nbt) + { + LightingHooks.readNeighborLightChecksFromNBT(chunk, nbt); + ((IChunkLightingData) chunk).setLightInitialized(nbt.getBoolean("LightPopulated")); + } + + @Override + public void cloneChunk(Chunk from, Chunk to) { + ((IChunkLightingData) to).setNeighborLightChecks(((IChunkLightingData) from).getNeighborLightChecks()); + ((IChunkLightingData) to).setLightInitialized(((IChunkLightingData) from).isLightInitialized()); + } + + @Override + public String version() { + return "1.0"; + } + + @Override + public String newInstallDescription() { + return "Migrating the Light Initialization checks to a DataManager when ChunkAPI is installed."; + } + + @Override + public String uninstallMessage() { + return "Removing Light Inititialization checks from a Datamanager. Shouldn't break anything."; + } + + @Override + public String versionChangeMessage(String priorVersion) + { + return null; + } + + @Override + public boolean chunkPrivilegedAccess() { + return true; + } +} diff --git a/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/MixinAnvilChunkLoader.java b/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/MixinAnvilChunkLoader.java index e84f9c8..e98db8b 100644 --- a/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/MixinAnvilChunkLoader.java +++ b/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/MixinAnvilChunkLoader.java @@ -1,17 +1,13 @@ package org.embeddedt.archaicfix.mixins.common.lighting; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.AnvilChunkLoader; -import org.embeddedt.archaicfix.lighting.api.IChunkLightingData; import org.embeddedt.archaicfix.lighting.api.ILightingEngineProvider; -import org.embeddedt.archaicfix.lighting.world.lighting.LightingHooks; 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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(AnvilChunkLoader.class) public abstract class MixinAnvilChunkLoader { @@ -24,30 +20,4 @@ public abstract class MixinAnvilChunkLoader { private void onConstructed(World world, Chunk chunkIn, CallbackInfo callbackInfo) { ((ILightingEngineProvider) world).getLightingEngine().processLightUpdates(); } - - /** - * Injects the deserialization logic for chunk data on load so we can extract whether or not we've populated light yet. - * - * @author Angeline - */ - @Inject(method = "readChunkFromNBT", at = @At("RETURN")) - private void onReadChunkFromNBT(World world, NBTTagCompound compound, CallbackInfoReturnable cir) { - Chunk chunk = cir.getReturnValue(); - - LightingHooks.readNeighborLightChecksFromNBT(chunk, compound); - - ((IChunkLightingData) chunk).setLightInitialized(compound.getBoolean("LightPopulated")); - - } - - /** - * Injects the serialization logic for chunk data on save so we can store whether or not we've populated light yet. - * @author Angeline - */ - @Inject(method = "writeChunkToNBT", at = @At("RETURN")) - private void onWriteChunkToNBT(Chunk chunk, World world, NBTTagCompound compound, CallbackInfo ci) { - LightingHooks.writeNeighborLightChecksToNBT(chunk, compound); - - compound.setBoolean("LightPopulated", ((IChunkLightingData) chunk).isLightInitialized()); - } } diff --git a/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/base/MixinAnvilChunkLoaderBase.java b/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/base/MixinAnvilChunkLoaderBase.java new file mode 100644 index 0000000..abf5c80 --- /dev/null +++ b/src/main/java/org/embeddedt/archaicfix/mixins/common/lighting/base/MixinAnvilChunkLoaderBase.java @@ -0,0 +1,42 @@ +package org.embeddedt.archaicfix.mixins.common.lighting.base; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.storage.AnvilChunkLoader; +import org.embeddedt.archaicfix.lighting.api.IChunkLightingData; +import org.embeddedt.archaicfix.lighting.world.lighting.LightingHooks; +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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AnvilChunkLoader.class) +public abstract class MixinAnvilChunkLoaderBase { + /** + * Injects the deserialization logic for chunk data on load so we can extract whether or not we've populated light yet. + * + * @author Angeline + */ + @Inject(method = "readChunkFromNBT", at = @At("RETURN")) + private void onReadChunkFromNBT(World world, NBTTagCompound compound, CallbackInfoReturnable cir) { + Chunk chunk = cir.getReturnValue(); + + LightingHooks.readNeighborLightChecksFromNBT(chunk, compound); + + ((IChunkLightingData) chunk).setLightInitialized(compound.getBoolean("LightPopulated")); + + } + + /** + * Injects the serialization logic for chunk data on save so we can store whether or not we've populated light yet. + * @author Angeline + */ + @Inject(method = "writeChunkToNBT", at = @At("RETURN")) + private void onWriteChunkToNBT(Chunk chunk, World world, NBTTagCompound compound, CallbackInfo ci) { + LightingHooks.writeNeighborLightChecksToNBT(chunk, compound); + + compound.setBoolean("LightPopulated", ((IChunkLightingData) chunk).isLightInitialized()); + } +}