Reuse old chunk type instances, more type cleanup

This commit is contained in:
Nassim Jahnke 2023-10-20 12:30:03 +10:00
parent 50e55529d9
commit 8ebc8c34f3
No known key found for this signature in database
GPG Key ID: EF6771C01F6EF02F
34 changed files with 116 additions and 188 deletions

View File

@ -22,25 +22,32 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
import com.viaversion.viaversion.api.connection.StoredObject; import com.viaversion.viaversion.api.connection.StorableObject;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
/** /**
* Stored up until 1.14 to be used in chunk sending. * Stored up until 1.14 to be used in chunk sending.
*/ */
public class ClientWorld extends StoredObject { public class ClientWorld implements StorableObject {
private Environment environment; private Environment environment;
@Deprecated/*(forRemoval = true)*/
public ClientWorld(final UserConnection connection) { public ClientWorld(final UserConnection connection) {
super(connection); }
public ClientWorld() {
}
public ClientWorld(final Environment environment) {
this.environment = environment;
} }
public @Nullable Environment getEnvironment() { public @Nullable Environment getEnvironment() {
return environment; return environment;
} }
public void setEnvironment(int environmentId) { public void setEnvironment(final int environmentId) {
this.environment = Environment.getEnvironmentById(environmentId); this.environment = Environment.getEnvironmentById(environmentId);
} }
} }

View File

@ -24,29 +24,23 @@ package com.viaversion.viaversion.api.type.types.chunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.PartialType;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public class BulkChunkType1_8 extends PartialType<Chunk[], ClientWorld> { public class BulkChunkType1_8 extends Type<Chunk[]> {
public static final Type<Chunk[]> TYPE = new BulkChunkType1_8();
private static final int BLOCKS_PER_SECTION = 16 * 16 * 16; private static final int BLOCKS_PER_SECTION = 16 * 16 * 16;
private static final int BLOCKS_BYTES = BLOCKS_PER_SECTION * 2; private static final int BLOCKS_BYTES = BLOCKS_PER_SECTION * 2;
private static final int LIGHT_BYTES = BLOCKS_PER_SECTION / 2; private static final int LIGHT_BYTES = BLOCKS_PER_SECTION / 2;
private static final int BIOME_BYTES = 16 * 16; private static final int BIOME_BYTES = 16 * 16;
public BulkChunkType1_8(final ClientWorld clientWorld) { public BulkChunkType1_8() {
super(clientWorld, Chunk[].class); super(Chunk[].class);
} }
@Override @Override
public Class<? extends Type> getBaseClass() { public Chunk[] read(ByteBuf input) throws Exception {
return BaseChunkBulkType.class;
}
@Override
public Chunk[] read(ByteBuf input, ClientWorld world) throws Exception {
final boolean skyLight = input.readBoolean(); final boolean skyLight = input.readBoolean();
final int count = Type.VAR_INT.readPrimitive(input); final int count = Type.VAR_INT.readPrimitive(input);
final Chunk[] chunks = new Chunk[count]; final Chunk[] chunks = new Chunk[count];
@ -67,11 +61,11 @@ public class BulkChunkType1_8 extends PartialType<Chunk[], ClientWorld> {
} }
@Override @Override
public void write(ByteBuf output, ClientWorld world, Chunk[] chunks) throws Exception { public void write(ByteBuf output, Chunk[] chunks) throws Exception {
boolean skyLight = false; boolean skyLight = false;
loop1: loop1:
for (Chunk c : chunks) { for (Chunk chunk : chunks) {
for (ChunkSection section : c.getSections()) { for (ChunkSection section : chunk.getSections()) {
if (section != null && section.getLight().hasSkyLight()) { if (section != null && section.getLight().hasSkyLight()) {
skyLight = true; skyLight = true;
break loop1; break loop1;
@ -82,14 +76,14 @@ public class BulkChunkType1_8 extends PartialType<Chunk[], ClientWorld> {
Type.VAR_INT.writePrimitive(output, chunks.length); Type.VAR_INT.writePrimitive(output, chunks.length);
// Write metadata // Write metadata
for (Chunk c : chunks) { for (Chunk chunk : chunks) {
output.writeInt(c.getX()); output.writeInt(chunk.getX());
output.writeInt(c.getZ()); output.writeInt(chunk.getZ());
output.writeShort(c.getBitmask()); output.writeShort(chunk.getBitmask());
} }
// Write data // Write data
for (Chunk c : chunks) { for (Chunk chunk : chunks) {
output.writeBytes(ChunkType1_8.serialize(c)); output.writeBytes(ChunkType1_8.serialize(chunk));
} }
} }

View File

@ -24,15 +24,14 @@ package com.viaversion.viaversion.api.type.types.chunk;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import com.viaversion.viaversion.api.minecraft.Environment; import com.viaversion.viaversion.api.minecraft.Environment;
import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk; import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.PartialType; import com.viaversion.viaversion.api.type.PartialType;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_13; import com.viaversion.viaversion.api.type.types.version.Types1_13;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -41,8 +40,15 @@ import java.util.logging.Level;
public class ChunkType1_13 extends PartialType<Chunk, ClientWorld> { public class ChunkType1_13 extends PartialType<Chunk, ClientWorld> {
public ChunkType1_13(ClientWorld param) { private static final ChunkType1_13 WITH_SKYLIGHT = new ChunkType1_13(new ClientWorld(Environment.NORMAL));
super(param, Chunk.class); private static final ChunkType1_13 WITHOUT_SKYLIGHT = new ChunkType1_13(new ClientWorld(Environment.NETHER));
public ChunkType1_13(ClientWorld clientWorld) {
super(clientWorld, Chunk.class);
}
public static ChunkType1_13 forEnvironment(Environment environment) {
return environment == Environment.NORMAL ? WITH_SKYLIGHT : WITHOUT_SKYLIGHT;
} }
@Override @Override

View File

@ -28,7 +28,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_13; import com.viaversion.viaversion.api.type.types.version.Types1_13;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
@ -37,6 +36,8 @@ import java.util.List;
public class ChunkType1_14 extends Type<Chunk> { public class ChunkType1_14 extends Type<Chunk> {
public static final Type<Chunk> TYPE = new ChunkType1_14();
public ChunkType1_14() { public ChunkType1_14() {
super(Chunk.class); super(Chunk.class);
} }
@ -118,9 +119,4 @@ public class ChunkType1_14 extends Type<Chunk> {
// Write Block Entities // Write Block Entities
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(new CompoundTag[0])); Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(new CompoundTag[0]));
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -28,7 +28,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_13; import com.viaversion.viaversion.api.type.types.version.Types1_13;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
@ -119,9 +118,4 @@ public class ChunkType1_15 extends Type<Chunk> {
// Write Block Entities // Write Block Entities
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS)); Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS));
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -28,7 +28,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_16; import com.viaversion.viaversion.api.type.types.version.Types1_16;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
@ -121,9 +120,4 @@ public class ChunkType1_16 extends Type<Chunk> {
// Write Block Entities // Write Block Entities
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS)); Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS));
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -28,7 +28,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_16; import com.viaversion.viaversion.api.type.types.version.Types1_16;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
@ -115,9 +114,4 @@ public class ChunkType1_16_2 extends Type<Chunk> {
// Write Block Entities // Write Block Entities
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS)); Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS));
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -29,7 +29,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_16; import com.viaversion.viaversion.api.type.types.version.Types1_16;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
@ -113,9 +112,4 @@ public final class ChunkType1_17 extends Type<Chunk> {
// Write Block Entities // Write Block Entities
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS)); Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(EMPTY_COMPOUNDS));
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -97,9 +97,4 @@ public final class ChunkType1_18 extends Type<Chunk> {
Type.BLOCK_ENTITY1_18.write(buffer, blockEntity); Type.BLOCK_ENTITY1_18.write(buffer, blockEntity);
} }
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -29,8 +29,6 @@ import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk1_18; import com.viaversion.viaversion.api.minecraft.chunks.Chunk1_18;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.chunk.ChunkSectionType1_18;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -96,9 +94,4 @@ public final class ChunkType1_20_2 extends Type<Chunk> {
Type.BLOCK_ENTITY1_20_2.write(buffer, blockEntity); Type.BLOCK_ENTITY1_20_2.write(buffer, blockEntity);
} }
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -22,28 +22,29 @@
*/ */
package com.viaversion.viaversion.api.type.types.chunk; package com.viaversion.viaversion.api.type.types.chunk;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import com.viaversion.viaversion.api.minecraft.Environment; import com.viaversion.viaversion.api.minecraft.Environment;
import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk; import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.PartialType; import com.viaversion.viaversion.api.type.PartialType;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_8; import com.viaversion.viaversion.api.type.types.version.Types1_8;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import java.util.ArrayList; import java.util.ArrayList;
public class ChunkType1_8 extends PartialType<Chunk, ClientWorld> { public class ChunkType1_8 extends PartialType<Chunk, ClientWorld> {
public ChunkType1_8(ClientWorld param) { private static final ChunkType1_8 WITH_SKYLIGHT = new ChunkType1_8(new ClientWorld(Environment.NORMAL));
super(param, Chunk.class); private static final ChunkType1_8 WITHOUT_SKYLIGHT = new ChunkType1_8(new ClientWorld(Environment.NETHER));
public ChunkType1_8(ClientWorld clientWorld) {
super(clientWorld, Chunk.class);
} }
@Override public static ChunkType1_8 forEnvironment(Environment environment) {
public Class<? extends Type> getBaseClass() { return environment == Environment.NORMAL ? WITH_SKYLIGHT : WITHOUT_SKYLIGHT;
return BaseChunkType.class;
} }
@Override @Override

View File

@ -22,25 +22,31 @@
*/ */
package com.viaversion.viaversion.api.type.types.chunk; package com.viaversion.viaversion.api.type.types.chunk;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import com.viaversion.viaversion.api.minecraft.Environment; import com.viaversion.viaversion.api.minecraft.Environment;
import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk; import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.PartialType; import com.viaversion.viaversion.api.type.PartialType;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_9; import com.viaversion.viaversion.api.type.types.version.Types1_9;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.BitSet; import java.util.BitSet;
public class ChunkType1_9_1 extends PartialType<Chunk, ClientWorld> { public class ChunkType1_9_1 extends PartialType<Chunk, ClientWorld> {
private static final ChunkType1_9_1 WITH_SKYLIGHT = new ChunkType1_9_1(new ClientWorld(Environment.NORMAL));
private static final ChunkType1_9_1 WITHOUT_SKYLIGHT = new ChunkType1_9_1(new ClientWorld(Environment.NETHER));
public ChunkType1_9_1(ClientWorld clientWorld) { public ChunkType1_9_1(ClientWorld clientWorld) {
super(clientWorld, Chunk.class); super(clientWorld, Chunk.class);
} }
public static ChunkType1_9_1 forEnvironment(Environment environment) {
return environment == Environment.NORMAL ? WITH_SKYLIGHT : WITHOUT_SKYLIGHT;
}
@Override @Override
public Chunk read(ByteBuf input, ClientWorld world) throws Exception { public Chunk read(ByteBuf input, ClientWorld world) throws Exception {
int chunkX = input.readInt(); int chunkX = input.readInt();
@ -115,9 +121,4 @@ public class ChunkType1_9_1 extends PartialType<Chunk, ClientWorld> {
} }
} }
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -24,15 +24,14 @@ package com.viaversion.viaversion.api.type.types.chunk;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import com.viaversion.viaversion.api.minecraft.Environment; import com.viaversion.viaversion.api.minecraft.Environment;
import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk; import com.viaversion.viaversion.api.minecraft.chunks.BaseChunk;
import com.viaversion.viaversion.api.minecraft.chunks.Chunk; import com.viaversion.viaversion.api.minecraft.chunks.Chunk;
import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection; import com.viaversion.viaversion.api.minecraft.chunks.ChunkSection;
import com.viaversion.viaversion.api.type.PartialType; import com.viaversion.viaversion.api.type.PartialType;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.chunk.BaseChunkType;
import com.viaversion.viaversion.api.type.types.version.Types1_9; import com.viaversion.viaversion.api.type.types.version.Types1_9;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -40,8 +39,15 @@ import java.util.List;
public class ChunkType1_9_3 extends PartialType<Chunk, ClientWorld> { public class ChunkType1_9_3 extends PartialType<Chunk, ClientWorld> {
public ChunkType1_9_3(ClientWorld param) { private static final ChunkType1_9_3 WITH_SKYLIGHT = new ChunkType1_9_3(new ClientWorld(Environment.NORMAL));
super(param, Chunk.class); private static final ChunkType1_9_3 WITHOUT_SKYLIGHT = new ChunkType1_9_3(new ClientWorld(Environment.NETHER));
public ChunkType1_9_3(ClientWorld clientWorld) {
super(clientWorld, Chunk.class);
}
public static ChunkType1_9_3 forEnvironment(Environment environment) {
return environment == Environment.NORMAL ? WITH_SKYLIGHT : WITHOUT_SKYLIGHT;
} }
@Override @Override
@ -122,9 +128,4 @@ public class ChunkType1_9_3 extends PartialType<Chunk, ClientWorld> {
// Write Block Entities // Write Block Entities
Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(new CompoundTag[0])); Type.NAMED_COMPOUND_TAG_ARRAY.write(output, chunk.getBlockEntities().toArray(new CompoundTag[0]));
} }
@Override
public Class<? extends Type> getBaseClass() {
return BaseChunkType.class;
}
} }

View File

@ -1,42 +0,0 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2023 ViaVersion and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
abstract class BaseItemType extends Type<Item> {
protected BaseItemType() {
super(Item.class);
}
protected BaseItemType(String typeName) {
super(typeName, Item.class);
}
@Override
public Class<? extends Type> getBaseClass() {
return BaseItemType.class;
}
}

View File

@ -23,6 +23,7 @@
package com.viaversion.viaversion.api.type.types.item; package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public class ItemShortArrayType1_13_2 extends BaseItemArrayType { public class ItemShortArrayType1_13_2 extends BaseItemArrayType {
@ -33,19 +34,19 @@ public class ItemShortArrayType1_13_2 extends BaseItemArrayType {
@Override @Override
public Item[] read(ByteBuf buffer) throws Exception { public Item[] read(ByteBuf buffer) throws Exception {
int amount = SHORT.readPrimitive(buffer); int amount = Type.SHORT.readPrimitive(buffer);
Item[] array = new Item[amount]; Item[] array = new Item[amount];
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
array[i] = ITEM1_13_2.read(buffer); array[i] = Type.ITEM1_13_2.read(buffer);
} }
return array; return array;
} }
@Override @Override
public void write(ByteBuf buffer, Item[] object) throws Exception { public void write(ByteBuf buffer, Item[] object) throws Exception {
SHORT.writePrimitive(buffer, (short) object.length); Type.SHORT.writePrimitive(buffer, (short) object.length);
for (Item o : object) { for (Item o : object) {
ITEM1_13_2.write(buffer, o); Type.ITEM1_13_2.write(buffer, o);
} }
} }
} }

