From ba8e06037080107a0b6f46354d6e9497e043d0be Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Thu, 9 Jun 2022 22:09:32 +0200 Subject: [PATCH] It """works""". --- .../iris/core/nms/v19_1/NMSBinding19_1.java | 53 +++++++++++++++++-- .../engine/actuator/IrisBiomeActuator.java | 2 +- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java b/src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java index 1b7f67507..2e2713488 100644 --- a/src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java +++ b/src/main/java/com/volmit/iris/core/nms/v19_1/NMSBinding19_1.java @@ -39,10 +39,15 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.core.*; import net.minecraft.nbt.NbtIo; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.BitStorage; +import net.minecraft.util.Mth; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.LevelChunkSection; +import net.minecraft.world.level.chunk.Palette; +import net.minecraft.world.level.chunk.PalettedContainer; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -337,13 +342,46 @@ public class NMSBinding19_1 implements INMSBinding { public void forceBiomeInto(int x, int y, int z, Object somethingVeryDirty, ChunkGenerator.BiomeGrid chunk) { try { ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk); - s.setBiome(x, y, z, (Holder) somethingVeryDirty); // probably not safe? it said it wanted a holder, so i made it a holder... + Holder biome = (Holder) somethingVeryDirty; + s.setBiome(x, y, z, biome); + /*int l = QuartPos.fromBlock(s.getMinBuildHeight()); + int i1 = l + QuartPos.fromBlock(s.getHeight()) - 1; + PalettedContainer> palette = getPalette(s, s.getSectionIndex(QuartPos.toBlock(Mth.clamp(y, l, i1)))); + int index = getPaletteIndex(x, y, z, s, palette); + int data = getPaletteDataId(palette, biome); + setPaletteData(palette, index, data);*/ } catch(IllegalAccessException e) { Iris.reportError(e); e.printStackTrace(); } } + private PalettedContainer> getPalette(ChunkAccess ca, int index) { + LevelChunkSection[] sections = fieldForClass(LevelChunkSection[].class, ChunkAccess.class, ca); + return fieldForClass(PalettedContainer.class, LevelChunkSection.class, sections[index]); + } + + private int getPaletteIndex(int x, int y, int z, ChunkAccess s, PalettedContainer palette) { + int l = QuartPos.fromBlock(s.getMinBuildHeight()); + int i1 = l + QuartPos.fromBlock(s.getHeight()) - 1; + int j1 = Mth.clamp(y, l, i1); + return fieldForClass(PalettedContainer.Strategy.class, PalettedContainer.class, palette).getIndex(x & 3, j1 & 3, z & 3); + } + + private > int getPaletteDataId(PalettedContainer palette, T data) throws ClassNotFoundException { + Class dataType = getClassType(PalettedContainer.class, 1); + Object paletteData = fieldFor(dataType, palette); + Palette fuckinFinally = fieldForClass(Palette.class,dataType, paletteData); + return fuckinFinally.idFor(data); + } + + private void setPaletteData(PalettedContainer palette, int index, int data) throws ClassNotFoundException { + Class dataType = getClassType(PalettedContainer.class, 1); + Object paletteData = fieldFor(dataType, palette); + BitStorage storage = fieldForClass(BitStorage.class, dataType, paletteData); + storage.set(index, data); + } + private Field getFieldForBiomeStorage(Object storage) { Field f = biomeStorageCache; @@ -405,7 +443,7 @@ public class NMSBinding19_1 implements INMSBinding { if(i.getReturnType().equals(returns)) { i.setAccessible(true); try { - Iris.info("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); + Iris.debug("[NMS] Found " + returns.getSimpleName() + " in " + in.getClass().getSimpleName() + "." + i.getName() + "()"); return i.invoke(in); } catch(Throwable e) { e.printStackTrace(); @@ -422,16 +460,21 @@ public class NMSBinding19_1 implements INMSBinding { @SuppressWarnings("unchecked") private static T fieldForClass(Class returnType, Class sourceType, Object in) { - for(Field i : sourceType.getFields()) + for(Field i : sourceType.getDeclaredFields()) { if(i.getType().equals(returnType)) { i.setAccessible(true); try { - Iris.info("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); - return (T)i.get(in); + Iris.debug("[NMS] Found " + returnType.getSimpleName() + " in " + sourceType.getSimpleName() + "." + i.getName()); + return (T) i.get(in); } catch(IllegalAccessException e) { e.printStackTrace(); } } + } return null; } + + private static Class getClassType(Class type, int ordinal) { + return type.getDeclaredClasses()[ordinal]; + } } diff --git a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java index c93fd739d..332e18b3c 100644 --- a/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java +++ b/src/main/java/com/volmit/iris/engine/actuator/IrisBiomeActuator.java @@ -67,7 +67,7 @@ public class IrisBiomeActuator extends EngineAssignedActuator { @Override public void onActuate(int x, int z, Hunk h, boolean multicore) { PrecisionStopwatch p = PrecisionStopwatch.start(); - BurstExecutor burst = burst().burst(multicore); + BurstExecutor burst = burst().burst(false); for(int xf = 0; xf < h.getWidth(); xf++) { int finalXf = xf;