This commit is contained in:
cyberpwn
2022-09-16 03:24:56 -04:00
parent 00d099383b
commit 243ef8c0be
@@ -123,18 +123,24 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
@EventHandler @EventHandler
public void onWorldInit(WorldInitEvent event) { public void onWorldInit(WorldInitEvent event) {
try { try {
ServerLevel serverLevel = ((CraftWorld)event.getWorld()).getHandle(); if(world.name().equals(event.getWorld().getName()) && world.getRawWorldSeed() == event.getWorld().getSeed()) {
Engine engine = getEngine(event.getWorld()); ServerLevel serverLevel = ((CraftWorld)event.getWorld()).getHandle();
Class<?> clazz = serverLevel.getChunkSource().chunkMap.generator.getClass(); Engine engine = getEngine(event.getWorld());
Field biomeSource = getField(clazz, "c"); Class<?> clazz = serverLevel.getChunkSource().chunkMap.generator.getClass();
biomeSource.setAccessible(true); Field biomeSource = getField(clazz, "c");
Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); biomeSource.setAccessible(true);
unsafeField.setAccessible(true); Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
Unsafe unsafe = (Unsafe) unsafeField.get(null); unsafeField.setAccessible(true);
CustomBiomeSource customBiomeSource = new CustomBiomeSource(event.getWorld().getSeed(), engine, event.getWorld()); Unsafe unsafe = (Unsafe) unsafeField.get(null);
unsafe.putObject(biomeSource.get(serverLevel.getChunkSource().chunkMap.generator), unsafe.objectFieldOffset(biomeSource), customBiomeSource); CustomBiomeSource customBiomeSource = new CustomBiomeSource(event.getWorld().getSeed(), engine, event.getWorld());
biomeSource.set(serverLevel.getChunkSource().chunkMap.generator, customBiomeSource); unsafe.putObject(biomeSource.get(serverLevel.getChunkSource().chunkMap.generator), unsafe.objectFieldOffset(biomeSource), customBiomeSource);
Iris.info("Injected Iris Biome Source into " + event.getWorld().getName()); biomeSource.set(serverLevel.getChunkSource().chunkMap.generator, customBiomeSource);
Iris.info("Injected Iris Biome Source into " + event.getWorld().getName());
}
else {
Iris.info("World " + event.getWorld().getName() + " is not an Iris world in this context");
}
} }
catch(Throwable e) { catch(Throwable e) {