View File

@ -23,6 +23,7 @@
package com.viaversion.viaversion.api.type.types.item; package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public class ItemShortArrayType1_8 extends BaseItemArrayType { public class ItemShortArrayType1_8 extends BaseItemArrayType {
@ -33,19 +34,19 @@ public class ItemShortArrayType1_8 extends BaseItemArrayType {
@Override @Override
public Item[] read(ByteBuf buffer) throws Exception { public Item[] read(ByteBuf buffer) throws Exception {
int amount = SHORT.readPrimitive(buffer); int amount = Type.SHORT.readPrimitive(buffer);
Item[] array = new Item[amount]; Item[] array = new Item[amount];
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
array[i] = ITEM1_8.read(buffer); array[i] = Type.ITEM1_8.read(buffer);
} }
return array; return array;
} }
@Override @Override
public void write(ByteBuf buffer, Item[] object) throws Exception { public void write(ByteBuf buffer, Item[] object) throws Exception {
SHORT.writePrimitive(buffer, (short) object.length); Type.SHORT.writePrimitive(buffer, (short) object.length);
for (Item o : object) { for (Item o : object) {
ITEM1_8.write(buffer, o); Type.ITEM1_8.write(buffer, o);
} }
} }
} }

View File

@ -28,9 +28,9 @@ import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public class ItemType1_13 extends BaseItemType { public class ItemType1_13 extends Type<Item> {
public ItemType1_13() { public ItemType1_13() {
super("FlatItem"); super("FlatItem", Item.class);
} }
@Override @Override

View File

@ -24,12 +24,13 @@ package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public class ItemType1_13_2 extends BaseItemType { public class ItemType1_13_2 extends Type<Item> {
public ItemType1_13_2() { public ItemType1_13_2() {
super("FlatVarIntItem"); super("FlatVarIntItem", Item.class);
} }
@Override @Override
@ -39,9 +40,9 @@ public class ItemType1_13_2 extends BaseItemType {
return null; return null;
} else { } else {
Item item = new DataItem(); Item item = new DataItem();
item.setIdentifier(VAR_INT.readPrimitive(buffer)); item.setIdentifier(Type.VAR_INT.readPrimitive(buffer));
item.setAmount(buffer.readByte()); item.setAmount(buffer.readByte());
item.setTag(NAMED_COMPOUND_TAG.read(buffer)); item.setTag(Type.NAMED_COMPOUND_TAG.read(buffer));
return item; return item;
} }
} }
@ -52,9 +53,9 @@ public class ItemType1_13_2 extends BaseItemType {
buffer.writeBoolean(false); buffer.writeBoolean(false);
} else { } else {
buffer.writeBoolean(true); buffer.writeBoolean(true);
VAR_INT.writePrimitive(buffer, object.identifier()); Type.VAR_INT.writePrimitive(buffer, object.identifier());
buffer.writeByte(object.amount()); buffer.writeByte(object.amount());
NAMED_COMPOUND_TAG.write(buffer, object.tag()); Type.NAMED_COMPOUND_TAG.write(buffer, object.tag());
} }
} }
} }

