1
0
Fork 0

class cleanup

This commit is contained in:
Sen 2025-09-07 10:20:32 +02:00
parent ca97bf2e18
commit 6c34d24b8c
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
27 changed files with 132 additions and 129 deletions

View file

@ -173,7 +173,6 @@ import common.tileentity.TileEntity;
import common.util.LocalPos;
import common.util.BoundingBox;
import common.util.CharValidator;
import common.util.ChunkPos;
import common.util.ExtMath;
import common.util.HitPosition;
import common.util.IntHashMap;
@ -577,13 +576,13 @@ public class Client implements IThreadListener {
private IntHashMap<Entity> entityIds;
@Variable(name = "chunk_view_distance", category = CVarCategory.RENDER, min = 2, max = 64, callback = DistanceFunction.class, display = "Sichtweite", unit = "Chunks")
@Variable(name = "chunk_view_distance", category = CVarCategory.RENDER, min = 2, max = 32, callback = DistanceFunction.class, display = "Sichtweite", unit = "Chunks")
public int renderDistance = 8;
@Variable(name = "chunk_build_time", category = CVarCategory.RENDER, min = 1, max = 100, display = "Zeit für Chunk-Bau", unit = "ms")
public int maxBuildTime = 8;
@Variable(name = "chunk_light_updates", category = CVarCategory.RENDER, min = 0, max = 10000, display = "Licht-Updates / Frame")
private int lightUpdates = 150;
@Variable(name = "chunk_light_range", category = CVarCategory.RENDER, min = 5, max = 1024, display = "Radius Licht-Updates")
@Variable(name = "chunk_light_range", category = CVarCategory.RENDER, min = 5, max = 512, display = "Radius Licht-Updates")
private int lightRange = 32;
@Variable(name = "draw_fov", category = CVarCategory.RENDER, min = 20.0f, max = 160.0f, display = "Sichtfeld (FOV)", unit = "°", precision = 1)
public float fov = 70.0f;

View file

@ -720,7 +720,7 @@ public class ClientPlayer implements IClientPlayer
for (SPacketMultiBlockChange.BlockUpdateData update : packetIn.getChangedBlocks())
{
this.world.setState(SPacketMultiBlockChange.getPos(packetIn.getChunkPos(), update.getRawPos()), update.getBlockState());
this.world.setState(SPacketMultiBlockChange.getPos(packetIn.getChunkPosX(), packetIn.getChunkPosZ(), update.getRawPos()), update.getBlockState());
}
}

View file

@ -34,6 +34,7 @@ import client.renderer.texture.Sprite;
import client.renderer.texture.TextureManager;
import client.renderer.texture.TextureMap;
import client.renderer.tileentity.SpecialRenderer;
import client.util.Vector3f;
import client.world.ChunkClient;
import common.block.Block;
import common.block.Material;
@ -73,7 +74,6 @@ import common.util.ParticleType;
import common.util.Util;
import common.util.Vec3;
import common.util.Vec3i;
import common.util.Vector3f;
import common.world.IBlockAccess;
import common.world.IWorldAccess;
import common.world.State;

View file

