This commit is contained in:
Nassim Jahnke 2022-03-16 22:16:22 +01:00
parent 422f2b699b
commit 15a5e6f710
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B
9 changed files with 369 additions and 18 deletions

View File

@ -58,7 +58,7 @@ import java.util.logging.Logger;
public interface ViaBackwardsPlatform { public interface ViaBackwardsPlatform {
String MINIMUM_VV_VERSION = "4.2.0"; String MINIMUM_VV_VERSION = "4.3.0";
String IMPL_VERSION = "$IMPL_VERSION"; String IMPL_VERSION = "$IMPL_VERSION";
/** /**
@ -111,9 +111,9 @@ public interface ViaBackwardsPlatform {
protocolManager.registerProtocol(new Protocol1_17To1_17_1(), ProtocolVersion.v1_17, ProtocolVersion.v1_17_1); protocolManager.registerProtocol(new Protocol1_17To1_17_1(), ProtocolVersion.v1_17, ProtocolVersion.v1_17_1);
protocolManager.registerProtocol(new Protocol1_17_1To1_18(), ProtocolVersion.v1_17_1, ProtocolVersion.v1_18); protocolManager.registerProtocol(new Protocol1_17_1To1_18(), ProtocolVersion.v1_17_1, ProtocolVersion.v1_18);
//protocolManager.registerProtocol(new Protocol1_18To1_18_2(), ProtocolVersion.v1_18, ProtocolVersion.v1_18_2); //TODO protocolManager.registerProtocol(new Protocol1_18To1_18_2(), ProtocolVersion.v1_18, ProtocolVersion.v1_18_2);
protocolManager.registerProtocol(new Protocol1_18_2To1_19(), ProtocolVersion.v1_18, ProtocolVersion.v1_19); protocolManager.registerProtocol(new Protocol1_18_2To1_19(), ProtocolVersion.v1_18_2, ProtocolVersion.v1_19);
} }
/** /**

View File

@ -154,6 +154,11 @@ public class BackwardsMappings extends MappingDataBase {
} }
public @Nullable String mappedEntityName(String entityName) { public @Nullable String mappedEntityName(String entityName) {
if (entityNames == null) {
ViaBackwards.getPlatform().getLogger().severe("No entity mappings found when requesting them for " + entityName);
new Exception().printStackTrace();
return null;
}
return entityNames.get(entityName); return entityNames.get(entityName);
} }

View File

@ -17,27 +17,32 @@
*/ */
package com.viaversion.viabackwards.protocol.protocol1_18_2to1_19; package com.viaversion.viabackwards.protocol.protocol1_18_2to1_19;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.data.BackwardsMappings;
import com.viaversion.viabackwards.api.rewriters.SoundRewriter; import com.viaversion.viabackwards.api.rewriters.SoundRewriter;
import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter; import com.viaversion.viabackwards.api.rewriters.TranslatableRewriter;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.data.BackwardsMappings;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.packets.BlockItemPackets1_19; import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.packets.BlockItemPackets1_19;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.packets.EntityPackets1_19; import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.packets.EntityPackets1_19;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.storage.BlockAckStorage;
import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types;
import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper;
import com.viaversion.viaversion.api.rewriter.EntityRewriter; import com.viaversion.viaversion.api.rewriter.EntityRewriter;
import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.rewriter.ItemRewriter;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.data.entity.EntityTrackerBase;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17;
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.rewriter.CommandRewriter;
import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter;
import com.viaversion.viaversion.rewriter.TagRewriter; import com.viaversion.viaversion.rewriter.TagRewriter;
public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPackets1_19, ClientboundPackets1_18, ServerboundPackets1_17, ServerboundPackets1_17> { public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPackets1_19, ClientboundPackets1_18, ServerboundPackets1_17, ServerboundPackets1_17> {
public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.19", "1.18", Protocol1_19To1_18_2.class, true); public static final BackwardsMappings MAPPINGS = new BackwardsMappings();
private final EntityPackets1_19 entityRewriter = new EntityPackets1_19(this); private final EntityPackets1_19 entityRewriter = new EntityPackets1_19(this);
private final BlockItemPackets1_19 blockItemPackets = new BlockItemPackets1_19(this); private final BlockItemPackets1_19 blockItemPackets = new BlockItemPackets1_19(this);
private final TranslatableRewriter translatableRewriter = new TranslatableRewriter(this); private final TranslatableRewriter translatableRewriter = new TranslatableRewriter(this);
@ -51,6 +56,7 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
//TODO block entity update, chunk? //TODO block entity update, chunk?
executeAsyncAfterLoaded(Protocol1_19To1_18_2.class, MAPPINGS::load); executeAsyncAfterLoaded(Protocol1_19To1_18_2.class, MAPPINGS::load);
//TODO update translation mappings
translatableRewriter.registerComponentPacket(ClientboundPackets1_19.CHAT_MESSAGE); translatableRewriter.registerComponentPacket(ClientboundPackets1_19.CHAT_MESSAGE);
translatableRewriter.registerComponentPacket(ClientboundPackets1_19.ACTIONBAR); translatableRewriter.registerComponentPacket(ClientboundPackets1_19.ACTIONBAR);
translatableRewriter.registerComponentPacket(ClientboundPackets1_19.TITLE_TEXT); translatableRewriter.registerComponentPacket(ClientboundPackets1_19.TITLE_TEXT);
@ -74,10 +80,51 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol<ClientboundPac
new TagRewriter(this).registerGeneric(ClientboundPackets1_19.TAGS); new TagRewriter(this).registerGeneric(ClientboundPackets1_19.TAGS);
new StatisticsRewriter(this).register(ClientboundPackets1_19.STATISTICS); new StatisticsRewriter(this).register(ClientboundPackets1_19.STATISTICS);
final CommandRewriter commandRewriter = new CommandRewriter(this);
registerClientbound(ClientboundPackets1_19.DECLARE_COMMANDS, new PacketRemapper() {
@Override
public void registerMap() {
handler(wrapper -> {
final int size = wrapper.passthrough(Type.VAR_INT);
for (int i = 0; i < size; i++) {
final byte flags = wrapper.passthrough(Type.BYTE);
wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); // Children indices
if ((flags & 0x08) != 0) {
wrapper.passthrough(Type.VAR_INT); // Redirect node index
}
final int nodeType = flags & 0x03;
if (nodeType == 1 || nodeType == 2) { // Literal/argument node
wrapper.passthrough(Type.STRING); // Name
}
if (nodeType == 2) { // Argument node
final int argumentTypeId = wrapper.read(Type.VAR_INT);
String argumentType = MAPPINGS.argumentType(argumentTypeId);
if (argumentType == null) {
ViaBackwards.getPlatform().getLogger().warning("Unknown command argument type id: " + argumentTypeId);
argumentType = "minecraft:no";
}
wrapper.write(Type.STRING, argumentType);
commandRewriter.handleArgument(wrapper, argumentType);
if ((flags & 0x10) != 0) {
wrapper.passthrough(Type.STRING); // Suggestion type
}
}
}
wrapper.passthrough(Type.VAR_INT); // Root node index
});
}
});
} }
@Override @Override
public void init(final UserConnection user) { public void init(final UserConnection user) {
user.put(new BlockAckStorage());
addEntityTracker(user, new EntityTrackerBase(user, Entity1_19Types.PLAYER)); addEntityTracker(user, new EntityTrackerBase(user, Entity1_19Types.PLAYER));
} }

View File

@ -0,0 +1,49 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* 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.viabackwards.protocol.protocol1_18_2to1_19.data;
import com.viaversion.viaversion.libs.gson.JsonArray;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.Protocol1_19To1_18_2;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class BackwardsMappings extends com.viaversion.viabackwards.api.data.BackwardsMappings {
private String[] argumentTypes;
public BackwardsMappings() {
super("1.19", "1.18", Protocol1_19To1_18_2.class, true);
}
@Override
protected void loadExtras(final JsonObject oldMappings, final JsonObject newMappings, @Nullable final JsonObject diffMappings) {
super.loadExtras(oldMappings, newMappings, diffMappings);
int i = 0;
final JsonArray types = oldMappings.getAsJsonArray("argumenttypes");
this.argumentTypes = new String[types.size()];
for (final JsonElement element : types) {
final String id = element.getAsString();
this.argumentTypes[i++] = id;
}
}
public @Nullable String argumentType(final int argumentTypeId) {
return argumentTypeId >= 0 && argumentTypeId < argumentTypes.length ? argumentTypes[argumentTypeId] : null;
}
}

View File

@ -19,16 +19,19 @@ package com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.packets;
import com.viaversion.viabackwards.api.rewriters.ItemRewriter; import com.viaversion.viabackwards.api.rewriters.ItemRewriter;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.Protocol1_18_2To1_19; import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.Protocol1_18_2To1_19;
import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.storage.BlockAckStorage;
import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.ParticleMappings;
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;
import com.viaversion.viaversion.api.minecraft.chunks.DataPalette; import com.viaversion.viaversion.api.minecraft.chunks.DataPalette;
import com.viaversion.viaversion.api.minecraft.chunks.PaletteType; import com.viaversion.viaversion.api.minecraft.chunks.PaletteType;
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.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16; import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.data.RecipeRewriter1_16;
import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18;
import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.types.Chunk1_18Type;
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.rewriter.BlockRewriter; import com.viaversion.viaversion.rewriter.BlockRewriter;
@ -54,7 +57,6 @@ public final class BlockItemPackets1_19 extends ItemRewriter<Protocol1_18_2To1_1
registerAdvancements(ClientboundPackets1_19.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); registerAdvancements(ClientboundPackets1_19.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM);
registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); registerClickWindow1_17_1(ServerboundPackets1_17.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM);
blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_19.ACKNOWLEDGE_PLAYER_DIGGING);
blockRewriter.registerBlockAction(ClientboundPackets1_19.BLOCK_ACTION); blockRewriter.registerBlockAction(ClientboundPackets1_19.BLOCK_ACTION);
blockRewriter.registerBlockChange(ClientboundPackets1_19.BLOCK_CHANGE); blockRewriter.registerBlockChange(ClientboundPackets1_19.BLOCK_CHANGE);
blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_19.MULTI_BLOCK_CHANGE); blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_19.MULTI_BLOCK_CHANGE);
@ -88,10 +90,33 @@ public final class BlockItemPackets1_19 extends ItemRewriter<Protocol1_18_2To1_1
} }
}); });
protocol.registerClientbound(ClientboundPackets1_19.BLOCK_CHANGED_ACK, null, new PacketRemapper() {
@Override
public void registerMap() {
handler(wrapper -> {
wrapper.read(Type.VAR_INT); // Sequence
// The server only sends one a tick
/*final BlockAckStorage storage = wrapper.user().get(BlockAckStorage.class);
BlockAckStorage.BlockAction action;
while ((action = storage.poll()) != null) {
final PacketWrapper ackPacket = wrapper.create(ClientboundPackets1_18.ACKNOWLEDGE_PLAYER_DIGGING);
ackPacket.write(Type.POSITION1_14, blockPosition);
ackPacket.write(Type.VAR_INT, action.action());
ackPacket.write(Type.VAR_INT, (int) action.action());
ackPacket.write(Type.BOOLEAN, true); // Approved
ackPacket.send(Protocol1_18_2To1_19.class);
}*/
wrapper.cancel();
});
}
});
protocol.registerClientbound(ClientboundPackets1_19.SPAWN_PARTICLE, new PacketRemapper() { protocol.registerClientbound(ClientboundPackets1_19.SPAWN_PARTICLE, new PacketRemapper() {
@Override @Override
public void registerMap() { public void registerMap() {
map(Type.INT); // Particle id map(Type.VAR_INT, Type.INT); // Particle id
map(Type.BOOLEAN); // Override limiter map(Type.BOOLEAN); // Override limiter
map(Type.DOUBLE); // X map(Type.DOUBLE); // X
map(Type.DOUBLE); // Y map(Type.DOUBLE); // Y
@ -142,5 +167,43 @@ public final class BlockItemPackets1_19 extends ItemRewriter<Protocol1_18_2To1_1
}); });
} }
}); });
// The server does nothing but track the sequence, so we can just set it as 0
protocol.registerServerbound(ServerboundPackets1_17.PLAYER_DIGGING, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Action
map(Type.POSITION1_14); // Block position
map(Type.UNSIGNED_BYTE); // Direction
create(Type.VAR_INT, 0); // Sequence
handler(wrapper -> {
final int action = wrapper.get(Type.VAR_INT, 0);
if (action < 3) {
final BlockAckStorage storage = wrapper.user().get(BlockAckStorage.class);
storage.add(wrapper.get(Type.POSITION1_14, 0), action, wrapper.get(Type.UNSIGNED_BYTE, 0));
}
});
}
});
protocol.registerServerbound(ServerboundPackets1_17.PLAYER_BLOCK_PLACEMENT, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Hand
map(Type.POSITION1_14); // Block position
map(Type.VAR_INT); // Direction
map(Type.FLOAT); // X
map(Type.FLOAT); // Y
map(Type.FLOAT); // Z
map(Type.BOOLEAN); // Inside
create(Type.VAR_INT, 0); // Sequence
}
});
protocol.registerServerbound(ServerboundPackets1_17.USE_ITEM, new PacketRemapper() {
@Override
public void registerMap() {
map(Type.VAR_INT); // Hand
create(Type.VAR_INT, 0); // Sequence
}
});
} }
} }

