Fixes
This commit is contained in:
parent
178836965d
commit
20bb6379bf
22 changed files with 161 additions and 56 deletions
|
@ -8,7 +8,6 @@ import org.jetbrains.annotations.NotNull;
|
|||
import com.google.common.collect.Lists;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.IntList;
|
||||
|
||||
import me.shedaniel.math.Point;
|
||||
import me.shedaniel.math.Rectangle;
|
||||
import me.shedaniel.rei.api.EntryStack;
|
||||
|
@ -17,12 +16,10 @@ import me.shedaniel.rei.api.widgets.Widgets;
|
|||
import me.shedaniel.rei.gui.entries.RecipeEntry;
|
||||
import me.shedaniel.rei.gui.entries.SimpleRecipeEntry;
|
||||
import me.shedaniel.rei.gui.widget.Widget;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.client.gui.DrawableHelper;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import ru.betterend.util.LangUtil;
|
||||
|
||||
public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay> {
|
||||
|
|
|
@ -9,11 +9,9 @@ import org.jetbrains.annotations.NotNull;
|
|||
import me.shedaniel.rei.api.EntryStack;
|
||||
import me.shedaniel.rei.api.TransferRecipeDisplay;
|
||||
import me.shedaniel.rei.server.ContainerInfo;
|
||||
|
||||
import net.minecraft.recipe.Recipe;
|
||||
import net.minecraft.screen.ScreenHandler;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import ru.betterend.recipe.AnvilSmithingRecipe;
|
||||
|
||||
public class REIAnvilDisplay implements TransferRecipeDisplay {
|
||||
|
|
|
@ -3,14 +3,11 @@ package ru.betterend.compat;
|
|||
import me.shedaniel.rei.api.EntryStack;
|
||||
import me.shedaniel.rei.api.RecipeHelper;
|
||||
import me.shedaniel.rei.api.plugins.REIPluginV0;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.recipe.BlastingRecipe;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.recipe.AlloyingRecipe;
|
||||
import ru.betterend.recipe.AnvilSmithingRecipe;
|
||||
|
|
|
@ -8,7 +8,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||
import net.minecraft.client.recipebook.ClientRecipeBook;
|
||||
import net.minecraft.client.recipebook.RecipeBookGroup;
|
||||
import net.minecraft.recipe.Recipe;
|
||||
|
||||
import ru.betterend.recipe.AlloyingRecipe;
|
||||
|
||||
@Mixin(ClientRecipeBook.class)
|
||||
|
|
|
@ -16,6 +16,7 @@ import net.minecraft.client.sound.MusicType;
|
|||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.sound.MusicSound;
|
||||
import net.minecraft.world.World;
|
||||
import ru.betterend.util.MHelper;
|
||||
|
||||
@Mixin(MinecraftClient.class)
|
||||
public class MinecraftClientMixin {
|
||||
|
@ -36,7 +37,7 @@ public class MinecraftClientMixin {
|
|||
private void getEndMusic(CallbackInfoReturnable<MusicSound> info) {
|
||||
if (!(this.currentScreen instanceof CreditsScreen) && this.player != null) {
|
||||
if (this.player.world.getRegistryKey() == World.END) {
|
||||
if (this.inGameHud.getBossBarHud().shouldPlayDragonMusic()) {
|
||||
if (this.inGameHud.getBossBarHud().shouldPlayDragonMusic() && MHelper.lengthSqr(this.player.getX(), this.player.getZ()) < 250000) {
|
||||
info.setReturnValue(MusicType.DRAGON);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -19,7 +19,6 @@ import net.minecraft.screen.ScreenHandlerContext;
|
|||
import net.minecraft.screen.ScreenHandlerType;
|
||||
import net.minecraft.tag.BlockTags;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import ru.betterend.recipe.AnvilSmithingRecipe;
|
||||
|
||||
@Mixin(AnvilScreenHandler.class)
|
||||
|
|
|
@ -1,15 +1,8 @@
|
|||
package ru.betterend.mixin.common;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.ChunkRegion;
|
||||
import net.minecraft.world.gen.StructureAccessor;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
import ru.betterend.registry.DefaultBiomeFeatures;
|
||||
|
||||
@Mixin(ChunkGenerator.class)
|
||||
public class ChunkGeneratorMixin {
|
||||
|
|
|
@ -1,17 +1,11 @@
|
|||
package ru.betterend.mixin.common;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.DefaultBiomeCreator;
|
||||
import net.minecraft.world.biome.GenerationSettings;
|
||||
import net.minecraft.world.gen.GenerationStep;
|
||||
import net.minecraft.world.gen.feature.ConfiguredFeatures;
|
||||
import net.minecraft.world.gen.feature.ConfiguredStructureFeatures;
|
||||
import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders;
|
||||
import ru.betterend.registry.DefaultBiomeFeatures;
|
||||
|
||||
@Mixin(DefaultBiomeCreator.class)
|
||||
public class DefaultBiomeCreatorMixin {
|
||||
|
@ -20,13 +14,13 @@ public class DefaultBiomeCreatorMixin {
|
|||
return null;
|
||||
};
|
||||
|
||||
@Overwrite
|
||||
/*@Overwrite
|
||||
public static Biome createEndHighlands() {
|
||||
GenerationSettings.Builder builder = (new GenerationSettings.Builder())
|
||||
.surfaceBuilder(ConfiguredSurfaceBuilders.END).structureFeature(ConfiguredStructureFeatures.END_CITY)
|
||||
.feature(GenerationStep.Feature.SURFACE_STRUCTURES, ConfiguredFeatures.END_GATEWAY)
|
||||
.feature(GenerationStep.Feature.VEGETAL_DECORATION, ConfiguredFeatures.CHORUS_PLANT)
|
||||
.feature(DefaultBiomeFeatures.MOUNTAINS.getFeatureStep(), DefaultBiomeFeatures.MOUNTAINS.getFeatureConfigured());
|
||||
.structureFeature(DefaultBiomeFeatureRegistry.MOUNTAINS.getFeatureConfigured());
|
||||
return composeEndSpawnSettings(builder);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
|
59
src/main/java/ru/betterend/noise/VoronoiNoise.java
Normal file
59
src/main/java/ru/betterend/noise/VoronoiNoise.java
Normal file
|
@ -0,0 +1,59 @@
|
|||
package ru.betterend.noise;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import ru.betterend.util.MHelper;
|
||||
|
||||
public class VoronoiNoise {
|
||||
private static final Random RANDOM = new Random();
|
||||
final int seed;
|
||||
final double scale;
|
||||
final double separation;
|
||||
|
||||
public VoronoiNoise(int seed, double side, double separation) {
|
||||
this.seed = seed;
|
||||
this.scale = 1.0 / side;
|
||||
this.separation = MathHelper.clamp(separation, 0, 1);
|
||||
}
|
||||
|
||||
private int getSeed(int x, int y, int z) {
|
||||
int h = seed + x * 374761393 + y * 668265263 + z;
|
||||
h = (h ^ (h >> 13)) * 1274126177;
|
||||
return h ^ (h >> 16);
|
||||
}
|
||||
|
||||
public double sample(float x, float y, float z) {
|
||||
return sample(MHelper.floor(x), MHelper.floor(y), MHelper.floor(z));
|
||||
}
|
||||
|
||||
public double sample(int x, int y, int z) {
|
||||
double posX = x * scale;
|
||||
double posY = y * scale;
|
||||
double posZ = z * scale;
|
||||
int posXI = MHelper.floor(posX);
|
||||
int posYI = MHelper.floor(posY);
|
||||
int posZI = MHelper.floor(posZ);
|
||||
double distance = Double.MAX_VALUE;
|
||||
for (int px = -1; px < 2; px++) {
|
||||
double pointX = posXI + px;
|
||||
for (int py = -1; py < 2; py++) {
|
||||
double pointY = posYI + py;
|
||||
for (int pz = -1; pz < 2; pz++) {
|
||||
double pointZ = posZI + pz;
|
||||
RANDOM.setSeed(getSeed(posXI + px, posYI + py, posZI + pz));
|
||||
|
||||
double posXN = pointX + RANDOM.nextDouble() * separation;
|
||||
double posYN = pointY + RANDOM.nextDouble() * separation;
|
||||
double posZN = pointZ + RANDOM.nextDouble() * separation;
|
||||
|
||||
double dist2 = MHelper.lengthSqr(posXN - posX, posYN - posY, posZN - posZ);
|
||||
if (dist2 < distance) {
|
||||
distance = dist2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return distance;
|
||||
}
|
||||
}
|
|
@ -4,7 +4,6 @@ import com.google.gson.JsonObject;
|
|||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.inventory.Inventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -19,7 +18,6 @@ import net.minecraft.util.JsonHelper;
|
|||
import net.minecraft.util.collection.DefaultedList;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.registry.ItemTagRegistry;
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package ru.betterend.registry;
|
||||
|
||||
import net.minecraft.world.gen.GenerationStep.Feature;
|
||||
import ru.betterend.world.structures.EndStructureFeature;
|
||||
import ru.betterend.world.structures.features.StructureMountain;
|
||||
|
||||
public class DefaultBiomeFeatureRegistry {
|
||||
//public static final EndFeature MOUNTAINS = EndFeature.makeChunkFeature("mountains", new MountainFeature());
|
||||
public static final EndStructureFeature MOUNTAINS = new EndStructureFeature("mountains", new StructureMountain(), Feature.RAW_GENERATION, 6, 3);
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package ru.betterend.registry;
|
||||
|
||||
import ru.betterend.world.features.EndFeature;
|
||||
import ru.betterend.world.features.MountainFeature;
|
||||
|
||||
public class DefaultBiomeFeatures {
|
||||
public static final EndFeature MOUNTAINS = EndFeature.makeChunkFeature("mountains", new MountainFeature());
|
||||
}
|
|
@ -5,7 +5,6 @@ import ru.betterend.world.features.DoublePlantFeature;
|
|||
import ru.betterend.world.features.EndFeature;
|
||||
import ru.betterend.world.features.EndLakeFeature;
|
||||
import ru.betterend.world.features.MossyGlowshroomFeature;
|
||||
import ru.betterend.world.features.MountainFeature;
|
||||
import ru.betterend.world.features.SinglePlantFeature;
|
||||
import ru.betterend.world.features.VineFeature;
|
||||
|
||||
|
|
|
@ -5,11 +5,9 @@ import java.util.Arrays;
|
|||
import net.fabricmc.fabric.api.tag.TagRegistry;
|
||||
import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl;
|
||||
import net.fabricmc.fabric.impl.tool.attribute.handlers.ModdedToolsVanillaBlocksToolHandler;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tag.Tag;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import ru.betterend.BetterEnd;
|
||||
|
||||
public class ItemTagRegistry {
|
||||
|
|
|
@ -69,12 +69,28 @@ public class MHelper {
|
|||
return a > b ? a : b;
|
||||
}
|
||||
|
||||
public static float lengthSqr(float x, float y, float z) {
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
public static double lengthSqr(double x, double y, double z) {
|
||||
return x * x + y * y + z * z;
|
||||
}
|
||||
|
||||
public static float length(float x, float y, float z) {
|
||||
return (float) Math.sqrt(x * x + y * y + z * z);
|
||||
return (float) Math.sqrt(lengthSqr(x, y, z));
|
||||
}
|
||||
|
||||
public static float lengthSqr(float x, float y) {
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
public static double lengthSqr(double x, double y) {
|
||||
return x * x + y * y;
|
||||
}
|
||||
|
||||
public static float length(float x, float y) {
|
||||
return (float) Math.sqrt(x * x + y * y);
|
||||
return (float) Math.sqrt(lengthSqr(x, y));
|
||||
}
|
||||
|
||||
public static float dot(float x1, float y1, float z1, float x2, float y2, float z2) {
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.google.common.collect.Sets;
|
|||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.BlockPos.Mutable;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.ServerWorldAccess;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
@ -39,6 +40,7 @@ public abstract class SDF {
|
|||
return this;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void fillRecursive(ServerWorldAccess world, BlockPos start, int dx, int dy, int dz) {
|
||||
Map<BlockPos, PosInfo> mapWorld = Maps.newHashMap();
|
||||
Map<BlockPos, PosInfo> addInfo = Maps.newHashMap();
|
||||
|
@ -107,17 +109,19 @@ public abstract class SDF {
|
|||
ends.add(new BlockPos(0, 0, 0));
|
||||
boolean run = true;
|
||||
|
||||
Mutable bPos = new Mutable();
|
||||
|
||||
while (run) {
|
||||
for (BlockPos center: ends) {
|
||||
for (Direction dir: Direction.values()) {
|
||||
BlockPos pos = center.offset(dir);
|
||||
BlockPos wpos = pos.add(start);
|
||||
bPos.set(center).move(dir);
|
||||
BlockPos wpos = bPos.add(start);
|
||||
|
||||
if (!blocks.contains(pos) && canReplace.apply(world.getBlockState(wpos))) {
|
||||
if (this.getDistance(pos.getX(), pos.getY(), pos.getZ()) < 0) {
|
||||
if (!blocks.contains(bPos) && canReplace.apply(world.getBlockState(wpos))) {
|
||||
if (this.getDistance(bPos.getX(), bPos.getY(), bPos.getZ()) < 0) {
|
||||
BlockState state = getBlockState(wpos);
|
||||
PosInfo.create(mapWorld, addInfo, wpos).setState(state);
|
||||
add.add(pos);
|
||||
add.add(bPos.toImmutable());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -152,6 +156,8 @@ public abstract class SDF {
|
|||
}
|
||||
|
||||
public void fillRecursive(StructureWorld world, BlockPos start) {
|
||||
long t = System.currentTimeMillis();
|
||||
|
||||
Map<BlockPos, PosInfo> mapWorld = Maps.newHashMap();
|
||||
Map<BlockPos, PosInfo> addInfo = Maps.newHashMap();
|
||||
Set<BlockPos> blocks = Sets.newHashSet();
|
||||
|
@ -160,17 +166,19 @@ public abstract class SDF {
|
|||
ends.add(new BlockPos(0, 0, 0));
|
||||
boolean run = true;
|
||||
|
||||
Mutable bPos = new Mutable();
|
||||
|
||||
while (run) {
|
||||
for (BlockPos center: ends) {
|
||||
for (Direction dir: Direction.values()) {
|
||||
BlockPos pos = center.offset(dir);
|
||||
BlockPos wpos = pos.add(start);
|
||||
bPos.set(center).move(dir);
|
||||
BlockPos wpos = bPos.add(start);
|
||||
|
||||
if (!blocks.contains(pos)) {
|
||||
if (this.getDistance(pos.getX(), pos.getY(), pos.getZ()) < 0) {
|
||||
if (!blocks.contains(bPos)) {
|
||||
if (this.getDistance(bPos.getX(), bPos.getY(), bPos.getZ()) < 0) {
|
||||
BlockState state = getBlockState(wpos);
|
||||
PosInfo.create(mapWorld, addInfo, wpos).setState(state);
|
||||
add.add(pos);
|
||||
add.add(bPos.toImmutable());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -198,5 +206,8 @@ public abstract class SDF {
|
|||
BlockState state = postProcess.apply(info);
|
||||
world.setBlock(info.getPos(), state);
|
||||
});
|
||||
|
||||
t = System.currentTimeMillis() - t;
|
||||
System.out.println("SDF " + t + " ms");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
|||
import ru.betterend.registry.BiomeRegistry;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
|
||||
@Deprecated
|
||||
public class MountainFeature extends DefaultFeature {
|
||||
private static final Mutable POS = new Mutable();
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@ import net.minecraft.world.chunk.Chunk;
|
|||
|
||||
public class StructureWorld {
|
||||
private Map<ChunkPos, Part> parts = Maps.newHashMap();
|
||||
private ChunkPos lastPos;
|
||||
private Part lastPart;
|
||||
private int minX = Integer.MAX_VALUE;
|
||||
private int minY = Integer.MAX_VALUE;
|
||||
private int minZ = Integer.MAX_VALUE;
|
||||
|
@ -46,6 +48,12 @@ public class StructureWorld {
|
|||
|
||||
public void setBlock(BlockPos pos, BlockState state) {
|
||||
ChunkPos cPos = new ChunkPos(pos);
|
||||
|
||||
if (cPos.equals(lastPos)) {
|
||||
lastPart.addBlock(pos, state);
|
||||
return;
|
||||
}
|
||||
|
||||
Part part = parts.get(cPos);
|
||||
if (part == null) {
|
||||
part = new Part();
|
||||
|
@ -59,6 +67,9 @@ public class StructureWorld {
|
|||
if (pos.getY() < minY) minY = pos.getY();
|
||||
if (pos.getY() > maxY) maxY = pos.getY();
|
||||
part.addBlock(pos, state);
|
||||
|
||||
lastPos = cPos;
|
||||
lastPart = part;
|
||||
}
|
||||
|
||||
public boolean placeChunk(StructureWorldAccess world, ChunkPos chunkPos) {
|
||||
|
|
|
@ -37,7 +37,10 @@ public abstract class SDFStructureFeature extends StructureFeatureBase {
|
|||
int y = chunkGenerator.getHeight(x, z, Type.WORLD_SURFACE_WG);
|
||||
if (y > 5) {
|
||||
BlockPos start = new BlockPos(x, y, z);
|
||||
long t = System.currentTimeMillis();
|
||||
VoxelPiece piece = new VoxelPiece((world) -> { ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); }, random.nextInt());
|
||||
t = System.currentTimeMillis() - t;
|
||||
System.out.println("Structure " + t + " ms");
|
||||
this.children.add(piece);
|
||||
}
|
||||
this.setBoundingBoxFromChildren();
|
||||
|
|
|
@ -31,8 +31,6 @@ import ru.betterend.util.sdf.primitive.SDFSphere;
|
|||
public class StructureGiantMossyGlowshroom extends SDFStructureFeature {
|
||||
@Override
|
||||
protected SDF getSDF(BlockPos center, Random random) {
|
||||
System.out.println(center);
|
||||
|
||||
SDFCapedCone cone1 = new SDFCapedCone().setHeight(2.5F).setRadius1(1.5F).setRadius2(2.5F);
|
||||
SDFCapedCone cone2 = new SDFCapedCone().setHeight(3F).setRadius1(2.5F).setRadius2(13F);
|
||||
SDF posedCone2 = new SDFTranslate().setTranslate(0, 5, 0).setSource(cone2);
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package ru.betterend.world.structures.features;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import ru.betterend.noise.VoronoiNoise;
|
||||
import ru.betterend.util.MHelper;
|
||||
import ru.betterend.util.sdf.SDF;
|
||||
import ru.betterend.util.sdf.operator.SDFDisplacement;
|
||||
import ru.betterend.util.sdf.operator.SDFScale;
|
||||
import ru.betterend.util.sdf.operator.SDFSmoothUnion;
|
||||
import ru.betterend.util.sdf.operator.SDFTranslate;
|
||||
import ru.betterend.util.sdf.primitive.SDFCapedCone;
|
||||
|
||||
public class StructureMountain extends SDFStructureFeature {
|
||||
@Override
|
||||
protected SDF getSDF(BlockPos center, Random random) {
|
||||
SDFCapedCone cone1 = new SDFCapedCone().setHeight(20F).setRadius1(40F).setRadius2(0F);
|
||||
SDFCapedCone cone2 = new SDFCapedCone().setHeight(10F).setRadius1(0F).setRadius2(40F);
|
||||
cone1.setBlock(Blocks.END_STONE);
|
||||
cone2.setBlock(Blocks.END_STONE);
|
||||
SDF mountain = new SDFSmoothUnion().setRadius(15)
|
||||
.setSourceA(new SDFTranslate().setTranslate(0, 20, 1).setSource(cone1))
|
||||
.setSourceB(new SDFTranslate().setTranslate(0, -10, 1).setSource(cone2));
|
||||
mountain = new SDFScale().setScale(MHelper.randRange(1F, 2.5F, random)).setSource(mountain);
|
||||
VoronoiNoise noise = new VoronoiNoise(random.nextInt(), 20, 0.75);
|
||||
mountain = new SDFDisplacement().setFunction((pos) -> {
|
||||
return (float) noise.sample(pos.getX(), pos.getY(), pos.getZ()) * 15F;
|
||||
}).setSource(mountain);
|
||||
return mountain;
|
||||
}
|
||||
}
|
|
@ -22,13 +22,11 @@ public class VoxelPiece extends BasePiece {
|
|||
world = new StructureWorld();
|
||||
function.accept(world);
|
||||
this.boundingBox = world.getBounds();
|
||||
System.out.println(this.boundingBox);
|
||||
}
|
||||
|
||||
public VoxelPiece(StructureManager manager, CompoundTag tag) {
|
||||
super(StructureRegistry.VOXEL_PIECE, tag);
|
||||
this.boundingBox = world.getBounds();
|
||||
System.out.println(this.boundingBox);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue