mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-03 16:36:00 +00:00
Merge branch 'v3.4.3' into iris4
This commit is contained in:
commit
302e02ddac
@ -54,6 +54,18 @@ public class WrappedField<C, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void set(T value) throws IllegalAccessException {
|
||||||
|
set(null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(C instance, T value) throws IllegalAccessException {
|
||||||
|
if (field == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
field.set(instance, value);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasFailed() {
|
public boolean hasFailed() {
|
||||||
return field == null;
|
return field == null;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.*;
|
import net.minecraft.core.*;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
@ -42,6 +43,7 @@ import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_19_R1.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_19_R1.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -49,16 +51,15 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -159,11 +160,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -233,4 +229,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.HolderSet;
|
import net.minecraft.core.HolderSet;
|
||||||
@ -47,23 +48,21 @@ import org.bukkit.craftbukkit.v1_19_R2.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_19_R2.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_19_R2.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.*;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -164,11 +163,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -238,4 +232,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.HolderSet;
|
import net.minecraft.core.HolderSet;
|
||||||
@ -47,6 +48,7 @@ import org.bukkit.craftbukkit.v1_19_R3.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_19_R3.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_19_R3.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -54,16 +56,15 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -164,11 +165,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -238,4 +234,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.HolderSet;
|
import net.minecraft.core.HolderSet;
|
||||||
@ -47,6 +48,7 @@ import org.bukkit.craftbukkit.v1_20_R1.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_20_R1.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_20_R1.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -54,16 +56,15 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -164,11 +165,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -238,4 +234,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.HolderSet;
|
import net.minecraft.core.HolderSet;
|
||||||
@ -47,6 +48,7 @@ import org.bukkit.craftbukkit.v1_20_R2.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_20_R2.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_20_R2.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -54,16 +56,15 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -164,11 +165,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -238,4 +234,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import com.volmit.iris.util.scheduling.S;
|
import com.volmit.iris.util.scheduling.S;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
@ -50,6 +51,7 @@ import org.bukkit.craftbukkit.v1_20_R3.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_20_R3.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_20_R3.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -57,16 +59,15 @@ import java.util.concurrent.ExecutionException;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -167,11 +168,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -241,4 +237,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.HolderSet;
|
import net.minecraft.core.HolderSet;
|
||||||
@ -47,21 +48,21 @@ import org.bukkit.craftbukkit.v1_20_R4.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_20_R4.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_20_R4.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -162,11 +163,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -236,4 +232,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.volmit.iris.util.collection.KMap;
|
|||||||
import com.volmit.iris.util.collection.KSet;
|
import com.volmit.iris.util.collection.KSet;
|
||||||
import com.volmit.iris.util.mantle.MantleFlag;
|
import com.volmit.iris.util.mantle.MantleFlag;
|
||||||
import com.volmit.iris.util.math.Position2;
|
import com.volmit.iris.util.math.Position2;
|
||||||
|
import com.volmit.iris.util.reflect.WrappedField;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.HolderSet;
|
import net.minecraft.core.HolderSet;
|
||||||
@ -47,22 +48,22 @@ import org.bukkit.craftbukkit.v1_21_R1.CraftWorld;
|
|||||||
import org.bukkit.craftbukkit.v1_21_R1.generator.CustomChunkGenerator;
|
import org.bukkit.craftbukkit.v1_21_R1.generator.CustomChunkGenerator;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
public class IrisChunkGenerator extends CustomChunkGenerator {
|
public class IrisChunkGenerator extends CustomChunkGenerator {
|
||||||
|
private static final WrappedField<ChunkGenerator, BiomeSource> BIOME_SOURCE;
|
||||||
private final ChunkGenerator delegate;
|
private final ChunkGenerator delegate;
|
||||||
private final Engine engine;
|
private final Engine engine;
|
||||||
private final BiomeSource biomeSource;
|
|
||||||
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
private final KMap<ResourceKey<Structure>, KSet<String>> structures = new KMap<>();
|
||||||
|
|
||||||
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
public IrisChunkGenerator(ChunkGenerator delegate, long seed, Engine engine, World world) {
|
||||||
super(((CraftWorld) world).getHandle(), delegate, null);
|
super(((CraftWorld) world).getHandle(), edit(delegate, new CustomBiomeSource(seed, engine, world)), null);
|
||||||
this.delegate = delegate;
|
this.delegate = delegate;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
this.biomeSource = new CustomBiomeSource(seed, engine, world);
|
|
||||||
var dimension = engine.getDimension();
|
var dimension = engine.getDimension();
|
||||||
|
|
||||||
KSet<IrisJigsawStructure> placements = new KSet<>();
|
KSet<IrisJigsawStructure> placements = new KSet<>();
|
||||||
@ -163,11 +164,6 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeSource getBiomeSource() {
|
|
||||||
return biomeSource;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinY() {
|
public int getMinY() {
|
||||||
return delegate.getMinY();
|
return delegate.getMinY();
|
||||||
@ -237,4 +233,29 @@ public class IrisChunkGenerator extends CustomChunkGenerator {
|
|||||||
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelheightaccessor, RandomState randomstate) {
|
||||||
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
return delegate.getBaseColumn(i, j, levelheightaccessor, randomstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
Field biomeSource = null;
|
||||||
|
for (Field field : ChunkGenerator.class.getDeclaredFields()) {
|
||||||
|
if (!field.getType().equals(BiomeSource.class))
|
||||||
|
continue;
|
||||||
|
biomeSource = field;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (biomeSource == null)
|
||||||
|
throw new RuntimeException("Could not find biomeSource field in ChunkGenerator!");
|
||||||
|
BIOME_SOURCE = new WrappedField<>(ChunkGenerator.class, biomeSource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ChunkGenerator edit(ChunkGenerator generator, BiomeSource source) {
|
||||||
|
try {
|
||||||
|
BIOME_SOURCE.set(generator, source);
|
||||||
|
if (generator instanceof CustomChunkGenerator custom)
|
||||||
|
BIOME_SOURCE.set(custom.getDelegate(), source);
|
||||||
|
|
||||||
|
return generator;
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user