@ -8,12 +8,12 @@ import java.nio.FloatBuffer;
import org.lwjgl.opengl.GL20;
import client.util.FileUtils;
import client.util.Matrix4f;
import client.util.Vector3f;
import client.util.Vector4f;
import common.dimension.Shader;
import common.log.Log;
import common.util.Matrix4f;
import common.util.Vec3;
import common.util.Vector3f;
import common.util.Vector4f;
public class ShaderContext {
private static final FloatBuffer BUFFER = ByteBuffer.allocateDirect(16 << 2).order(ByteOrder.nativeOrder()).asFloatBuffer();

View file

@ -2,8 +2,8 @@ package client.renderer.blockmodel;
import java.util.Map;
import client.util.Vector3f;
import common.util.Facing;
import common.util.Vector3f;
public class BlockPart
{

View file

@ -1,7 +1,7 @@
package client.renderer.blockmodel;
import client.util.Vector3f;
import common.util.Facing;
import common.util.Vector3f;
public class BlockPartRotation {
public final Vector3f origin;

View file

@ -1,13 +1,13 @@
package client.renderer.blockmodel;
import client.renderer.texture.Sprite;
import client.util.Matrix4f;
import client.util.Vector3f;
import client.util.Vector4f;
import common.model.ModelRotation;
import common.util.ExtMath;
import common.util.Facing;
import common.util.Matrix4f;
import common.util.Vec3i;
import common.util.Vector3f;
import common.util.Vector4f;
public class FaceBakery
{
@ -64,6 +64,10 @@ public class FaceBakery
private static final float SCALE_ROTATION_22_5 = 1.0F / (float)Math.cos(0.39269909262657166D) - 1.0F;
private static final float SCALE_ROTATION_GENERAL = 1.0F / (float)Math.cos((Math.PI / 4D)) - 1.0F;
private static final Matrix4f[] MATRICES = new Matrix4f[ModelRotation.values().length];
private static final int[] QUARTERS_X = new int[ModelRotation.values().length];
private static final int[] QUARTERS_Y = new int[ModelRotation.values().length];
static {
FACINGS[Constants.DOWN_INDEX] = EnumFaceDirection.DOWN;
FACINGS[Constants.UP_INDEX] = EnumFaceDirection.UP;
@ -71,6 +75,64 @@ public class FaceBakery
FACINGS[Constants.SOUTH_INDEX] = EnumFaceDirection.SOUTH;
FACINGS[Constants.WEST_INDEX] = EnumFaceDirection.WEST;
FACINGS[Constants.EAST_INDEX] = EnumFaceDirection.EAST;
for(int z = 0; z < ModelRotation.values().length; z++) {
ModelRotation rot = ModelRotation.values()[z];
MATRICES[z] = new Matrix4f();
Matrix4f mat1 = new Matrix4f();
mat1.setIdentity();
Matrix4f.rotate((float)(-rot.rotX) * 0.017453292F, new Vector3f(1.0F, 0.0F, 0.0F), mat1, mat1);
QUARTERS_X[z] = ExtMath.absi(rot.rotX / 90);
Matrix4f mat2 = new Matrix4f();
mat2.setIdentity();
Matrix4f.rotate((float)(-rot.rotY) * 0.017453292F, new Vector3f(0.0F, 1.0F, 0.0F), mat2, mat2);
QUARTERS_Y[z] = ExtMath.absi(rot.rotY / 90);
Matrix4f.mul(mat2, mat1, MATRICES[z]);
}
}
private static Matrix4f getMatrix4d(ModelRotation rot) {
return MATRICES[rot.ordinal()];
}
public static Facing rotateFace(ModelRotation rot, Facing face) {
Facing dir = face;
int qx = QUARTERS_X[rot.ordinal()];
int qy = QUARTERS_Y[rot.ordinal()];
for(int i = 0; i < qx; ++i) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() != Facing.Axis.Y) {
for(int j = 0; j < qy; ++j) {
dir = dir.rotateAround(Facing.Axis.Y);
}
}
return dir;
}
private static int rotateVertex(ModelRotation rot, Facing face, int index) {
int idx = index;
int qx = QUARTERS_X[rot.ordinal()];
int qy = QUARTERS_Y[rot.ordinal()];
if(face.getAxis() == Facing.Axis.X) {
idx = (index + qx) % 4;
}
Facing dir = face;
for(int j = 0; j < qx; ++j) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() == Facing.Axis.Y) {
idx = (idx + qy) % 4;
}
return idx;
}
public BakedQuad makeBakedQuad(Vector3f posFrom, Vector3f posTo, BlockPartFace face, Sprite sprite, Facing facing, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade)
@ -147,7 +209,7 @@ public class FaceBakery
private void fillVertexData(int[] faceData, int vertexIndex, Facing facing, BlockPartFace partFace, float[] p_178402_5_, Sprite sprite, ModelRotation modelRotationIn, BlockPartRotation partRotation, boolean uvLocked, boolean shade)
{
Facing enumfacing = modelRotationIn.rotateFace(facing);
Facing enumfacing = rotateFace(modelRotationIn, facing);
int color = shade ? getFaceShadeColor(enumfacing) : 0xffffffff;
VertexInformation enumfacedirection$vertexinformation = EnumFaceDirection.getFacing(facing).getVertexInformation(vertexIndex);
Vector3f vector3f = new Vector3f(p_178402_5_[enumfacedirection$vertexinformation.xIndex], p_178402_5_[enumfacedirection$vertexinformation.yIndex], p_178402_5_[enumfacedirection$vertexinformation.zIndex]);
@ -221,8 +283,8 @@ public class FaceBakery
}
else
{
this.rotateScale(position, new Vector3f(0.5F, 0.5F, 0.5F), modelRotationIn.getMatrix4d(), new Vector3f(1.0F, 1.0F, 1.0F));
return modelRotationIn.rotateVertex(facing, vertexIndex);
this.rotateScale(position, new Vector3f(0.5F, 0.5F, 0.5F), getMatrix4d(modelRotationIn), new Vector3f(1.0F, 1.0F, 1.0F));
return rotateVertex(modelRotationIn, facing, vertexIndex);
}
}

View file

@ -233,7 +233,7 @@ public abstract class ModelBakery
if (face.cull == null)
builder.addGeneralQuad(faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade));
else
builder.addFaceQuad(modelRotationIn.rotateFace(face.cull), faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade));
builder.addFaceQuad(FaceBakery.rotateFace(modelRotationIn, face.cull), faceBakery.makeBakedQuad(blockpart.positionFrom, blockpart.positionTo, face, sprite, enumfacing, modelRotationIn, blockpart.partRotation, uvLocked, blockpart.shade));
}
}
return builder.makeBakedModel();

