22w19a (and a varying mix of removed and added dread)

This commit is contained in:
Nassim Jahnke 2022-05-12 23:49:15 +02:00
parent b9f80754e0
commit 7dc7b62cc9
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B
19 changed files with 636 additions and 377 deletions

View File

@ -0,0 +1,30 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2022 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.data.entity;
public interface DimensionData {
int minY();
int height();
}

View File

@ -26,6 +26,8 @@ import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Map;
public interface EntityTracker { public interface EntityTracker {
/** /**
@ -153,4 +155,8 @@ public interface EntityTracker {
void setBiomesSent(int biomesSent); void setBiomesSent(int biomesSent);
EntityType playerType(); EntityType playerType();
@Nullable DimensionData dimensionData(String dimension);
void setDimensions(Map<String, DimensionData> dimensions);
} }

View File

@ -22,29 +22,12 @@
*/ */
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public final class GlobalPosition { public final class GlobalPosition extends Position {
private final String dimension; private final String dimension;
private final int x;
private final int y;
private final int z;
public GlobalPosition(final String dimension, final int x, final int y, final int z) { public GlobalPosition(final String dimension, final int x, final int y, final int z) {
super(x, y, z);
this.dimension = dimension; this.dimension = dimension;
this.x = x;
this.y = y;
this.z = z;
}
public int x() {
return x;
}
public int y() {
return y;
}
public int z() {
return z;
} }
public String dimension() { public String dimension() {

View File

@ -23,9 +23,9 @@
package com.viaversion.viaversion.api.minecraft; package com.viaversion.viaversion.api.minecraft;
public class Position { public class Position {
private final int x; protected final int x;
private final int y; protected final int y;
private final int z; protected final int z;
public Position(int x, int y, int z) { public Position(int x, int y, int z) {
this.x = x; this.x = x;
@ -59,6 +59,10 @@ public class Position {
return z; return z;
} }
public GlobalPosition withDimension(String dimension) {
return new GlobalPosition(dimension, x, y, z);
}
@Deprecated/*(forRemoval=true)*/ @Deprecated/*(forRemoval=true)*/
public int getX() { public int getX() {
return x; return x;

View File

@ -80,7 +80,7 @@ public class ProtocolVersion {
public static final ProtocolVersion v1_17_1 = register(756, "1.17.1"); public static final ProtocolVersion v1_17_1 = register(756, "1.17.1");
public static final ProtocolVersion v1_18 = register(757, "1.18/1.18.1", new VersionRange("1.18", 0, 1)); public static final ProtocolVersion v1_18 = register(757, "1.18/1.18.1", new VersionRange("1.18", 0, 1));
public static final ProtocolVersion v1_18_2 = register(758, "1.18.2"); public static final ProtocolVersion v1_18_2 = register(758, "1.18.2");
public static final ProtocolVersion v1_19 = register(759, 83, "1.19"); public static final ProtocolVersion v1_19 = register(759, 84, "1.19");
public static final ProtocolVersion unknown = register(-1, "UNKNOWN"); public static final ProtocolVersion unknown = register(-1, "UNKNOWN");
public static ProtocolVersion register(int version, String name) { public static ProtocolVersion register(int version, String name) {

View File

@ -22,9 +22,6 @@
*/ */
package com.viaversion.viaversion.api.type.types.minecraft; package com.viaversion.viaversion.api.type.types.minecraft;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.IntArrayTag;
import com.github.steveice10.opennbt.tag.builtin.StringTag;
import com.viaversion.viaversion.api.minecraft.GlobalPosition; import com.viaversion.viaversion.api.minecraft.GlobalPosition;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
@ -38,11 +35,8 @@ public class OptionalGlobalPositionType extends Type<GlobalPosition> {
@Override @Override
public GlobalPosition read(ByteBuf buffer) throws Exception { public GlobalPosition read(ByteBuf buffer) throws Exception {
if (buffer.readBoolean()) { if (buffer.readBoolean()) {
// _ final String dimension = Type.STRING.read(buffer);
final CompoundTag compound = Type.NBT.read(buffer); return Type.POSITION1_14.read(buffer).withDimension(dimension);
final String dimension = (String) compound.get("dimension").getValue();
final IntArrayTag positionFields = compound.get("pos");
return new GlobalPosition(dimension, positionFields.getValue(0), positionFields.getValue(1), positionFields.getValue(2));
} }
return null; return null;
} }
@ -51,11 +45,8 @@ public class OptionalGlobalPositionType extends Type<GlobalPosition> {
public void write(ByteBuf buffer, GlobalPosition object) throws Exception { public void write(ByteBuf buffer, GlobalPosition object) throws Exception {
buffer.writeBoolean(object != null); buffer.writeBoolean(object != null);
if (object != null) { if (object != null) {
final CompoundTag compound = new CompoundTag(); Type.STRING.write(buffer, object.dimension());
compound.put("dimension", new StringTag(object.dimension())); Type.POSITION1_14.write(buffer, object);
final int[] positionFields = {object.x(), object.y(), object.z()};
compound.put("pos", new IntArrayTag(positionFields));
Type.NBT.write(buffer, compound);
} }
} }
} }

View File

@ -0,0 +1,69 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viaversion.data.entity;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.IntTag;
import com.github.steveice10.opennbt.tag.builtin.NumberTag;
import com.github.steveice10.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.api.data.entity.DimensionData;
public final class DimensionDataImpl implements DimensionData {
private final int minY;
private final int height;
public DimensionDataImpl(final int minY, final int height) {
this.minY = minY;
this.height = height;
}
public DimensionDataImpl(final CompoundTag dimensionData) {
final Tag height = dimensionData.get("height");
if (height instanceof IntTag) {
this.height = ((NumberTag) height).asInt();
} else {
throw new IllegalArgumentException("height missing in dimension data: " + dimensionData);
}
final Tag minY = dimensionData.get("min_y");
if (minY instanceof IntTag) {
this.minY = ((NumberTag) minY).asInt();
} else {
throw new IllegalArgumentException("min_y missing in dimension data: " + dimensionData);
}
}
@Override
public int minY() {
return minY;
}
@Override
public int height() {
return height;
}
@Override
public String toString() {
return "DimensionData{" +
"minY=" + minY +
", height=" + height +
'}';
}
}

View File

@ -21,6 +21,7 @@ package com.viaversion.viaversion.data.entity;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.entity.ClientEntityIdChangeListener; import com.viaversion.viaversion.api.data.entity.ClientEntityIdChangeListener;
import com.viaversion.viaversion.api.data.entity.DimensionData;
import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.data.entity.StoredEntityData; import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
@ -28,6 +29,9 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import space.vectrix.flare.fastutil.Int2ObjectSyncMap; import space.vectrix.flare.fastutil.Int2ObjectSyncMap;
import java.util.Collections;
import java.util.Map;
public class EntityTrackerBase implements EntityTracker, ClientEntityIdChangeListener { public class EntityTrackerBase implements EntityTracker, ClientEntityIdChangeListener {
private final Int2ObjectMap<EntityType> entityTypes = Int2ObjectSyncMap.hashmap(); private final Int2ObjectMap<EntityType> entityTypes = Int2ObjectSyncMap.hashmap();
private final Int2ObjectMap<StoredEntityData> entityData; private final Int2ObjectMap<StoredEntityData> entityData;
@ -38,6 +42,7 @@ public class EntityTrackerBase implements EntityTracker, ClientEntityIdChangeLis
private int currentMinY; private int currentMinY;
private String currentWorld; private String currentWorld;
private int biomesSent = -1; private int biomesSent = -1;
private Map<String, DimensionData> dimensions = Collections.emptyMap();
public EntityTrackerBase(UserConnection connection, @Nullable EntityType playerType) { public EntityTrackerBase(UserConnection connection, @Nullable EntityType playerType) {
this(connection, playerType, false); this(connection, playerType, false);
@ -162,4 +167,14 @@ public class EntityTrackerBase implements EntityTracker, ClientEntityIdChangeLis
public EntityType playerType() { public EntityType playerType() {
return playerType; return playerType;
} }
@Override
public @Nullable DimensionData dimensionData(String dimension) {
return dimensions.get(dimension);
}
@Override
public void setDimensions(Map<String, DimensionData> dimensions) {
this.dimensions = dimensions;
}
} }

View File

@ -33,96 +33,98 @@ public enum ClientboundPackets1_19 implements ClientboundPacketType {
BLOCK_CHANGE, // 0x09 BLOCK_CHANGE, // 0x09
BOSSBAR, // 0x0A BOSSBAR, // 0x0A
SERVER_DIFFICULTY, // 0x0B SERVER_DIFFICULTY, // 0x0B
CLEAR_TITLES, // 0x0C CHAT_PREVIEW, // 0x0C
TAB_COMPLETE, // 0x0D CLEAR_TITLES, // 0x0D
DECLARE_COMMANDS, // 0x0E TAB_COMPLETE, // 0x0E
CLOSE_WINDOW, // 0x0F DECLARE_COMMANDS, // 0x0F
WINDOW_ITEMS, // 0x10 CLOSE_WINDOW, // 0x10
WINDOW_PROPERTY, // 0x11 WINDOW_ITEMS, // 0x11
SET_SLOT, // 0x12 WINDOW_PROPERTY, // 0x12
COOLDOWN, // 0x13 SET_SLOT, // 0x13
PLUGIN_MESSAGE, // 0x14 COOLDOWN, // 0x14
NAMED_SOUND, // 0x15 PLUGIN_MESSAGE, // 0x15
DISCONNECT, // 0x16 NAMED_SOUND, // 0x16
ENTITY_STATUS, // 0x17 DISCONNECT, // 0x17
EXPLOSION, // 0x18 ENTITY_STATUS, // 0x18
UNLOAD_CHUNK, // 0x19 EXPLOSION, // 0x19
GAME_EVENT, // 0x1A UNLOAD_CHUNK, // 0x1A
OPEN_HORSE_WINDOW, // 0x1B GAME_EVENT, // 0x1B
WORLD_BORDER_INIT, // 0x1C OPEN_HORSE_WINDOW, // 0x1C
KEEP_ALIVE, // 0x1D WORLD_BORDER_INIT, // 0x1D
CHUNK_DATA, // 0x1E KEEP_ALIVE, // 0x1E
EFFECT, // 0x1F CHUNK_DATA, // 0x1F
SPAWN_PARTICLE, // 0x20 EFFECT, // 0x20
UPDATE_LIGHT, // 0x21 SPAWN_PARTICLE, // 0x21
JOIN_GAME, // 0x22 UPDATE_LIGHT, // 0x22
MAP_DATA, // 0x23 JOIN_GAME, // 0x23
TRADE_LIST, // 0x24 MAP_DATA, // 0x24
ENTITY_POSITION, // 0x25 TRADE_LIST, // 0x25
ENTITY_POSITION_AND_ROTATION, // 0x26 ENTITY_POSITION, // 0x26
ENTITY_ROTATION, // 0x27 ENTITY_POSITION_AND_ROTATION, // 0x27
VEHICLE_MOVE, // 0x28 ENTITY_ROTATION, // 0x28
OPEN_BOOK, // 0x29 VEHICLE_MOVE, // 0x29
OPEN_WINDOW, // 0x2A OPEN_BOOK, // 0x2A
OPEN_SIGN_EDITOR, // 0x2B OPEN_WINDOW, // 0x2B
PING, // 0x2C OPEN_SIGN_EDITOR, // 0x2C
CRAFT_RECIPE_RESPONSE, // 0x2D PING, // 0x2D
PLAYER_ABILITIES, // 0x2E CRAFT_RECIPE_RESPONSE, // 0x2E
PLAYER_CHAT, // 0x2F PLAYER_ABILITIES, // 0x2F
COMBAT_END, // 0x30 PLAYER_CHAT, // 0x30
COMBAT_ENTER, // 0x31 COMBAT_END, // 0x31
COMBAT_KILL, // 0x32 COMBAT_ENTER, // 0x32
PLAYER_INFO, // 0x33 COMBAT_KILL, // 0x33
FACE_PLAYER, // 0x34 PLAYER_INFO, // 0x34
PLAYER_POSITION, // 0x35 FACE_PLAYER, // 0x35
UNLOCK_RECIPES, // 0x36 PLAYER_POSITION, // 0x36
REMOVE_ENTITIES, // 0x37 UNLOCK_RECIPES, // 0x37
REMOVE_ENTITY_EFFECT, // 0x38 REMOVE_ENTITIES, // 0x38
RESOURCE_PACK, // 0x39 REMOVE_ENTITY_EFFECT, // 0x39
RESPAWN, // 0x3A RESOURCE_PACK, // 0x3A
ENTITY_HEAD_LOOK, // 0x3B RESPAWN, // 0x3B
MULTI_BLOCK_CHANGE, // 0x3C ENTITY_HEAD_LOOK, // 0x3C
SELECT_ADVANCEMENTS_TAB, // 0x3D MULTI_BLOCK_CHANGE, // 0x3D
ACTIONBAR, // 0x3E SELECT_ADVANCEMENTS_TAB, // 0x3E
WORLD_BORDER_CENTER, // 0x3F SERVER_DATA, // 0x3F
WORLD_BORDER_LERP_SIZE, // 0x40 ACTIONBAR, // 0x40
WORLD_BORDER_SIZE, // 0x41 WORLD_BORDER_CENTER, // 0x41
WORLD_BORDER_WARNING_DELAY, // 0x42 WORLD_BORDER_LERP_SIZE, // 0x42
WORLD_BORDER_WARNING_DISTANCE, // 0x43 WORLD_BORDER_SIZE, // 0x43
CAMERA, // 0x44 WORLD_BORDER_WARNING_DELAY, // 0x44
HELD_ITEM_CHANGE, // 0x45 WORLD_BORDER_WARNING_DISTANCE, // 0x45
UPDATE_VIEW_POSITION, // 0x46 CAMERA, // 0x46
UPDATE_VIEW_DISTANCE, // 0x47 HELD_ITEM_CHANGE, // 0x47
SPAWN_POSITION, // 0x48 UPDATE_VIEW_POSITION, // 0x48
DISPLAY_SCOREBOARD, // 0x49 UPDATE_VIEW_DISTANCE, // 0x49
ENTITY_METADATA, // 0x4A SPAWN_POSITION, // 0x4A
ATTACH_ENTITY, // 0x4B DISPLAY_SCOREBOARD, // 0x4B
ENTITY_VELOCITY, // 0x4C ENTITY_METADATA, // 0x4C
ENTITY_EQUIPMENT, // 0x4D ATTACH_ENTITY, // 0x4D
SET_EXPERIENCE, // 0x4E ENTITY_VELOCITY, // 0x4E
UPDATE_HEALTH, // 0x4F ENTITY_EQUIPMENT, // 0x4F
SCOREBOARD_OBJECTIVE, // 0x50 SET_EXPERIENCE, // 0x50
SET_PASSENGERS, // 0x51 UPDATE_HEALTH, // 0x51
TEAMS, // 0x52 SCOREBOARD_OBJECTIVE, // 0x52
UPDATE_SCORE, // 0x53 SET_PASSENGERS, // 0x53
SET_SIMULATION_DISTANCE, // 0x54 TEAMS, // 0x54
TITLE_SUBTITLE, // 0x55 UPDATE_SCORE, // 0x55
TIME_UPDATE, // 0x56 SET_SIMULATION_DISTANCE, // 0x56
TITLE_TEXT, // 0x57 TITLE_SUBTITLE, // 0x57
TITLE_TIMES, // 0x58 TIME_UPDATE, // 0x58
ENTITY_SOUND, // 0x59 TITLE_TEXT, // 0x59
SOUND, // 0x5A TITLE_TIMES, // 0x5A
STOP_SOUND, // 0x5B ENTITY_SOUND, // 0x5B
SYSTEM_CHAT, // 0x5C SOUND, // 0x5C
TAB_LIST, // 0x5D STOP_SOUND, // 0x5D
NBT_QUERY, // 0x5E SYSTEM_CHAT, // 0x5E
COLLECT_ITEM, // 0x5F TAB_LIST, // 0x5F
ENTITY_TELEPORT, // 0x60 NBT_QUERY, // 0x60
ADVANCEMENTS, // 0x61 COLLECT_ITEM, // 0x61
ENTITY_PROPERTIES, // 0x62 ENTITY_TELEPORT, // 0x62
ENTITY_EFFECT, // 0x63 ADVANCEMENTS, // 0x63
DECLARE_RECIPES, // 0x64 ENTITY_PROPERTIES, // 0x64
TAGS; // 0x65 ENTITY_EFFECT, // 0x65
DECLARE_RECIPES, // 0x66
TAGS; // 0x67
@Override @Override
public int getId() { public int getId() {

View File

@ -38,6 +38,7 @@ import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPacke
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.EntityPackets; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.EntityPackets;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.InventoryPackets; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.InventoryPackets;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.WorldPackets; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets.WorldPackets;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage.DimensionRegistryStorage;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage.NonceStorage; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage.NonceStorage;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage.SequenceStorage; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage.SequenceStorage;
import com.viaversion.viaversion.rewriter.CommandRewriter; import com.viaversion.viaversion.rewriter.CommandRewriter;
@ -179,6 +180,7 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol<ClientboundPack
read(Type.LONG); // Timestamp read(Type.LONG); // Timestamp
read(Type.LONG); // Salt read(Type.LONG); // Salt
read(Type.BYTE_ARRAY_PRIMITIVE); // Signature read(Type.BYTE_ARRAY_PRIMITIVE); // Signature
read(Type.BOOLEAN); // Signed preview
} }
}); });
registerServerbound(ServerboundPackets1_19.CHAT_COMMAND, ServerboundPackets1_17.CHAT_MESSAGE, new PacketRemapper() { registerServerbound(ServerboundPackets1_19.CHAT_COMMAND, ServerboundPackets1_17.CHAT_MESSAGE, new PacketRemapper() {
@ -199,6 +201,7 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol<ClientboundPack
}); });
} }
}); });
cancelServerbound(ServerboundPackets1_19.CHAT_PREVIEW);
// Login changes // Login changes
registerClientbound(State.LOGIN, ClientboundLoginPackets.GAME_PROFILE.getId(), ClientboundLoginPackets.GAME_PROFILE.getId(), new PacketRemapper() { registerClientbound(State.LOGIN, ClientboundLoginPackets.GAME_PROFILE.getId(), ClientboundLoginPackets.GAME_PROFILE.getId(), new PacketRemapper() {
@ -206,10 +209,7 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol<ClientboundPack
public void registerMap() { public void registerMap() {
map(Type.UUID); // UUID map(Type.UUID); // UUID
map(Type.STRING); // Name map(Type.STRING); // Name
handler(wrapper -> { create(Type.VAR_INT, 0); // No properties
// No properties
wrapper.write(Type.VAR_INT, 0);
});
} }
}); });
@ -217,11 +217,9 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol<ClientboundPack
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.STRING); // Server id map(Type.STRING); // Server id
map(Type.BYTE_ARRAY_PRIMITIVE); // Public key
map(Type.BYTE_ARRAY_PRIMITIVE); // Nonce
handler(wrapper -> { handler(wrapper -> {
final byte[] pubKey = wrapper.get(Type.BYTE_ARRAY_PRIMITIVE, 0); final byte[] pubKey = wrapper.passthrough(Type.BYTE_ARRAY_PRIMITIVE);
final byte[] nonce = wrapper.get(Type.BYTE_ARRAY_PRIMITIVE, 1); final byte[] nonce = wrapper.passthrough(Type.BYTE_ARRAY_PRIMITIVE);
final EncodedKeySpec keySpec = new X509EncodedKeySpec(pubKey); final EncodedKeySpec keySpec = new X509EncodedKeySpec(pubKey);
final PublicKey key = RSA_FACTORY.generatePublic(keySpec); final PublicKey key = RSA_FACTORY.generatePublic(keySpec);
final Cipher cipher = Cipher.getInstance(key.getAlgorithm()); final Cipher cipher = Cipher.getInstance(key.getAlgorithm());
@ -236,9 +234,10 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol<ClientboundPack
public void registerMap() { public void registerMap() {
map(Type.STRING); // Name map(Type.STRING); // Name
handler(wrapper -> { handler(wrapper -> {
// Read the public key
if (wrapper.read(Type.BOOLEAN)) { if (wrapper.read(Type.BOOLEAN)) {
wrapper.read(Type.NBT); wrapper.read(Type.LONG); // Timestamp
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Key
wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Signature
} }
}); });
} }
@ -285,6 +284,7 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol<ClientboundPack
@Override @Override
public void init(final UserConnection user) { public void init(final UserConnection user) {
user.put(new SequenceStorage()); user.put(new SequenceStorage());
user.put(new DimensionRegistryStorage());
addEntityTracker(user, new EntityTrackerBase(user, Entity1_19Types.PLAYER)); addEntityTracker(user, new EntityTrackerBase(user, Entity1_19Types.PLAYER));
} }

View File

@ -26,50 +26,51 @@ public enum ServerboundPackets1_19 implements ServerboundPacketType {
SET_DIFFICULTY, // 0x02 SET_DIFFICULTY, // 0x02
CHAT_COMMAND, // 0x03 CHAT_COMMAND, // 0x03
CHAT_MESSAGE, // 0x04 CHAT_MESSAGE, // 0x04
CLIENT_STATUS, // 0x05 CHAT_PREVIEW, // 0x05
CLIENT_SETTINGS, // 0x06 CLIENT_STATUS, // 0x06
TAB_COMPLETE, // 0x07 CLIENT_SETTINGS, // 0x07
CLICK_WINDOW_BUTTON, // 0x08 TAB_COMPLETE, // 0x08
CLICK_WINDOW, // 0x09 CLICK_WINDOW_BUTTON, // 0x09
CLOSE_WINDOW, // 0x0A CLICK_WINDOW, // 0x0A
PLUGIN_MESSAGE, // 0x0B CLOSE_WINDOW, // 0x0B
EDIT_BOOK, // 0x0C PLUGIN_MESSAGE, // 0x0C
ENTITY_NBT_REQUEST, // 0x0D EDIT_BOOK, // 0x0D
INTERACT_ENTITY, // 0x0E ENTITY_NBT_REQUEST, // 0x0E
GENERATE_JIGSAW, // 0x0F INTERACT_ENTITY, // 0x0F
KEEP_ALIVE, // 0x10 GENERATE_JIGSAW, // 0x10
LOCK_DIFFICULTY, // 0x11 KEEP_ALIVE, // 0x11
PLAYER_POSITION, // 0x12 LOCK_DIFFICULTY, // 0x12
PLAYER_POSITION_AND_ROTATION, // 0x13 PLAYER_POSITION, // 0x13
PLAYER_ROTATION, // 0x14 PLAYER_POSITION_AND_ROTATION, // 0x14
PLAYER_MOVEMENT, // 0x15 PLAYER_ROTATION, // 0x15
VEHICLE_MOVE, // 0x16 PLAYER_MOVEMENT, // 0x16
STEER_BOAT, // 0x17 VEHICLE_MOVE, // 0x17
PICK_ITEM, // 0x18 STEER_BOAT, // 0x18
CRAFT_RECIPE_REQUEST, // 0x19 PICK_ITEM, // 0x19
PLAYER_ABILITIES, // 0x1A CRAFT_RECIPE_REQUEST, // 0x1A
PLAYER_DIGGING, // 0x1B PLAYER_ABILITIES, // 0x1B
ENTITY_ACTION, // 0x1C PLAYER_DIGGING, // 0x1C
STEER_VEHICLE, // 0x1D ENTITY_ACTION, // 0x1D
PONG, // 0x1E STEER_VEHICLE, // 0x1E
RECIPE_BOOK_DATA, // 0x1F PONG, // 0x1F
SEEN_RECIPE, // 0x20 RECIPE_BOOK_DATA, // 0x20
RENAME_ITEM, // 0x21 SEEN_RECIPE, // 0x21
RESOURCE_PACK_STATUS, // 0x22 RENAME_ITEM, // 0x22
ADVANCEMENT_TAB, // 0x23 RESOURCE_PACK_STATUS, // 0x23
SELECT_TRADE, // 0x24 ADVANCEMENT_TAB, // 0x24
SET_BEACON_EFFECT, // 0x25 SELECT_TRADE, // 0x25
HELD_ITEM_CHANGE, // 0x26 SET_BEACON_EFFECT, // 0x26
UPDATE_COMMAND_BLOCK, // 0x27 HELD_ITEM_CHANGE, // 0x27
UPDATE_COMMAND_BLOCK_MINECART, // 0x28 UPDATE_COMMAND_BLOCK, // 0x28
CREATIVE_INVENTORY_ACTION, // 0x29 UPDATE_COMMAND_BLOCK_MINECART, // 0x29
UPDATE_JIGSAW_BLOCK, // 0x2A CREATIVE_INVENTORY_ACTION, // 0x2A
UPDATE_STRUCTURE_BLOCK, // 0x2B UPDATE_JIGSAW_BLOCK, // 0x2B
UPDATE_SIGN, // 0x2C UPDATE_STRUCTURE_BLOCK, // 0x2C
ANIMATION, // 0x2D UPDATE_SIGN, // 0x2D
SPECTATE, // 0x2E ANIMATION, // 0x2E
PLAYER_BLOCK_PLACEMENT, // 0x2F SPECTATE, // 0x2F
USE_ITEM; // 0x30 PLAYER_BLOCK_PLACEMENT, // 0x30
USE_ITEM; // 0x31
@Override @Override
public int getId() { public int getId() {

View File

@ -17,28 +17,105 @@
*/ */
package com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets; package com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.github.steveice10.opennbt.tag.builtin.ListTag;
import com.github.steveice10.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.api.data.entity.DimensionData;
import com.viaversion.viaversion.api.minecraft.Position; import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.minecraft.Position3d;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.api.minecraft.nbt.BinaryTagIO;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.types.version.Types1_18; import com.viaversion.viaversion.api.type.types.version.Types1_18;
import com.viaversion.viaversion.api.type.types.version.Types1_19; import com.viaversion.viaversion.api.type.types.version.Types1_19;
import com.viaversion.viaversion.data.entity.DimensionDataImpl;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.util.PaintingOffsetUtil; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage.DimensionRegistryStorage;
import com.viaversion.viaversion.rewriter.EntityRewriter; import com.viaversion.viaversion.rewriter.EntityRewriter;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public final class EntityPackets extends EntityRewriter<Protocol1_19To1_18_2> { public final class EntityPackets extends EntityRewriter<Protocol1_19To1_18_2> {
private static final String CHAT_REGISTRY_SNBT = "{\n" +
" \"minecraft:chat_type\":{\n" +
" \"type\":\"minecraft:chat_type\",\n" +
" \"value\":[\n" +
" {\n" +
" \"name\":\"minecraft:chat\",\n" +
" \"id\":0,\n" +
" \"element\":{\n" +
" \"chat\":{\n" +
" \"decoration\":{\n" +
" \"translation_key\":\"chat.type.text\",\n" +
" \"style\":{\n" +
" \n" +
" },\n" +
" \"parameters\":[\n" +
" \"sender\",\n" +
" \"content\"\n" +
" ]\n" +
" }\n" +
" },\n" +
" \"narration\":{\n" +
" \"priority\":\"chat\",\n" +
" \"decoration\":{\n" +
" \"translation_key\":\"chat.type.text.narrate\",\n" +
" \"style\":{\n" +
" \n" +
" },\n" +
" \"parameters\":[\n" +
" \"sender\",\n" +
" \"content\"\n" +
" ]\n" +
" }\n" +
" }\n" +
" }\n" +
" },\n" +
" {\n" +
" \"name\":\"minecraft:system\",\n" +
" \"id\":1,\n" +
" \"element\":{\n" +
" \"chat\":{\n" +
" \n" +
" },\n" +
" \"narration\":{\n" +
" \"priority\":\"system\"\n" +
" }\n" +
" }\n" +
" },\n" +
" {\n" +
" \"name\":\"minecraft:game_info\",\n" +
" \"id\":2,\n" +
" \"element\":{\n" +
" \"overlay\":{\n" +
" \n" +
" }\n" +
" }\n" +
" },\n" +
" ]\n" +
" },\n" +
"}";
private static final CompoundTag CHAT_REGISTRY;
static {
try {
CHAT_REGISTRY = BinaryTagIO.readString(CHAT_REGISTRY_SNBT).get("minecraft:chat_type");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public EntityPackets(final Protocol1_19To1_18_2 protocol) { public EntityPackets(final Protocol1_19To1_18_2 protocol) {
super(protocol); super(protocol);
mapTypes(Entity1_17Types.values(), Entity1_19Types.class); mapTypes(Entity1_17Types.values(), Entity1_19Types.class);
@ -84,11 +161,9 @@ public final class EntityPackets extends EntityRewriter<Protocol1_19To1_18_2> {
final int motive = wrapper.read(Type.VAR_INT); final int motive = wrapper.read(Type.VAR_INT);
final Position blockPosition = wrapper.read(Type.POSITION1_14); final Position blockPosition = wrapper.read(Type.POSITION1_14);
final byte direction = wrapper.read(Type.BYTE); final byte direction = wrapper.read(Type.BYTE);
wrapper.write(Type.DOUBLE, blockPosition.x() + 0.5d);
final Position3d position = PaintingOffsetUtil.fixOffset(blockPosition, motive, direction); //TODO currently broken on servers; can probably remove the offsetting wrapper.write(Type.DOUBLE, blockPosition.y() + 0.5d);
wrapper.write(Type.DOUBLE, position.x()); wrapper.write(Type.DOUBLE, blockPosition.z() + 0.5d);
wrapper.write(Type.DOUBLE, position.y());
wrapper.write(Type.DOUBLE, position.z());
wrapper.write(Type.BYTE, (byte) 0); // Pitch wrapper.write(Type.BYTE, (byte) 0); // Pitch
wrapper.write(Type.BYTE, (byte) 0); // Yaw wrapper.write(Type.BYTE, (byte) 0); // Yaw
wrapper.write(Type.BYTE, (byte) 0); // Head yaw wrapper.write(Type.BYTE, (byte) 0); // Head yaw
@ -152,23 +227,45 @@ public final class EntityPackets extends EntityRewriter<Protocol1_19To1_18_2> {
map(Type.BYTE); // Previous Gamemode map(Type.BYTE); // Previous Gamemode
map(Type.STRING_ARRAY); // World List map(Type.STRING_ARRAY); // World List
map(Type.NBT); // Registry map(Type.NBT); // Registry
map(Type.NBT); // Current dimension data handler(wrapper -> {
final CompoundTag tag = wrapper.get(Type.NBT, 0);
// Add necessary chat types
tag.put("minecraft:chat_type", CHAT_REGISTRY.clone());
// Cache a whole lot of data
final ListTag dimensions = ((CompoundTag) tag.get("minecraft:dimension_type")).get("value");
final Map<String, DimensionData> dimensionDataMap = new HashMap<>(dimensions.size());
final Map<CompoundTag, String> dimensionsMap = new HashMap<>(dimensions.size());
for (final Tag dimension : dimensions) {
final CompoundTag dimensionCompound = (CompoundTag) dimension;
final CompoundTag element = dimensionCompound.get("element");
final String name = (String) dimensionCompound.get("name").getValue();
dimensionDataMap.put(name, new DimensionDataImpl(element));
dimensionsMap.put(element, name);
}
tracker(wrapper.user()).setDimensions(dimensionDataMap);
final DimensionRegistryStorage registryStorage = wrapper.user().get(DimensionRegistryStorage.class);
registryStorage.setDimensions(dimensionsMap);
writeDimensionKey(wrapper, registryStorage);
});
map(Type.STRING); // World map(Type.STRING); // World
map(Type.LONG); // Seed map(Type.LONG); // Seed
map(Type.VAR_INT); // Max players map(Type.VAR_INT); // Max players
map(Type.VAR_INT); // Chunk radius map(Type.VAR_INT); // Chunk radius
map(Type.VAR_INT); // Simulation distance map(Type.VAR_INT); // Simulation distance
handler(playerTrackerHandler()); handler(playerTrackerHandler());
handler(worldDataTrackerHandler(1)); handler(worldDataTrackerHandlerByKey());
handler(biomeSizeTracker()); handler(biomeSizeTracker());
} }
}); });
protocol.registerClientbound(ClientboundPackets1_18.RESPAWN, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_18.RESPAWN, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.NBT); // Current dimension data handler(wrapper -> writeDimensionKey(wrapper, wrapper.user().get(DimensionRegistryStorage.class)));
map(Type.STRING); // World map(Type.STRING); // World
handler(worldDataTrackerHandler(0)); handler(worldDataTrackerHandlerByKey());
} }
}); });
@ -213,6 +310,17 @@ public final class EntityPackets extends EntityRewriter<Protocol1_19To1_18_2> {
}); });
} }
private static void writeDimensionKey(PacketWrapper wrapper, DimensionRegistryStorage registryStorage) throws Exception {
// Find dimension key by data
final CompoundTag currentDimension = wrapper.read(Type.NBT);
final String dimensionKey = registryStorage.dimensionKey(currentDimension);
if (dimensionKey == null) {
throw new IllegalArgumentException("Unknown dimension sent on join: " + currentDimension);
}
wrapper.write(Type.STRING, dimensionKey);
}
private static int to3dId(final int id) { private static int to3dId(final int id) {
switch (id) { switch (id) {
case -1: // Both up and down case -1: // Both up and down

View File

@ -17,6 +17,7 @@
*/ */
package com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets; package com.viaversion.viaversion.protocols.protocol1_19to1_18_2.packets;
import com.google.common.base.Preconditions;
import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.data.entity.EntityTracker;
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;
@ -58,6 +59,8 @@ public final class WorldPackets {
public void registerMap() { public void registerMap() {
handler(wrapper -> { handler(wrapper -> {
final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user()); final EntityTracker tracker = protocol.getEntityRewriter().tracker(wrapper.user());
Preconditions.checkArgument(tracker.biomesSent() != 0, "Biome count not set");
Preconditions.checkArgument(tracker.currentWorldSectionHeight() != 0, "Section height not set");
final Chunk1_18Type chunkType = new Chunk1_18Type(tracker.currentWorldSectionHeight(), final Chunk1_18Type chunkType = new Chunk1_18Type(tracker.currentWorldSectionHeight(),
MathUtil.ceilLog2(protocol.getMappingData().getBlockStateMappings().mappedSize()), MathUtil.ceilLog2(protocol.getMappingData().getBlockStateMappings().mappedSize()),
MathUtil.ceilLog2(tracker.biomesSent())); MathUtil.ceilLog2(tracker.biomesSent()));

View File

@ -0,0 +1,37 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2022 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viaversion.protocols.protocol1_19to1_18_2.storage;
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.api.connection.StorableObject;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Map;
public final class DimensionRegistryStorage implements StorableObject {
private Map<CompoundTag, String> dimensions;
public @Nullable String dimensionKey(CompoundTag dimensionData) {
return dimensions.get(dimensionData); // HMMMMMMMMMMM
}
public void setDimensions(final Map<CompoundTag, String> dimensions) {
this.dimensions = dimensions;
}
}

View File

@ -1,100 +0,0 @@
/*
* Copyright (c) 2019-2022 GeyserMC. http://geysermc.org
*
* 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.
*
* @author GeyserMC
* @link https://github.com/GeyserMC/Geyser
*/
package com.viaversion.viaversion.protocols.protocol1_19to1_18_2.util;
import com.viaversion.viaversion.api.minecraft.Position;
import com.viaversion.viaversion.api.minecraft.Position3d;
public final class PaintingOffsetUtil {
private static final double MAGIC_OFFSET = -0.46875;
private static final PaintingVariant[] VARIANTS = {
new PaintingVariant(16, 16),
new PaintingVariant(16, 16),
new PaintingVariant(16, 16),
new PaintingVariant(16, 16),
new PaintingVariant(16, 16),
new PaintingVariant(16, 16),
new PaintingVariant(16, 16),
new PaintingVariant(32, 16),
new PaintingVariant(32, 16),
new PaintingVariant(32, 16),
new PaintingVariant(32, 16),
new PaintingVariant(32, 16),
new PaintingVariant(16, 32),
new PaintingVariant(16, 32),
new PaintingVariant(32, 32),
new PaintingVariant(32, 32),
new PaintingVariant(32, 32),
new PaintingVariant(32, 32),
new PaintingVariant(32, 32),
new PaintingVariant(32, 32),
new PaintingVariant(64, 32),
new PaintingVariant(64, 64),
new PaintingVariant(64, 64),
new PaintingVariant(64, 64),
new PaintingVariant(64, 48),
new PaintingVariant(64, 48)
};
public static Position3d fixOffset(final Position position, final int motive, final int direction) {
final PaintingVariant variant = VARIANTS[motive];
final double offY = variant.height > 1 && variant.height != 3 ? 0.5 : 0;
final double offX;
final double offZ;
final double widthOffset = variant.width > 1 ? 0.5 : 0;
switch (direction) {
case 0:
offX = widthOffset;
offZ = MAGIC_OFFSET;
break;
case 1:
offX = -MAGIC_OFFSET;
offZ = widthOffset;
break;
case 2:
offX = -widthOffset;
offZ = -MAGIC_OFFSET;
break;
case 3:
offX = MAGIC_OFFSET;
offZ = -widthOffset;
break;
default:
throw new IllegalArgumentException("Invalid direction: " + direction);
}
return new Position3d(position.x() + offX + 0.5d, position.y() + offY + 0.5d, position.z() + offZ + 0.5d);
}
private static final class PaintingVariant {
private final int width;
private final int height;
private PaintingVariant(final int width, final int height) {
this.width = width / 16;
this.height = height / 16;
}
}
}

View File

@ -25,6 +25,7 @@ import com.google.common.base.Preconditions;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.ParticleMappings;
import com.viaversion.viaversion.api.data.entity.DimensionData;
import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.item.Item;
@ -432,6 +433,28 @@ public abstract class EntityRewriter<T extends Protocol> extends RewriterBase<T>
}; };
} }
public PacketHandler worldDataTrackerHandlerByKey() {
return wrapper -> {
EntityTracker tracker = tracker(wrapper.user());
String key = wrapper.get(Type.STRING, 0);
DimensionData dimensionData = tracker.dimensionData(key);
if (dimensionData == null) {
Via.getPlatform().getLogger().severe("Dimension data missing for dimension: " + key + ", falling back to overworld");
dimensionData = tracker.dimensionData("minecraft:overworld");
Preconditions.checkNotNull(dimensionData, "Overworld data missing");
}
tracker.setCurrentWorldSectionHeight(dimensionData.height() >> 4);
tracker.setCurrentMinY(dimensionData.minY());
String world = wrapper.get(Type.STRING, 0);
if (tracker.currentWorld() != null && !tracker.currentWorld().equals(world)) {
tracker.clearEntities();
}
tracker.setCurrentWorld(world);
};
}
public PacketHandler biomeSizeTracker() { public PacketHandler biomeSizeTracker() {
return wrapper -> { return wrapper -> {
final CompoundTag registry = wrapper.get(Type.NBT, 0); final CompoundTag registry = wrapper.get(Type.NBT, 0);

View File

@ -1614,30 +1614,30 @@
"1611": "minecraft:piston[extended=false,facing=west]", "1611": "minecraft:piston[extended=false,facing=west]",
"1612": "minecraft:piston[extended=false,facing=up]", "1612": "minecraft:piston[extended=false,facing=up]",
"1613": "minecraft:piston[extended=false,facing=down]", "1613": "minecraft:piston[extended=false,facing=down]",
"1614": "minecraft:piston_head[facing=north,short=true,type=normal]", "1614": "minecraft:piston_head[type=normal,facing=north,short=true]",
"1615": "minecraft:piston_head[facing=north,short=true,type=sticky]", "1615": "minecraft:piston_head[type=sticky,facing=north,short=true]",
"1616": "minecraft:piston_head[facing=north,short=false,type=normal]", "1616": "minecraft:piston_head[type=normal,facing=north,short=false]",
"1617": "minecraft:piston_head[facing=north,short=false,type=sticky]", "1617": "minecraft:piston_head[type=sticky,facing=north,short=false]",
"1618": "minecraft:piston_head[facing=east,short=true,type=normal]", "1618": "minecraft:piston_head[type=normal,facing=east,short=true]",
"1619": "minecraft:piston_head[facing=east,short=true,type=sticky]", "1619": "minecraft:piston_head[type=sticky,facing=east,short=true]",
"1620": "minecraft:piston_head[facing=east,short=false,type=normal]", "1620": "minecraft:piston_head[type=normal,facing=east,short=false]",
"1621": "minecraft:piston_head[facing=east,short=false,type=sticky]", "1621": "minecraft:piston_head[type=sticky,facing=east,short=false]",
"1622": "minecraft:piston_head[facing=south,short=true,type=normal]", "1622": "minecraft:piston_head[type=normal,facing=south,short=true]",
"1623": "minecraft:piston_head[facing=south,short=true,type=sticky]", "1623": "minecraft:piston_head[type=sticky,facing=south,short=true]",
"1624": "minecraft:piston_head[facing=south,short=false,type=normal]", "1624": "minecraft:piston_head[type=normal,facing=south,short=false]",
"1625": "minecraft:piston_head[facing=south,short=false,type=sticky]", "1625": "minecraft:piston_head[type=sticky,facing=south,short=false]",
"1626": "minecraft:piston_head[facing=west,short=true,type=normal]", "1626": "minecraft:piston_head[type=normal,facing=west,short=true]",
"1627": "minecraft:piston_head[facing=west,short=true,type=sticky]", "1627": "minecraft:piston_head[type=sticky,facing=west,short=true]",
"1628": "minecraft:piston_head[facing=west,short=false,type=normal]", "1628": "minecraft:piston_head[type=normal,facing=west,short=false]",
"1629": "minecraft:piston_head[facing=west,short=false,type=sticky]", "1629": "minecraft:piston_head[type=sticky,facing=west,short=false]",
"1630": "minecraft:piston_head[facing=up,short=true,type=normal]", "1630": "minecraft:piston_head[type=normal,facing=up,short=true]",
"1631": "minecraft:piston_head[facing=up,short=true,type=sticky]", "1631": "minecraft:piston_head[type=sticky,facing=up,short=true]",
"1632": "minecraft:piston_head[facing=up,short=false,type=normal]", "1632": "minecraft:piston_head[type=normal,facing=up,short=false]",
"1633": "minecraft:piston_head[facing=up,short=false,type=sticky]", "1633": "minecraft:piston_head[type=sticky,facing=up,short=false]",
"1634": "minecraft:piston_head[facing=down,short=true,type=normal]", "1634": "minecraft:piston_head[type=normal,facing=down,short=true]",
"1635": "minecraft:piston_head[facing=down,short=true,type=sticky]", "1635": "minecraft:piston_head[type=sticky,facing=down,short=true]",
"1636": "minecraft:piston_head[facing=down,short=false,type=normal]", "1636": "minecraft:piston_head[type=normal,facing=down,short=false]",
"1637": "minecraft:piston_head[facing=down,short=false,type=sticky]", "1637": "minecraft:piston_head[type=sticky,facing=down,short=false]",
"1638": "minecraft:white_wool", "1638": "minecraft:white_wool",
"1639": "minecraft:orange_wool", "1639": "minecraft:orange_wool",
"1640": "minecraft:magenta_wool", "1640": "minecraft:magenta_wool",
@ -1654,18 +1654,18 @@
"1651": "minecraft:green_wool", "1651": "minecraft:green_wool",
"1652": "minecraft:red_wool", "1652": "minecraft:red_wool",
"1653": "minecraft:black_wool", "1653": "minecraft:black_wool",
"1654": "minecraft:moving_piston[facing=north,type=normal]", "1654": "minecraft:moving_piston[type=normal,facing=north]",
"1655": "minecraft:moving_piston[facing=north,type=sticky]", "1655": "minecraft:moving_piston[type=sticky,facing=north]",
"1656": "minecraft:moving_piston[facing=east,type=normal]", "1656": "minecraft:moving_piston[type=normal,facing=east]",
"1657": "minecraft:moving_piston[facing=east,type=sticky]", "1657": "minecraft:moving_piston[type=sticky,facing=east]",
"1658": "minecraft:moving_piston[facing=south,type=normal]", "1658": "minecraft:moving_piston[type=normal,facing=south]",
"1659": "minecraft:moving_piston[facing=south,type=sticky]", "1659": "minecraft:moving_piston[type=sticky,facing=south]",
"1660": "minecraft:moving_piston[facing=west,type=normal]", "1660": "minecraft:moving_piston[type=normal,facing=west]",
"1661": "minecraft:moving_piston[facing=west,type=sticky]", "1661": "minecraft:moving_piston[type=sticky,facing=west]",
"1662": "minecraft:moving_piston[facing=up,type=normal]", "1662": "minecraft:moving_piston[type=normal,facing=up]",
"1663": "minecraft:moving_piston[facing=up,type=sticky]", "1663": "minecraft:moving_piston[type=sticky,facing=up]",
"1664": "minecraft:moving_piston[facing=down,type=normal]", "1664": "minecraft:moving_piston[type=normal,facing=down]",
"1665": "minecraft:moving_piston[facing=down,type=sticky]", "1665": "minecraft:moving_piston[type=sticky,facing=down]",
"1666": "minecraft:dandelion", "1666": "minecraft:dandelion",
"1667": "minecraft:poppy", "1667": "minecraft:poppy",
"1668": "minecraft:blue_orchid", "1668": "minecraft:blue_orchid",
@ -2288,30 +2288,30 @@
"2285": "minecraft:oak_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]", "2285": "minecraft:oak_stairs[facing=east,half=bottom,shape=outer_left,waterlogged=false]",
"2286": "minecraft:oak_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true]", "2286": "minecraft:oak_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=true]",
"2287": "minecraft:oak_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]", "2287": "minecraft:oak_stairs[facing=east,half=bottom,shape=outer_right,waterlogged=false]",
"2288": "minecraft:chest[facing=north,type=single,waterlogged=true]", "2288": "minecraft:chest[type=single,facing=north,waterlogged=true]",
"2289": "minecraft:chest[facing=north,type=single,waterlogged=false]", "2289": "minecraft:chest[type=single,facing=north,waterlogged=false]",
"2290": "minecraft:chest[facing=north,type=left,waterlogged=true]", "2290": "minecraft:chest[type=left,facing=north,waterlogged=true]",
"2291": "minecraft:chest[facing=north,type=left,waterlogged=false]", "2291": "minecraft:chest[type=left,facing=north,waterlogged=false]",
"2292": "minecraft:chest[facing=north,type=right,waterlogged=true]", "2292": "minecraft:chest[type=right,facing=north,waterlogged=true]",
"2293": "minecraft:chest[facing=north,type=right,waterlogged=false]", "2293": "minecraft:chest[type=right,facing=north,waterlogged=false]",
"2294": "minecraft:chest[facing=south,type=single,waterlogged=true]", "2294": "minecraft:chest[type=single,facing=south,waterlogged=true]",
"2295": "minecraft:chest[facing=south,type=single,waterlogged=false]", "2295": "minecraft:chest[type=single,facing=south,waterlogged=false]",
"2296": "minecraft:chest[facing=south,type=left,waterlogged=true]", "2296": "minecraft:chest[type=left,facing=south,waterlogged=true]",
"2297": "minecraft:chest[facing=south,type=left,waterlogged=false]", "2297": "minecraft:chest[type=left,facing=south,waterlogged=false]",
"2298": "minecraft:chest[facing=south,type=right,waterlogged=true]", "2298": "minecraft:chest[type=right,facing=south,waterlogged=true]",
"2299": "minecraft:chest[facing=south,type=right,waterlogged=false]", "2299": "minecraft:chest[type=right,facing=south,waterlogged=false]",
"2300": "minecraft:chest[facing=west,type=single,waterlogged=true]", "2300": "minecraft:chest[type=single,facing=west,waterlogged=true]",
"2301": "minecraft:chest[facing=west,type=single,waterlogged=false]", "2301": "minecraft:chest[type=single,facing=west,waterlogged=false]",
"2302": "minecraft:chest[facing=west,type=left,waterlogged=true]", "2302": "minecraft:chest[type=left,facing=west,waterlogged=true]",
"2303": "minecraft:chest[facing=west,type=left,waterlogged=false]", "2303": "minecraft:chest[type=left,facing=west,waterlogged=false]",
"2304": "minecraft:chest[facing=west,type=right,waterlogged=true]", "2304": "minecraft:chest[type=right,facing=west,waterlogged=true]",
"2305": "minecraft:chest[facing=west,type=right,waterlogged=false]", "2305": "minecraft:chest[type=right,facing=west,waterlogged=false]",
"2306": "minecraft:chest[facing=east,type=single,waterlogged=true]", "2306": "minecraft:chest[type=single,facing=east,waterlogged=true]",
"2307": "minecraft:chest[facing=east,type=single,waterlogged=false]", "2307": "minecraft:chest[type=single,facing=east,waterlogged=false]",
"2308": "minecraft:chest[facing=east,type=left,waterlogged=true]", "2308": "minecraft:chest[type=left,facing=east,waterlogged=true]",
"2309": "minecraft:chest[facing=east,type=left,waterlogged=false]", "2309": "minecraft:chest[type=left,facing=east,waterlogged=false]",
"2310": "minecraft:chest[facing=east,type=right,waterlogged=true]", "2310": "minecraft:chest[type=right,facing=east,waterlogged=true]",
"2311": "minecraft:chest[facing=east,type=right,waterlogged=false]", "2311": "minecraft:chest[type=right,facing=east,waterlogged=false]",
"2312": "minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=up]", "2312": "minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=up]",
"2313": "minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=side]", "2313": "minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=side]",
"2314": "minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=none]", "2314": "minecraft:redstone_wire[east=up,north=up,power=0,south=up,west=none]",
@ -7239,30 +7239,30 @@
"7236": "minecraft:damaged_anvil[facing=south]", "7236": "minecraft:damaged_anvil[facing=south]",
"7237": "minecraft:damaged_anvil[facing=west]", "7237": "minecraft:damaged_anvil[facing=west]",
"7238": "minecraft:damaged_anvil[facing=east]", "7238": "minecraft:damaged_anvil[facing=east]",
"7239": "minecraft:trapped_chest[facing=north,type=single,waterlogged=true]", "7239": "minecraft:trapped_chest[type=single,facing=north,waterlogged=true]",
"7240": "minecraft:trapped_chest[facing=north,type=single,waterlogged=false]", "7240": "minecraft:trapped_chest[type=single,facing=north,waterlogged=false]",
"7241": "minecraft:trapped_chest[facing=north,type=left,waterlogged=true]", "7241": "minecraft:trapped_chest[type=left,facing=north,waterlogged=true]",
"7242": "minecraft:trapped_chest[facing=north,type=left,waterlogged=false]", "7242": "minecraft:trapped_chest[type=left,facing=north,waterlogged=false]",
"7243": "minecraft:trapped_chest[facing=north,type=right,waterlogged=true]", "7243": "minecraft:trapped_chest[type=right,facing=north,waterlogged=true]",
"7244": "minecraft:trapped_chest[facing=north,type=right,waterlogged=false]", "7244": "minecraft:trapped_chest[type=right,facing=north,waterlogged=false]",
"7245": "minecraft:trapped_chest[facing=south,type=single,waterlogged=true]", "7245": "minecraft:trapped_chest[type=single,facing=south,waterlogged=true]",
"7246": "minecraft:trapped_chest[facing=south,type=single,waterlogged=false]", "7246": "minecraft:trapped_chest[type=single,facing=south,waterlogged=false]",
"7247": "minecraft:trapped_chest[facing=south,type=left,waterlogged=true]", "7247": "minecraft:trapped_chest[type=left,facing=south,waterlogged=true]",
"7248": "minecraft:trapped_chest[facing=south,type=left,waterlogged=false]", "7248": "minecraft:trapped_chest[type=left,facing=south,waterlogged=false]",
"7249": "minecraft:trapped_chest[facing=south,type=right,waterlogged=true]", "7249": "minecraft:trapped_chest[type=right,facing=south,waterlogged=true]",
"7250": "minecraft:trapped_chest[facing=south,type=right,waterlogged=false]", "7250": "minecraft:trapped_chest[type=right,facing=south,waterlogged=false]",
"7251": "minecraft:trapped_chest[facing=west,type=single,waterlogged=true]", "7251": "minecraft:trapped_chest[type=single,facing=west,waterlogged=true]",
"7252": "minecraft:trapped_chest[facing=west,type=single,waterlogged=false]", "7252": "minecraft:trapped_chest[type=single,facing=west,waterlogged=false]",
"7253": "minecraft:trapped_chest[facing=west,type=left,waterlogged=true]", "7253": "minecraft:trapped_chest[type=left,facing=west,waterlogged=true]",
"7254": "minecraft:trapped_chest[facing=west,type=left,waterlogged=false]", "7254": "minecraft:trapped_chest[type=left,facing=west,waterlogged=false]",
"7255": "minecraft:trapped_chest[facing=west,type=right,waterlogged=true]", "7255": "minecraft:trapped_chest[type=right,facing=west,waterlogged=true]",
"7256": "minecraft:trapped_chest[facing=west,type=right,waterlogged=false]", "7256": "minecraft:trapped_chest[type=right,facing=west,waterlogged=false]",
"7257": "minecraft:trapped_chest[facing=east,type=single,waterlogged=true]", "7257": "minecraft:trapped_chest[type=single,facing=east,waterlogged=true]",
"7258": "minecraft:trapped_chest[facing=east,type=single,waterlogged=false]", "7258": "minecraft:trapped_chest[type=single,facing=east,waterlogged=false]",
"7259": "minecraft:trapped_chest[facing=east,type=left,waterlogged=true]", "7259": "minecraft:trapped_chest[type=left,facing=east,waterlogged=true]",
"7260": "minecraft:trapped_chest[facing=east,type=left,waterlogged=false]", "7260": "minecraft:trapped_chest[type=left,facing=east,waterlogged=false]",
"7261": "minecraft:trapped_chest[facing=east,type=right,waterlogged=true]", "7261": "minecraft:trapped_chest[type=right,facing=east,waterlogged=true]",
"7262": "minecraft:trapped_chest[facing=east,type=right,waterlogged=false]", "7262": "minecraft:trapped_chest[type=right,facing=east,waterlogged=false]",
"7263": "minecraft:light_weighted_pressure_plate[power=0]", "7263": "minecraft:light_weighted_pressure_plate[power=0]",
"7264": "minecraft:light_weighted_pressure_plate[power=1]", "7264": "minecraft:light_weighted_pressure_plate[power=1]",
"7265": "minecraft:light_weighted_pressure_plate[power=2]", "7265": "minecraft:light_weighted_pressure_plate[power=2]",
@ -25040,6 +25040,8 @@
"minecraft:time", "minecraft:time",
"minecraft:resource_or_tag", "minecraft:resource_or_tag",
"minecraft:resource", "minecraft:resource",
"minecraft:template_mirror",
"minecraft:template_rotation",
"minecraft:uuid" "minecraft:uuid"
], ],
"enchantments": [ "enchantments": [

View File

@ -111,6 +111,91 @@
"256": "minecraft:flowering_azalea_leaves[distance=6,persistent=true,waterlogged=false]", "256": "minecraft:flowering_azalea_leaves[distance=6,persistent=true,waterlogged=false]",
"257": "minecraft:flowering_azalea_leaves[distance=6,persistent=false,waterlogged=false]", "257": "minecraft:flowering_azalea_leaves[distance=6,persistent=false,waterlogged=false]",
"258": "minecraft:flowering_azalea_leaves[distance=7,persistent=true,waterlogged=false]", "258": "minecraft:flowering_azalea_leaves[distance=7,persistent=true,waterlogged=false]",
"259": "minecraft:flowering_azalea_leaves[distance=7,persistent=false,waterlogged=false]" "259": "minecraft:flowering_azalea_leaves[distance=7,persistent=false,waterlogged=false]",
"1416": "minecraft:piston_head[type=normal,facing=north,short=true]",
"1417": "minecraft:piston_head[type=sticky,facing=north,short=true]",
"1418": "minecraft:piston_head[type=normal,facing=north,short=false]",
"1419": "minecraft:piston_head[type=sticky,facing=north,short=false]",
"1420": "minecraft:piston_head[type=normal,facing=east,short=true]",
"1421": "minecraft:piston_head[type=sticky,facing=east,short=true]",
"1422": "minecraft:piston_head[type=normal,facing=east,short=false]",
"1423": "minecraft:piston_head[type=sticky,facing=east,short=false]",
"1424": "minecraft:piston_head[type=normal,facing=south,short=true]",
"1425": "minecraft:piston_head[type=sticky,facing=south,short=true]",
"1426": "minecraft:piston_head[type=normal,facing=south,short=false]",
"1427": "minecraft:piston_head[type=sticky,facing=south,short=false]",
"1428": "minecraft:piston_head[type=normal,facing=west,short=true]",
"1429": "minecraft:piston_head[type=sticky,facing=west,short=true]",
"1430": "minecraft:piston_head[type=normal,facing=west,short=false]",
"1431": "minecraft:piston_head[type=sticky,facing=west,short=false]",
"1432": "minecraft:piston_head[type=normal,facing=up,short=true]",
"1433": "minecraft:piston_head[type=sticky,facing=up,short=true]",
"1434": "minecraft:piston_head[type=normal,facing=up,short=false]",
"1435": "minecraft:piston_head[type=sticky,facing=up,short=false]",
"1436": "minecraft:piston_head[type=normal,facing=down,short=true]",
"1437": "minecraft:piston_head[type=sticky,facing=down,short=true]",
"1438": "minecraft:piston_head[type=normal,facing=down,short=false]",
"1439": "minecraft:piston_head[type=sticky,facing=down,short=false]",
"1456": "minecraft:moving_piston[type=normal,facing=north]",
"1457": "minecraft:moving_piston[type=sticky,facing=north]",
"1458": "minecraft:moving_piston[type=normal,facing=east]",
"1459": "minecraft:moving_piston[type=sticky,facing=east]",
"1460": "minecraft:moving_piston[type=normal,facing=south]",
"1461": "minecraft:moving_piston[type=sticky,facing=south]",
"1462": "minecraft:moving_piston[type=normal,facing=west]",
"1463": "minecraft:moving_piston[type=sticky,facing=west]",
"1464": "minecraft:moving_piston[type=normal,facing=up]",
"1465": "minecraft:moving_piston[type=sticky,facing=up]",
"1466": "minecraft:moving_piston[type=normal,facing=down]",
"1467": "minecraft:moving_piston[type=sticky,facing=down]",
"2090": "minecraft:chest[type=single,facing=north,waterlogged=true]",
"2091": "minecraft:chest[type=single,facing=north,waterlogged=false]",
"2092": "minecraft:chest[type=left,facing=north,waterlogged=true]",
"2093": "minecraft:chest[type=left,facing=north,waterlogged=false]",
"2094": "minecraft:chest[type=right,facing=north,waterlogged=true]",
"2095": "minecraft:chest[type=right,facing=north,waterlogged=false]",
"2096": "minecraft:chest[type=single,facing=south,waterlogged=true]",
"2097": "minecraft:chest[type=single,facing=south,waterlogged=false]",
"2098": "minecraft:chest[type=left,facing=south,waterlogged=true]",
"2099": "minecraft:chest[type=left,facing=south,waterlogged=false]",
"2100": "minecraft:chest[type=right,facing=south,waterlogged=true]",
"2101": "minecraft:chest[type=right,facing=south,waterlogged=false]",
"2102": "minecraft:chest[type=single,facing=west,waterlogged=true]",
"2103": "minecraft:chest[type=single,facing=west,waterlogged=false]",
"2104": "minecraft:chest[type=left,facing=west,waterlogged=true]",
"2105": "minecraft:chest[type=left,facing=west,waterlogged=false]",
"2106": "minecraft:chest[type=right,facing=west,waterlogged=true]",
"2107": "minecraft:chest[type=right,facing=west,waterlogged=false]",
"2108": "minecraft:chest[type=single,facing=east,waterlogged=true]",
"2109": "minecraft:chest[type=single,facing=east,waterlogged=false]",
"2110": "minecraft:chest[type=left,facing=east,waterlogged=true]",
"2111": "minecraft:chest[type=left,facing=east,waterlogged=false]",
"2112": "minecraft:chest[type=right,facing=east,waterlogged=true]",
"2113": "minecraft:chest[type=right,facing=east,waterlogged=false]",
"6828": "minecraft:trapped_chest[type=single,facing=north,waterlogged=true]",
"6829": "minecraft:trapped_chest[type=single,facing=north,waterlogged=false]",
"6830": "minecraft:trapped_chest[type=left,facing=north,waterlogged=true]",
"6831": "minecraft:trapped_chest[type=left,facing=north,waterlogged=false]",
"6832": "minecraft:trapped_chest[type=right,facing=north,waterlogged=true]",
"6833": "minecraft:trapped_chest[type=right,facing=north,waterlogged=false]",
"6834": "minecraft:trapped_chest[type=single,facing=south,waterlogged=true]",
"6835": "minecraft:trapped_chest[type=single,facing=south,waterlogged=false]",
"6836": "minecraft:trapped_chest[type=left,facing=south,waterlogged=true]",
"6837": "minecraft:trapped_chest[type=left,facing=south,waterlogged=false]",
"6838": "minecraft:trapped_chest[type=right,facing=south,waterlogged=true]",
"6839": "minecraft:trapped_chest[type=right,facing=south,waterlogged=false]",
"6840": "minecraft:trapped_chest[type=single,facing=west,waterlogged=true]",
"6841": "minecraft:trapped_chest[type=single,facing=west,waterlogged=false]",
"6842": "minecraft:trapped_chest[type=left,facing=west,waterlogged=true]",
"6843": "minecraft:trapped_chest[type=left,facing=west,waterlogged=false]",
"6844": "minecraft:trapped_chest[type=right,facing=west,waterlogged=true]",
"6845": "minecraft:trapped_chest[type=right,facing=west,waterlogged=false]",
"6846": "minecraft:trapped_chest[type=single,facing=east,waterlogged=true]",
"6847": "minecraft:trapped_chest[type=single,facing=east,waterlogged=false]",
"6848": "minecraft:trapped_chest[type=left,facing=east,waterlogged=true]",
"6849": "minecraft:trapped_chest[type=left,facing=east,waterlogged=false]",
"6850": "minecraft:trapped_chest[type=right,facing=east,waterlogged=true]",
"6851": "minecraft:trapped_chest[type=right,facing=east,waterlogged=false]"
} }
} }

View File

@ -1,5 +1,5 @@
# Project properties - we put these here so they can be modified without causing a recompile of the build scripts # Project properties - we put these here so they can be modified without causing a recompile of the build scripts
projectVersion=4.3.0-22w18a-SNAPSHOT projectVersion=4.3.0-22w19a-SNAPSHOT
# Gradle properties # Gradle properties
org.gradle.daemon=true org.gradle.daemon=true