View File

@ -24,11 +24,17 @@ 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.MetaType; import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
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.Particle; import com.viaversion.viaversion.api.type.types.Particle;
import com.viaversion.viaversion.api.type.types.version.Types1_14;
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.libs.opennbt.tag.builtin.CompoundTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag;
import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag;
import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19;
public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19> { public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19> {
@ -80,6 +86,18 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
map(Type.VAR_INT); // Chunk radius map(Type.VAR_INT); // Chunk radius
map(Type.VAR_INT); // Read simulation distance map(Type.VAR_INT); // Read simulation distance
handler(worldDataTrackerHandler(1)); handler(worldDataTrackerHandler(1));
handler(wrapper -> {
final CompoundTag registry = wrapper.get(Type.NBT, 0);
final CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome");
final ListTag biomes = biomeRegistry.get("value");
for (final Tag biome : biomes.getValue()) {
final CompoundTag biomeCompound = ((CompoundTag) biome).get("element");
biomeCompound.put("category", new StringTag("none"));
}
// Track amount of biomes sent
tracker(wrapper.user()).setBiomesSent(biomes.size());
});
} }
}); });
@ -120,7 +138,7 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
} else if (type == Types1_18.META_TYPES.poseType) { } else if (type == Types1_18.META_TYPES.poseType) {
final int pose = meta.value(); final int pose = meta.value();
if (pose >= 8) { if (pose >= 8) {
// Roaring, sniffing, emerging, digging -> standing // Croaking, using_tongue, roaring, sniffing, emerging, digging -> standing -> standing
meta.setValue(0); meta.setValue(0);
} }
} }
@ -129,9 +147,23 @@ public final class EntityPackets1_19 extends EntityRewriter<Protocol1_18_2To1_19
registerMetaTypeHandler(Types1_18.META_TYPES.itemType, Types1_18.META_TYPES.blockStateType, null, Types1_18.META_TYPES.optionalComponentType); registerMetaTypeHandler(Types1_18.META_TYPES.itemType, Types1_18.META_TYPES.blockStateType, null, Types1_18.META_TYPES.optionalComponentType);
mapTypes(Entity1_19Types.values(), Entity1_17Types.class); mapTypes(Entity1_19Types.values(), Entity1_17Types.class);
filter().type(Entity1_19Types.WARDEN).cancel(16); // Anger
mapEntityTypeWithData(Entity1_19Types.WARDEN, Entity1_19Types.IRON_GOLEM).jsonName(); filter().filterFamily(Entity1_19Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> {
final int data = (int) meta.getValue();
meta.setValue(protocol.getMappingData().getNewBlockStateId(data));
});
filter().type(Entity1_19Types.FROG).cancel(16); // Age
filter().type(Entity1_19Types.FROG).cancel(17); // Anger
mapEntityTypeWithData(Entity1_19Types.FROG, Entity1_19Types.PUFFERFISH).jsonName().spawnMetadata(storage -> {
storage.add(new Metadata(17, Types1_14.META_TYPES.varIntType, 2)); // Puff state
}).jsonName();
mapEntityTypeWithData(Entity1_19Types.TADPOLE, Entity1_19Types.PUFFERFISH).jsonName();
//TODO experimental snapshot
/*filter().type(Entity1_19Types.WARDEN).cancel(16); // Anger
mapEntityTypeWithData(Entity1_19Types.WARDEN, Entity1_19Types.IRON_GOLEM).jsonName();*/
} }
@Override @Override