View file

@ -3,13 +3,13 @@ package client.renderer.blockmodel;
import java.util.List;
import client.renderer.texture.TextureMap;
import client.util.Vector3f;
import common.collect.Lists;
import common.collect.Maps;
import common.model.Model;
import common.model.ModelRotation;
import common.model.GuiPosition;
import common.util.Facing;
import common.util.Vector3f;
public class ModelBlock extends Model {
private final List<BlockPart> elements;

View file

@ -8,11 +8,11 @@ import client.renderer.model.ModelBox;
import client.renderer.texture.Sprite;
import client.renderer.texture.TextureMap;
import client.renderer.texture.TextureUtil;
import client.util.Vector3f;
import common.collect.Lists;
import common.collect.Maps;
import common.log.Log;
import common.util.Facing;
import common.util.Vector3f;
public abstract class ModelGenerator {
public static List<ModelBox> bakeModel(String textureLocation, int tx, int ty, int tw, int th, float x, float y, float z, int w, int h, int d)

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package common.util;
package client.util;
import java.io.Serializable;
import java.nio.FloatBuffer;

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package common.util;
package client.util;
import java.io.Serializable;
import java.nio.FloatBuffer;

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package common.util;
package client.util;
import java.io.Serializable;
import java.nio.FloatBuffer;

View file

@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package common.util;
package client.util;
import java.io.Serializable;
import java.nio.FloatBuffer;

View file

@ -3,7 +3,6 @@ package client.world;
import common.block.Block;
import common.init.Blocks;
import common.tileentity.TileEntity;
import common.util.Facing;
import common.util.LocalPos;
import common.world.BlockArray;
import common.world.Chunk;

View file

@ -1,9 +1,6 @@
package common.model;
import common.util.ExtMath;
import common.util.Facing;
import common.util.Matrix4f;
import common.util.Vector3f;
public enum ModelRotation {
X0_Y0(0, 0),
@ -22,62 +19,13 @@ public enum ModelRotation {
X270_Y90(270, 90),
X270_Y180(270, 180),
X270_Y270(270, 270);
private final Matrix4f matrix4d;
private final int quartersX;
private final int quartersY;
public final int rotX;
public final int rotY;
private ModelRotation(int x, int y) {
this.matrix4d = new Matrix4f();
Matrix4f mat1 = new Matrix4f();
mat1.setIdentity();
Matrix4f.rotate((float)(-x) * 0.017453292F, new Vector3f(1.0F, 0.0F, 0.0F), mat1, mat1);
this.quartersX = ExtMath.absi(x / 90);
Matrix4f mat2 = new Matrix4f();
mat2.setIdentity();
Matrix4f.rotate((float)(-y) * 0.017453292F, new Vector3f(0.0F, 1.0F, 0.0F), mat2, mat2);
this.quartersY = ExtMath.absi(y / 90);
Matrix4f.mul(mat2, mat1, this.matrix4d);
}
public Matrix4f getMatrix4d() {
return this.matrix4d;
}
public Facing rotateFace(Facing face) {
Facing dir = face;
for(int i = 0; i < this.quartersX; ++i) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() != Facing.Axis.Y) {
for(int j = 0; j < this.quartersY; ++j) {
dir = dir.rotateAround(Facing.Axis.Y);
}
}
return dir;
}
public int rotateVertex(Facing face, int index) {
int idx = index;
if(face.getAxis() == Facing.Axis.X) {
idx = (index + this.quartersX) % 4;
}
Facing dir = face;
for(int j = 0; j < this.quartersX; ++j) {
dir = dir.rotateAround(Facing.Axis.X);
}
if(dir.getAxis() == Facing.Axis.Y) {
idx = (idx + this.quartersY) % 4;
}
return idx;
this.rotX = x;
this.rotY = y;
}
public static ModelRotation getNorthRot(Facing face) {

View file

@ -25,7 +25,6 @@ import common.packet.CPacketSign;
import common.packet.CPacketSkin;
import common.util.LocalPos;
import common.util.CharValidator;
import common.util.ChunkPos;
import common.util.PortalType;
public interface IPlayer extends NetHandler {
@ -91,7 +90,7 @@ public interface IPlayer extends NetHandler {
void setSelectMode();
void sendPacket(Packet packet);
void setPlayerLocation(double x, double y, double z, float yaw, float pitch);
List<ChunkPos> getLoadedChunkList();
List getLoadedChunkList();
double getManagedX();
double getManagedZ();
void setManagedPos(double x, double z);

View file

@ -7,25 +7,26 @@ import common.network.IClientPlayer;
import common.network.Packet;
import common.network.PacketBuffer;
import common.util.LocalPos;
import common.util.ChunkPos;
import common.world.State;
public class SPacketMultiBlockChange implements Packet<IClientPlayer>
{
private ChunkPos chunkPosCoord;
private int chunkPosCoordX;
private int chunkPosCoordZ;
private SPacketMultiBlockChange.BlockUpdateData[] changedBlocks;
public static LocalPos getPos(ChunkPos pos, long position)
public static LocalPos getPos(int posX, int posZ, long position)
{
return new LocalPos(new LocalPos((pos.x << 4) + (int)(position >> 36 & 15L), (int)(position & 4294967295L), (pos.z << 4) + (int)(position >> 32 & 15L)));
return new LocalPos(new LocalPos((posX << 4) + (int)(position >> 36 & 15L), (int)(position & 4294967295L), (posZ << 4) + (int)(position >> 32 & 15L)));
}
public SPacketMultiBlockChange()
{
}
public SPacketMultiBlockChange(ChunkPos pos, SPacketMultiBlockChange.BlockUpdateData[] changes) {
this.chunkPosCoord = pos;
public SPacketMultiBlockChange(int posX, int posZ, SPacketMultiBlockChange.BlockUpdateData[] changes) {
this.chunkPosCoordX = posX;
this.chunkPosCoordZ = posZ;
this.changedBlocks = changes;
}
@ -34,7 +35,8 @@ public class SPacketMultiBlockChange implements Packet<IClientPlayer>
*/
public void readPacketData(PacketBuffer buf) throws IOException
{
this.chunkPosCoord = new ChunkPos(buf.readInt(), buf.readInt());
this.chunkPosCoordX = buf.readInt();
this.chunkPosCoordZ = buf.readInt();
this.changedBlocks = new SPacketMultiBlockChange.BlockUpdateData[buf.readVarInt()];
for (int i = 0; i < this.changedBlocks.length; ++i)
@ -48,8 +50,8 @@ public class SPacketMultiBlockChange implements Packet<IClientPlayer>
*/
public void writePacketData(PacketBuffer buf) throws IOException
{
buf.writeInt(this.chunkPosCoord.x);
buf.writeInt(this.chunkPosCoord.z);
buf.writeInt(this.chunkPosCoordX);
buf.writeInt(this.chunkPosCoordZ);
buf.writeVarInt(this.changedBlocks.length);
for (SPacketMultiBlockChange.BlockUpdateData s22packetmultiblockchange$blockupdatedata : this.changedBlocks)
@ -72,9 +74,14 @@ public class SPacketMultiBlockChange implements Packet<IClientPlayer>
return this.changedBlocks;
}
public ChunkPos getChunkPos()
public int getChunkPosX()
{
return this.chunkPosCoord;
return this.chunkPosCoordX;
}
public int getChunkPosZ()
{
return this.chunkPosCoordZ;
}
public static class BlockUpdateData

View file

@ -265,7 +265,7 @@ public abstract class Vars {
public static int spawnMoreZombie = 25;
@Var(name = "explosionBlocksPerTick", min = 100, max = 10000000)
public static int maxExplosionIters = 1000000;
@Var(name = "viewDistance", min = 2, max = 64)
@Var(name = "viewDistance", min = 2, max = 32)
public static int distance = 8;
@Var(name = "timeFlow", min = 0)
public static int timeFlow = 1;

View file

@ -3,7 +3,6 @@ package common.world;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import common.block.Block;
@ -16,7 +15,6 @@ import common.block.natural.BlockSnow;
import common.block.tech.BlockAnvil;
import common.block.tech.BlockPipe;
import common.collect.Lists;
import common.collect.Sets;
import common.dimension.DimType;
import common.dimension.Dimension;
import common.entity.Entity;
@ -31,7 +29,6 @@ import common.tileentity.ITickable;
import common.tileentity.TileEntity;
import common.util.LocalPos;
import common.util.BoundingBox;
import common.util.ChunkPos;
import common.util.ExtMath;
import common.util.Facing;
import common.util.HitPosition;
@ -58,7 +55,6 @@ public abstract class World implements IWorldAccess {
public final List<EntityNPC> players = Lists.<EntityNPC>newArrayList();
public final List<Entity> effects = Lists.<Entity>newArrayList();
public final IntHashMap<Entity> entityIds = new IntHashMap();
protected final Set<ChunkPos> active = Sets.<ChunkPos>newHashSet();
public final Dimension dimension;
protected double gravity = 1.0;
@ -1158,25 +1154,6 @@ public abstract class World implements IWorldAccess {
this.temp = this.getBaseTemperature() + this.weather.getTemperature();
}
public Set<ChunkPos> setActiveChunks(int radius) {
this.active.clear();
for(int n = 0; n < this.players.size(); ++n) {
EntityNPC player = (EntityNPC)this.players.get(n);
int x = ExtMath.floord(player.posX / 16.0D);
int z = ExtMath.floord(player.posZ / 16.0D);
for(int cx = -radius; cx <= radius; cx++) {
for(int cz = -radius; cz <= radius; cz++) {
this.active.add(new ChunkPos(cx + x, cz + z));
}
}
}
return this.active;
}
public Set<ChunkPos> getActiveChunks() {
return this.active;
}
public float getTempOffset() {
return this.temp;
}

View file

@ -110,7 +110,6 @@ import common.tileentity.Device;
import common.tileentity.TileEntitySign;
import common.util.LocalPos;
import common.util.BoundingBox;
import common.util.ChunkPos;
import common.util.ExtMath;
import common.util.Facing;
import common.util.IntHashMap;
@ -134,6 +133,7 @@ import server.clipboard.RotationRegistry;
import server.clipboard.RotationValue;
import server.command.Executor;
import server.init.UniverseRegistry;
import server.util.ChunkPos;
import server.util.Form;
import server.vars.SVars;
import server.world.ChunkServer;

View file

@ -1,4 +1,4 @@
package common.util;
package server.util;
public class ChunkPos {
public final int x;

View file

@ -81,7 +81,7 @@ public abstract class SVars {
public static int spawnDungeonMobs = 4;
@Var(name = "chunksPerTick", min = 5, max = 1024)
public static int chunksPerTick = 10;
@Var(name = "updateDistance", min = 2, max = 64)
@Var(name = "updateDistance", min = 2, max = 32)
public static int updateDistance = 8;
@Var(name = "password", nonDefault = true)

View file

@ -11,9 +11,9 @@ import common.init.Blocks;
import common.rng.Random;
import common.rng.WeightedList;
import common.util.LocalPos;
import common.util.ChunkPos;
import common.util.ExtMath;
import common.world.World;
import server.util.ChunkPos;
import server.vars.SVars;
import server.worldgen.RngSpawn;

View file

@ -59,7 +59,6 @@ import common.tags.TagObject;
import common.tileentity.TileEntity;
import common.util.LocalPos;
import common.util.BoundingBox;
import common.util.ChunkPos;
import common.util.ExtMath;
import common.util.IntHashMap;
import common.util.LongHashMap;
@ -83,6 +82,7 @@ import server.init.TeleportRegistry;
import server.init.UniverseRegistry;
import server.network.Player;
import server.rng.PerlinGen;
import server.util.ChunkPos;
import server.vars.SVars;
import server.village.VillageCollection;
import server.worldgen.ChunkPrimer;
@ -142,6 +142,7 @@ public final class WorldServer extends AWorldServer {
private final Server server;
private final File chunkDir;
private final Random grng;
private final Set<ChunkPos> active = Sets.<ChunkPos>newHashSet();
private final Set<NextTickListEntry> ticks = Sets.<NextTickListEntry>newHashSet();
private final TreeSet<NextTickListEntry> ticksNext = new TreeSet();
private final List<NextTickListEntry> ticksNow = Lists.<NextTickListEntry>newArrayList();
@ -447,7 +448,18 @@ public final class WorldServer extends AWorldServer {
}
protected void updateBlocks() {
this.setActiveChunks(SVars.updateDistance);
this.active.clear();
int radius = SVars.updateDistance;
for(int n = 0; n < this.players.size(); ++n) {
EntityNPC player = (EntityNPC)this.players.get(n);
int x = ExtMath.floord(player.posX / 16.0D);
int z = ExtMath.floord(player.posZ / 16.0D);
for(int cx = -radius; cx <= radius; cx++) {
for(int cz = -radius; cz <= radius; cz++) {
this.active.add(new ChunkPos(cx + x, cz + z));
}
}
}
int dtics = 0;
int rtics = 0;
@ -2590,12 +2602,11 @@ public final class WorldServer extends AWorldServer {
}
private static SPacketMultiBlockChange getPacket(int amount, long[] list, ChunkServer chunk) {
ChunkPos pos = new ChunkPos(chunk.xPos, chunk.zPos);
SPacketMultiBlockChange.BlockUpdateData[] changes = new SPacketMultiBlockChange.BlockUpdateData[amount];
for(int z = 0; z < changes.length; z++) {
changes[z] = new SPacketMultiBlockChange.BlockUpdateData(list[z], chunk.getState(SPacketMultiBlockChange.getPos(pos, list[z])));
changes[z] = new SPacketMultiBlockChange.BlockUpdateData(list[z], chunk.getState(SPacketMultiBlockChange.getPos(chunk.xPos, chunk.zPos, list[z])));
}
return new SPacketMultiBlockChange(pos, changes);
return new SPacketMultiBlockChange(chunk.xPos, chunk.zPos, changes);
}
public boolean generateBigMushroom(LocalPos pos, State state, Random rand)

View file

@ -7,9 +7,9 @@ import common.collect.Maps;
import common.rng.Random;
import common.tags.TagObject;
import common.util.LocalPos;
import common.util.ChunkPos;
import common.util.LongHashMap;
import common.world.World;
import server.util.ChunkPos;
import server.world.WorldServer;
import server.world.WorldServer.WorldSavedData;
import server.worldgen.ChunkPrimer;

View file

@ -7,7 +7,8 @@ import common.collect.Lists;
import common.rng.Random;
import common.tags.TagObject;
import java.util.List;
import common.util.ChunkPos;
import server.util.ChunkPos;
import server.world.WorldServer;
public abstract class StructureStart