Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"))
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/org/embeddedt/archaicfix/ArchaicFix.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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";
Expand Down Expand Up @@ -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();
}

Expand Down
6 changes: 5 additions & 1 deletion src/main/java/org/embeddedt/archaicfix/asm/Mixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/org/embeddedt/archaicfix/asm/TargetedMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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<Chunk> 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());
}
}
Original file line number Diff line number Diff line change
@@ -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<Chunk> 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());
}
}