View File

@ -24,13 +24,14 @@ package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public class ItemType1_20_2 extends BaseItemType { public class ItemType1_20_2 extends Type<Item> {
public ItemType1_20_2() { public ItemType1_20_2() {
super("ItemType1_20_2"); super("ItemType1_20_2", Item.class);
} }
@Override @Override
@ -40,9 +41,9 @@ public class ItemType1_20_2 extends BaseItemType {
} }
final Item item = new DataItem(); final Item item = new DataItem();
item.setIdentifier(VAR_INT.readPrimitive(buffer)); item.setIdentifier(Type.VAR_INT.readPrimitive(buffer));
item.setAmount(buffer.readByte()); item.setAmount(buffer.readByte());
item.setTag(COMPOUND_TAG.read(buffer)); item.setTag(Type.COMPOUND_TAG.read(buffer));
return item; return item;
} }
@ -52,9 +53,9 @@ public class ItemType1_20_2 extends BaseItemType {
buffer.writeBoolean(false); buffer.writeBoolean(false);
} else { } else {
buffer.writeBoolean(true); buffer.writeBoolean(true);
VAR_INT.writePrimitive(buffer, object.identifier()); Type.VAR_INT.writePrimitive(buffer, object.identifier());
buffer.writeByte(object.amount()); buffer.writeByte(object.amount());
COMPOUND_TAG.write(buffer, object.tag()); Type.COMPOUND_TAG.write(buffer, object.tag());
} }
} }
} }

