make emergency crash method unique

This commit is contained in:
FalsePattern committed 2024-06-09 13:32:43 +02:00
1 parent 6eeafe5a23
commit ca5f27dffc
1 file changed
+13 -10
@@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -34,18 +35,20 @@ public abstract class ChunkMixin implements ChunkBiomeHook {
public World worldObj;
@Shadow
private byte[] blockBiomeArray;
private short[] blockBiomeShortArray;
@Unique
private short[] eid$blockBiomeShortArray;
@Inject(method = "<init>(Lnet/minecraft/world/World;II)V",
at = @At(value = "RETURN"),
require = 1)
private void initShortArray(World p_i1995_1_, int p_i1995_2_, int p_i1995_3_, CallbackInfo ci) {
blockBiomeArray = null;
blockBiomeShortArray = new short[16 * 16];
Arrays.fill(blockBiomeShortArray, (short) -1);
eid$blockBiomeShortArray = new short[16 * 16];
Arrays.fill(eid$blockBiomeShortArray, (short) -1);
}
private void emergencyCrash() {
@Unique
private void eid$emergencyCrash() {
val crashMSG = "A mod that is incompatible with " + Tags.MODNAME + " has tried to access the biome array of a" +
" chunk like in vanilla! Crashing in fear of potential world corruption!\n" +
"Please report this issue on https://github.com/FalsePattern/EndlessIDs ASAP!";
@@ -57,14 +60,14 @@ public abstract class ChunkMixin implements ChunkBiomeHook {
at = @At(value = "HEAD"),
require = 1)
private void crashSetBiomeArray(byte[] p_76616_1_, CallbackInfo ci) {
emergencyCrash();
eid$emergencyCrash();
}
@Inject(method = "getBiomeArray",
at = @At(value = "HEAD"),
require = 1)
private void crashGetBiomeArray(CallbackInfoReturnable<byte[]> cir) {
emergencyCrash();
eid$emergencyCrash();
}
/**
@@ -73,7 +76,7 @@ public abstract class ChunkMixin implements ChunkBiomeHook {
*/
@Overwrite
public BiomeGenBase getBiomeGenForWorldCoords(int x, int z, WorldChunkManager manager) {
int id = this.blockBiomeShortArray[z << 4 | x] & ExtendedConstants.biomeIDMask;
int id = this.eid$blockBiomeShortArray[z << 4 | x] & ExtendedConstants.biomeIDMask;
if (id == ExtendedConstants.biomeIDNull) {
//Source: https://github.com/embeddedt/ArchaicFix/blob/3d1392f4db5a7221534a6f9b00c0c36a49d9be59/src/main/java/org/embeddedt/archaicfix/mixins/common/core/MixinChunk.java#L52
if (this.worldObj.isRemote) {
@@ -81,7 +84,7 @@ public abstract class ChunkMixin implements ChunkBiomeHook {
}
BiomeGenBase gen = manager.getBiomeGenAt((this.xPosition << 4) + x, (this.zPosition << 4) + z);
id = gen.biomeID;
this.blockBiomeShortArray[z << 4 | x] = (short) (id & ExtendedConstants.biomeIDMask);
this.eid$blockBiomeShortArray[z << 4 | x] = (short) (id & ExtendedConstants.biomeIDMask);
}
return BiomeGenBase.getBiome(id) == null ? BiomeGenBase.plains : BiomeGenBase.getBiome(id);
@@ -89,11 +92,11 @@ public abstract class ChunkMixin implements ChunkBiomeHook {
@Override
public short[] getBiomeShortArray() {
return blockBiomeShortArray;
return eid$blockBiomeShortArray;
}
@Override
public void setBiomeShortArray(short[] data) {
blockBiomeShortArray = data;
eid$blockBiomeShortArray = data;
}
}