View File

@ -0,0 +1,67 @@
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* 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.viabackwards.protocol.protocol1_18_2to1_19.storage;
import com.viaversion.viaversion.api.connection.StorableObject;
import com.viaversion.viaversion.api.minecraft.Position;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.LinkedList;
import java.util.Queue;
public final class BlockAckStorage implements StorableObject {
private final Queue<BlockAction> actions = new LinkedList<>();
public void add(final Position position, final int action, final short direction) {
actions.add(new BlockAction(position, (byte) action, direction));
// Some actions may be left unacknowledged by modded servers
if (actions.size() > 100) {
actions.poll();
}
}
public @Nullable BlockAction poll() {
return actions.poll();
}
public static final class BlockAction {
private final Position position;
private final byte action;
private final short direction;
public BlockAction(final Position position, final byte action, final short direction) {
this.position = position;
this.action = action;
this.direction = direction;
}
public Position position() {
return position;
}
public byte action() {
return action;
}
public short direction() {
return direction;
}
}
}

View File

@ -2,11 +2,42 @@
"blockstates": { "blockstates": {
"minecraft:sculk": "minecraft:black_concrete_powder", "minecraft:sculk": "minecraft:black_concrete_powder",
"minecraft:sculk_vein": "minecraft:glow_lichen[", "minecraft:sculk_vein": "minecraft:glow_lichen[",
"minecraft:sculk_catalyst[bloom=true]": "minecraft:end_stone", "minecraft:sculk_catalyst": "minecraft:end_stone",
"minecraft:sculk_catalyst[bloom=false]": "minecraft:end_stone", "minecraft:sculk_shrieker[shrieking=true,waterlogged=true]": "minecraft:end_portal_frame[eye=true,facing=north]",
"minecraft:sculk_shrieker[shrieking=true]": "minecraft:end_portal_frame[eye=true,facing=north]", "minecraft:sculk_shrieker[shrieking=true,waterlogged=false]": "minecraft:end_portal_frame[eye=true,facing=north]",
"minecraft:sculk_shrieker[shrieking=false]": "minecraft:end_portal_frame[eye=false,facing=north]", "minecraft:sculk_shrieker[shrieking=false,waterlogged=true]": "minecraft:end_portal_frame[eye=false,facing=north]",
"minecraft:reinforced_deepslate": "minecraft:obsidian" "minecraft:sculk_shrieker[shrieking=false,waterlogged=false]": "minecraft:end_portal_frame[eye=false,facing=north]",
"minecraft:reinforced_deepslate": "minecraft:obsidian",
"minecraft:mangrove_planks": "minecraft:acacia_planks",
"minecraft:stripped_mangrove_log": "minecraft:stripped_acacia_log[",
"minecraft:stripped_mangrove_wood": "minecraft:stripped_acacia_wood[",
"minecraft:mangrove_wood": "minecraft:acacia_wood[",
"minecraft:mangrove_log": "minecraft:acacia_log[",
"minecraft:mangrove_leaves": "minecraft:acacia_leaves[",
"minecraft:mangrove_sign": "minecraft:acacia_sign[",
"minecraft:mangrove_wall_sign": "minecraft:acacia_wall_sign[",
"minecraft:mangrove_pressure_plate": "minecraft:acacia_pressure_plate[",
"minecraft:mangrove_trapdoor": "minecraft:acacia_trapdoor[",
"minecraft:mangrove_button": "minecraft:acacia_button[",
"minecraft:mangrove_stairs": "minecraft:acacia_stairs[",
"minecraft:mangrove_slab": "minecraft:acacia_slab[",
"minecraft:mangrove_fence_gate": "minecraft:acacia_fence_gate[",
"minecraft:mangrove_fence": "minecraft:acacia_fence[",
"minecraft:mangrove_door": "minecraft:acacia_door[",
"minecraft:mud_bricks": "minecraft:bricks",
"minecraft:packed_mud": "minecraft:bricks",
"minecraft:mud_brick_stairs": "minecraft:brick_stairs[",
"minecraft:mud_brick_slab": "minecraft:brick_slab[",
"minecraft:mud_brick_wall": "minecraft:brick_wall[",
"minecraft:muddy_mangrove_roots": "minecraft:coarse_dirt",
"minecraft:mud": "minecraft:coarse_dirt",
"minecraft:mangrove_propagule": "minecraft:fern",
"minecraft:mangrove_roots": "minecraft:oak_wood[axis=y]",
"minecraft:ochre_froglight": "minecraft:sea_lantern",
"minecraft:verdant_froglight": "minecraft:sea_lantern",
"minecraft:pearlescent_froglight": "minecraft:sea_lantern",
"minecraft:potted_mangrove_propagule": "minecraft:potted_acacia_sapling",
"minecraft:frogspawn": "minecraft:air"
}, },
"sounds": { "sounds": {
"music.overworld.deep_dark": "", "music.overworld.deep_dark": "",
@ -52,7 +83,59 @@
"entity.warden.dig": "", "entity.warden.dig": "",
"entity.warden.nearby_closest": "", "entity.warden.nearby_closest": "",
"entity.warden.nearby_closer": "", "entity.warden.nearby_closer": "",
"entity.warden.nearby_close": "" "entity.warden.nearby_close": "",
"item.bucket.empty_tadpole": "",
"item.bucket.fill_tadpole": "",
"block.froglight.break": "",
"block.froglight.fall": "",
"block.froglight.hit": "",
"block.froglight.place": "",
"block.froglight.step": "",
"block.frogspawn.step": "",
"block.frogspawn.break": "",
"block.frogspawn.fall": "",
"block.frogspawn.hatch": "",
"block.frogspawn.hit": "",
"block.frogspawn.place": "",
"entity.frog.ambient": "",
"entity.frog.death": "",
"entity.frog.eat": "",
"entity.frog.hurt": "",
"entity.frog.lay_spawn": "",
"entity.frog.long_jump": "",
"entity.frog.step": "",
"entity.frog.tounge": "",
"block.mangrove_roots.break": "",
"block.mangrove_roots.fall": "",
"block.mangrove_roots.hit": "",
"block.mangrove_roots.place": "",
"block.mangrove_roots.step": "",
"block.mud.break": "",
"block.mud.fall": "",
"block.mud.hit": "",
"block.mud.place": "",
"block.mud.step": "",
"block.mud_bricks.break": "",
"block.mud_bricks.fall": "",
"block.mud_bricks.hit": "",
"block.mud_bricks.place": "",
"block.mud_bricks.step": "",
"block.muddy_mangrove_roots.break": "",
"block.muddy_mangrove_roots.fall": "",
"block.muddy_mangrove_roots.hit": "",
"block.muddy_mangrove_roots.place": "",
"block.muddy_mangrove_roots.step": "",
"block.packed_mud.break": "",
"block.packed_mud.fall": "",
"block.packed_mud.hit": "",
"block.packed_mud.place": "",
"block.packed_mud.step": "",
"entity.tadpole.death": "",
"entity.tadpole.eat": "",
"entity.tadpole.flop": "",
"entity.tadpole.grow_up": "",
"entity.tadpole.hurt": "",
"entity.tadpole.step": ""
}, },
"items": { "items": {
"minecraft:warden_spawn_egg": { "minecraft:warden_spawn_egg": {
@ -86,7 +169,13 @@
"sculk_charge_pop": "bubble_pop", "sculk_charge_pop": "bubble_pop",
"shriek": "" "shriek": ""
}, },
"blockentities": {
"sculk_catalyst": "",
"sculk_shrieker": ""
},
"entitynames": { "entitynames": {
"warden": "Warden" "warden": "Warden",
"frog": "Frog",
"tadpole": "Tadpole"
} }
} }

View File

@ -4,7 +4,6 @@ rootProject.name = "viabackwards-parent"
dependencyResolutionManagement { dependencyResolutionManagement {
repositories { repositories {
mavenLocal()
maven("https://repo.viaversion.com") maven("https://repo.viaversion.com")
maven("https://papermc.io/repo/repository/maven-public/") maven("https://papermc.io/repo/repository/maven-public/")
maven("https://oss.sonatype.org/content/repositories/snapshots/") maven("https://oss.sonatype.org/content/repositories/snapshots/")