View File

@ -24,13 +24,14 @@ package com.viaversion.viaversion.api.type.types.item;
import com.viaversion.viaversion.api.minecraft.item.DataItem; import com.viaversion.viaversion.api.minecraft.item.DataItem;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
public class ItemType1_8 extends BaseItemType { public class ItemType1_8 extends Type<Item> {
public ItemType1_8() { public ItemType1_8() {
super("Item"); super("Item", Item.class);
} }
@Override @Override
@ -43,7 +44,7 @@ public class ItemType1_8 extends BaseItemType {
item.setIdentifier(id); item.setIdentifier(id);
item.setAmount(buffer.readByte()); item.setAmount(buffer.readByte());
item.setData(buffer.readShort()); item.setData(buffer.readShort());
item.setTag(NAMED_COMPOUND_TAG.read(buffer)); item.setTag(Type.NAMED_COMPOUND_TAG.read(buffer));
return item; return item;
} }
} }
@ -56,7 +57,7 @@ public class ItemType1_8 extends BaseItemType {
buffer.writeShort(object.identifier()); buffer.writeShort(object.identifier());
buffer.writeByte(object.amount()); buffer.writeByte(object.amount());
buffer.writeShort(object.data()); buffer.writeShort(object.data());
NAMED_COMPOUND_TAG.write(buffer, object.tag()); Type.NAMED_COMPOUND_TAG.write(buffer, object.tag());
} }
} }
} }

View File

@ -50,11 +50,6 @@ public class PositionType1_14 extends Type<Position> {
| ((((long) object.z()) & 0x3ffffff) << 12)); | ((((long) object.z()) & 0x3ffffff) << 12));
} }
@Override
public Class<? extends Type> getBaseClass() {
return PositionType1_8.class;
}
public static final class OptionalPosition1_14Type extends OptionalType<Position> { public static final class OptionalPosition1_14Type extends OptionalType<Position> {
public OptionalPosition1_14Type() { public OptionalPosition1_14Type() {

View File

@ -179,7 +179,7 @@ public class Protocol1_10To1_9_3_4 extends AbstractProtocol<ClientboundPackets1_
// Chunk Data // Chunk Data
registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> { registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
Chunk chunk = wrapper.passthrough(new ChunkType1_9_3(clientWorld)); Chunk chunk = wrapper.passthrough(ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()));
if (Via.getConfig().isReplacePistons()) { if (Via.getConfig().isReplacePistons()) {
int replacementId = Via.getConfig().getPistonReplacementId(); int replacementId = Via.getConfig().getPistonReplacementId();
@ -237,7 +237,7 @@ public class Protocol1_10To1_9_3_4 extends AbstractProtocol<ClientboundPackets1_
userConnection.put(new ResourcePackTracker()); userConnection.put(new ResourcePackTracker());
if (!userConnection.has(ClientWorld.class)) { if (!userConnection.has(ClientWorld.class)) {
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
} }
} }

View File

@ -208,7 +208,7 @@ public class Protocol1_11To1_10 extends AbstractProtocol<ClientboundPackets1_9_3
registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> { registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
Chunk chunk = wrapper.passthrough(new ChunkType1_9_3(clientWorld)); Chunk chunk = wrapper.passthrough(ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()));
if (chunk.getBlockEntities() == null) return; if (chunk.getBlockEntities() == null) return;
for (CompoundTag tag : chunk.getBlockEntities()) { for (CompoundTag tag : chunk.getBlockEntities()) {
@ -346,7 +346,7 @@ public class Protocol1_11To1_10 extends AbstractProtocol<ClientboundPackets1_9_3
userConnection.addEntityTracker(this.getClass(), new EntityTracker1_11(userConnection)); userConnection.addEntityTracker(this.getClass(), new EntityTracker1_11(userConnection));
if (!userConnection.has(ClientWorld.class)) if (!userConnection.has(ClientWorld.class))
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
} }
@Override @Override

View File

@ -110,7 +110,7 @@ public class Protocol1_12To1_11_1 extends AbstractProtocol<ClientboundPackets1_9
registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> { registerClientbound(ClientboundPackets1_9_3.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
ChunkType1_9_3 type = new ChunkType1_9_3(clientWorld); ChunkType1_9_3 type = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment());
Chunk chunk = wrapper.passthrough(type); Chunk chunk = wrapper.passthrough(type);
for (int s = 0; s < chunk.getSections().length; s++) { for (int s = 0; s < chunk.getSections().length; s++) {
@ -245,7 +245,7 @@ public class Protocol1_12To1_11_1 extends AbstractProtocol<ClientboundPackets1_9
public void init(UserConnection userConnection) { public void init(UserConnection userConnection) {
userConnection.addEntityTracker(this.getClass(), new EntityTrackerBase(userConnection, EntityTypes1_12.EntityType.PLAYER)); userConnection.addEntityTracker(this.getClass(), new EntityTrackerBase(userConnection, EntityTypes1_12.EntityType.PLAYER));
if (!userConnection.has(ClientWorld.class)) { if (!userConnection.has(ClientWorld.class)) {
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
} }
} }

View File

@ -137,7 +137,7 @@ public class Protocol1_13_1To1_13 extends AbstractProtocol<ClientboundPackets1_1
public void init(UserConnection userConnection) { public void init(UserConnection userConnection) {
userConnection.addEntityTracker(this.getClass(), new EntityTrackerBase(userConnection, EntityTypes1_13.EntityType.PLAYER)); userConnection.addEntityTracker(this.getClass(), new EntityTrackerBase(userConnection, EntityTypes1_13.EntityType.PLAYER));
if (!userConnection.has(ClientWorld.class)) { if (!userConnection.has(ClientWorld.class)) {
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
} }
} }

View File

@ -36,7 +36,7 @@ public class WorldPackets {
protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, wrapper -> { protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
Chunk chunk = wrapper.passthrough(new ChunkType1_13(clientWorld)); Chunk chunk = wrapper.passthrough(ChunkType1_13.forEnvironment(clientWorld.getEnvironment()));
for (ChunkSection section : chunk.getSections()) { for (ChunkSection section : chunk.getSections()) {
if (section == null) { if (section == null) {

View File

@ -865,7 +865,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol<ClientboundPackets1_1
userConnection.addEntityTracker(this.getClass(), new EntityTrackerBase(userConnection, EntityTypes1_13.EntityType.PLAYER)); userConnection.addEntityTracker(this.getClass(), new EntityTrackerBase(userConnection, EntityTypes1_13.EntityType.PLAYER));
userConnection.put(new TabCompleteTracker()); userConnection.put(new TabCompleteTracker());
if (!userConnection.has(ClientWorld.class)) if (!userConnection.has(ClientWorld.class))
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
userConnection.put(new BlockStorage()); userConnection.put(new BlockStorage());
if (Via.getConfig().isServersideBlockConnections()) { if (Via.getConfig().isServersideBlockConnections()) {
if (Via.getManager().getProviders().get(BlockConnectionProvider.class) instanceof PacketBlockConnectionProvider) { if (Via.getManager().getProviders().get(BlockConnectionProvider.class) instanceof PacketBlockConnectionProvider) {

View File

@ -331,8 +331,8 @@ public class WorldPackets {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
BlockStorage storage = wrapper.user().get(BlockStorage.class); BlockStorage storage = wrapper.user().get(BlockStorage.class);
ChunkType1_9_3 type = new ChunkType1_9_3(clientWorld); ChunkType1_9_3 type = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment());
ChunkType1_13 type1_13 = new ChunkType1_13(clientWorld); ChunkType1_13 type1_13 = ChunkType1_13.forEnvironment(clientWorld.getEnvironment());
Chunk chunk = wrapper.read(type); Chunk chunk = wrapper.read(type);
wrapper.write(type1_13, chunk); wrapper.write(type1_13, chunk);

View File

@ -161,7 +161,7 @@ public class Protocol1_14To1_13_2 extends AbstractProtocol<ClientboundPackets1_1
public void init(UserConnection userConnection) { public void init(UserConnection userConnection) {
userConnection.addEntityTracker(this.getClass(), new EntityTracker1_14(userConnection)); userConnection.addEntityTracker(this.getClass(), new EntityTracker1_14(userConnection));
if (!userConnection.has(ClientWorld.class)) { if (!userConnection.has(ClientWorld.class)) {
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
} }
} }

View File

@ -126,8 +126,8 @@ public class WorldPackets {
protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, wrapper -> { protocol.registerClientbound(ClientboundPackets1_13.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
Chunk chunk = wrapper.read(new ChunkType1_13(clientWorld)); Chunk chunk = wrapper.read(ChunkType1_13.forEnvironment(clientWorld.getEnvironment()));
wrapper.write(new ChunkType1_14(), chunk); wrapper.write(ChunkType1_14.TYPE, chunk);
int[] motionBlocking = new int[16 * 16]; int[] motionBlocking = new int[16 * 16];
int[] worldSurface = new int[16 * 16]; int[] worldSurface = new int[16 * 16];

View File

@ -40,7 +40,7 @@ public final class WorldPackets {
blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_14_4.ACKNOWLEDGE_PLAYER_DIGGING); blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_14_4.ACKNOWLEDGE_PLAYER_DIGGING);
protocol.registerClientbound(ClientboundPackets1_14_4.CHUNK_DATA, wrapper -> { protocol.registerClientbound(ClientboundPackets1_14_4.CHUNK_DATA, wrapper -> {
Chunk chunk = wrapper.read(new ChunkType1_14()); Chunk chunk = wrapper.read(ChunkType1_14.TYPE);
wrapper.write(new ChunkType1_15(), chunk); wrapper.write(new ChunkType1_15(), chunk);
if (chunk.isFullChunk()) { if (chunk.isFullChunk()) {

View File

@ -87,8 +87,8 @@ public class Protocol1_9_3To1_9_1_2 extends AbstractProtocol<ClientboundPackets1
registerClientbound(ClientboundPackets1_9.CHUNK_DATA, wrapper -> { registerClientbound(ClientboundPackets1_9.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
Chunk chunk = wrapper.read(new ChunkType1_9_1(clientWorld)); Chunk chunk = wrapper.read(ChunkType1_9_1.forEnvironment(clientWorld.getEnvironment()));
wrapper.write(new ChunkType1_9_3(clientWorld), chunk); wrapper.write(ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()), chunk);
List<CompoundTag> tags = chunk.getBlockEntities(); List<CompoundTag> tags = chunk.getBlockEntities();
for (int s = 0; s < chunk.getSections().length; s++) { for (int s = 0; s < chunk.getSections().length; s++) {

View File

@ -148,7 +148,7 @@ public class Protocol1_9To1_8 extends AbstractProtocol<ClientboundPackets1_8, Cl
userConnection.put(new CommandBlockStorage()); userConnection.put(new CommandBlockStorage());
if (!userConnection.has(ClientWorld.class)) { if (!userConnection.has(ClientWorld.class)) {
userConnection.put(new ClientWorld(userConnection)); userConnection.put(new ClientWorld());
} }
} }

View File

@ -122,7 +122,7 @@ public class WorldPackets {
protocol.registerClientbound(ClientboundPackets1_8.CHUNK_DATA, wrapper -> { protocol.registerClientbound(ClientboundPackets1_8.CHUNK_DATA, wrapper -> {
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
ClientChunks clientChunks = wrapper.user().get(ClientChunks.class); ClientChunks clientChunks = wrapper.user().get(ClientChunks.class);
Chunk chunk = wrapper.read(new ChunkType1_8(clientWorld)); Chunk chunk = wrapper.read(ChunkType1_8.forEnvironment(clientWorld.getEnvironment()));
long chunkHash = ClientChunks.toLong(chunk.getX(), chunk.getZ()); long chunkHash = ClientChunks.toLong(chunk.getX(), chunk.getZ());
@ -152,7 +152,7 @@ public class WorldPackets {
} }
} }
} else { } else {
Type<Chunk> chunkType = new ChunkType1_9_1(clientWorld); Type<Chunk> chunkType = ChunkType1_9_1.forEnvironment(clientWorld.getEnvironment());
wrapper.write(chunkType, chunk); wrapper.write(chunkType, chunk);
clientChunks.getLoadedChunks().add(chunkHash); clientChunks.getLoadedChunks().add(chunkHash);
@ -177,9 +177,9 @@ public class WorldPackets {
wrapper.cancel(); // Cancel the packet from being sent wrapper.cancel(); // Cancel the packet from being sent
ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); ClientWorld clientWorld = wrapper.user().get(ClientWorld.class);
ClientChunks clientChunks = wrapper.user().get(ClientChunks.class); ClientChunks clientChunks = wrapper.user().get(ClientChunks.class);
Chunk[] chunks = wrapper.read(new BulkChunkType1_8(clientWorld)); Chunk[] chunks = wrapper.read(BulkChunkType1_8.TYPE);
Type<Chunk> chunkType = new ChunkType1_9_1(clientWorld); Type<Chunk> chunkType = ChunkType1_9_1.forEnvironment(clientWorld.getEnvironment());
// Split into multiple chunk packets // Split into multiple chunk packets
for (Chunk chunk : chunks) { for (Chunk chunk : chunks) {
PacketWrapper chunkData = wrapper.create(ClientboundPackets1_9.CHUNK_DATA); PacketWrapper chunkData = wrapper.create(ClientboundPackets1_9.CHUNK_DATA);