Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-11-20 06:50:08 +01:00
Merge branch 'master' into dev
Dieser Commit ist enthalten in:
Commit
6b7bf843a1
@ -2,6 +2,7 @@ package us.myles.ViaVersion.bungee.platform;
|
|||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
@ -23,14 +24,17 @@ public class BungeeViaAPI implements ViaAPI<ProxiedPlayer> {
|
|||||||
@Override
|
@Override
|
||||||
public int getPlayerVersion(@NonNull ProxiedPlayer player) {
|
public int getPlayerVersion(@NonNull ProxiedPlayer player) {
|
||||||
if (!isPorted(player.getUniqueId()))
|
if (!isPorted(player.getUniqueId()))
|
||||||
return ProtocolRegistry.SERVER_PROTOCOL;
|
return player.getPendingConnection().getVersion();
|
||||||
return getPortedPlayers().get(player.getUniqueId()).get(ProtocolInfo.class).getProtocolVersion();
|
return getPortedPlayers().get(player.getUniqueId()).get(ProtocolInfo.class).getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPlayerVersion(@NonNull UUID uuid) {
|
public int getPlayerVersion(@NonNull UUID uuid) {
|
||||||
if (!isPorted(uuid))
|
if (!isPorted(uuid)) {
|
||||||
|
ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid);
|
||||||
|
if (player != null) return player.getPendingConnection().getVersion();
|
||||||
return ProtocolRegistry.SERVER_PROTOCOL;
|
return ProtocolRegistry.SERVER_PROTOCOL;
|
||||||
|
}
|
||||||
return getPortedPlayers().get(uuid).get(ProtocolInfo.class).getProtocolVersion();
|
return getPortedPlayers().get(uuid).get(ProtocolInfo.class).getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,9 @@ import us.myles.ViaVersion.packets.State;
|
|||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.BlockConnectionProvider;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.PacketBlockConnectionProvider;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.providers.PacketBlockConnectionProvider;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.BlockIdData;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.RecipeData;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.EntityPackets;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.EntityPackets;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.InventoryPackets;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.InventoryPackets;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.WorldPackets;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets.WorldPackets;
|
||||||
@ -125,6 +127,8 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
SCOREBOARD_TEAM_NAME_REWRITE.put(ChatColor.WHITE, '?');
|
SCOREBOARD_TEAM_NAME_REWRITE.put(ChatColor.WHITE, '?');
|
||||||
MappingData.init();
|
MappingData.init();
|
||||||
ConnectionData.init();
|
ConnectionData.init();
|
||||||
|
RecipeData.init();
|
||||||
|
BlockIdData.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -428,11 +432,11 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
registerOutgoing(State.PLAY, 0x2B, 0x2D, new PacketRemapper() {
|
registerOutgoing(State.PLAY, 0x2B, 0x2D, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
|
map(Type.BYTE);
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
// TODO This packet changed
|
wrapper.write(Type.STRING, "viaversion:legacy/" + wrapper.read(Type.VAR_INT));
|
||||||
wrapper.cancel();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -459,15 +463,97 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
// New 0x31 - Face Player
|
// New 0x31 - Face Player
|
||||||
registerOutgoing(State.PLAY, 0x2F, 0x32);
|
registerOutgoing(State.PLAY, 0x2F, 0x32);
|
||||||
registerOutgoing(State.PLAY, 0x30, 0x33);
|
registerOutgoing(State.PLAY, 0x30, 0x33);
|
||||||
// Recipe
|
// Unlock recipes
|
||||||
registerOutgoing(State.PLAY, 0x31, 0x34, new PacketRemapper() {
|
registerOutgoing(State.PLAY, 0x31, 0x34, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT); // action
|
||||||
|
map(Type.BOOLEAN); // crafting book open
|
||||||
|
map(Type.BOOLEAN); // crafting filter active
|
||||||
|
create(new ValueCreator() {
|
||||||
|
@Override
|
||||||
|
public void write(PacketWrapper wrapper) throws Exception {
|
||||||
|
wrapper.write(Type.BOOLEAN, false); // smelting book open
|
||||||
|
wrapper.write(Type.BOOLEAN, false); // smelting filter active
|
||||||
|
}
|
||||||
|
});
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
// TODO: This has changed >.>
|
int action = wrapper.get(Type.VAR_INT, 0);
|
||||||
wrapper.cancel();
|
for (int i = 0; i < (action == 0 ? 2 : 1); i++) {
|
||||||
|
Integer[] ids = wrapper.read(Type.VAR_INT_ARRAY);
|
||||||
|
String[] stringIds = new String[ids.length];
|
||||||
|
for (int j = 0; j < ids.length; j++) {
|
||||||
|
stringIds[j] = "viaversion:legacy/" + ids[j];
|
||||||
|
}
|
||||||
|
wrapper.write(Type.STRING_ARRAY, stringIds);
|
||||||
|
}
|
||||||
|
if (action == 0) {
|
||||||
|
wrapper.create(0x54, new ValueCreator() { // Declare recipes
|
||||||
|
@Override
|
||||||
|
public void write(PacketWrapper wrapper) throws Exception {
|
||||||
|
wrapper.write(Type.VAR_INT, RecipeData.recipes.size());
|
||||||
|
for (Map.Entry<String, RecipeData.Recipe> entry : RecipeData.recipes.entrySet()) {
|
||||||
|
wrapper.write(Type.STRING, entry.getKey()); // Id
|
||||||
|
wrapper.write(Type.STRING, entry.getValue().getType());
|
||||||
|
switch (entry.getValue().getType()) {
|
||||||
|
case "crafting_shapeless": {
|
||||||
|
wrapper.write(Type.STRING, entry.getValue().getGroup());
|
||||||
|
wrapper.write(Type.VAR_INT, entry.getValue().getIngredients().length);
|
||||||
|
for (Item[] ingredient : entry.getValue().getIngredients()) {
|
||||||
|
Item[] clone = ingredient.clone(); // Clone because array and item is mutable
|
||||||
|
for (int i = 0; i < clone.length; i++) {
|
||||||
|
if (clone[i] == null) continue;
|
||||||
|
clone[i] = new Item(clone[i].getId(), clone[i].getAmount(),
|
||||||
|
(short) 0, null);
|
||||||
|
}
|
||||||
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
||||||
|
}
|
||||||
|
wrapper.write(Type.FLAT_ITEM, new Item(
|
||||||
|
entry.getValue().getResult().getId(),
|
||||||
|
entry.getValue().getResult().getAmount(), (short) 0, null));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "crafting_shaped": {
|
||||||
|
wrapper.write(Type.VAR_INT, entry.getValue().getWidth());
|
||||||
|
wrapper.write(Type.VAR_INT, entry.getValue().getHeight());
|
||||||
|
wrapper.write(Type.STRING, entry.getValue().getGroup());
|
||||||
|
for (Item[] ingredient : entry.getValue().getIngredients()) {
|
||||||
|
Item[] clone = ingredient.clone(); // Clone because array and item is mutable
|
||||||
|
for (int i = 0; i < clone.length; i++) {
|
||||||
|
if (clone[i] == null) continue;
|
||||||
|
clone[i] = new Item(clone[i].getId(), clone[i].getAmount(),
|
||||||
|
(short) 0, null);
|
||||||
|
}
|
||||||
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
||||||
|
}
|
||||||
|
wrapper.write(Type.FLAT_ITEM, new Item(
|
||||||
|
entry.getValue().getResult().getId(),
|
||||||
|
entry.getValue().getResult().getAmount(), (short) 0, null));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "smelting": {
|
||||||
|
wrapper.write(Type.STRING, entry.getValue().getGroup());
|
||||||
|
Item[] clone = entry.getValue().getIngredient().clone(); // Clone because array and item is mutable
|
||||||
|
for (int i = 0; i < clone.length; i++) {
|
||||||
|
if (clone[i] == null) continue;
|
||||||
|
clone[i] = new Item(clone[i].getId(), clone[i].getAmount(),
|
||||||
|
(short) 0, null);
|
||||||
|
}
|
||||||
|
wrapper.write(Type.FLAT_ITEM_ARRAY_VAR_INT, clone);
|
||||||
|
wrapper.write(Type.FLAT_ITEM, new Item(
|
||||||
|
entry.getValue().getResult().getId(),
|
||||||
|
entry.getValue().getResult().getAmount(), (short) 0, null));
|
||||||
|
wrapper.write(Type.FLOAT, entry.getValue().getExperience());
|
||||||
|
wrapper.write(Type.VAR_INT, entry.getValue().getCookingTime());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).send(Protocol1_13To1_12_2.class, true, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -834,11 +920,11 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
registerIncoming(State.PLAY, 0x12, 0x16, new PacketRemapper() {
|
registerIncoming(State.PLAY, 0x12, 0x16, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
|
map(Type.BYTE); // Window id
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
// TODO: This has changed >.>
|
wrapper.write(Type.VAR_INT, Integer.parseInt(wrapper.read(Type.STRING).substring(18)));
|
||||||
wrapper.cancel();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -859,6 +945,9 @@ public class Protocol1_13To1_12_2 extends Protocol {
|
|||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int type = wrapper.get(Type.VAR_INT, 0);
|
int type = wrapper.get(Type.VAR_INT, 0);
|
||||||
|
|
||||||
|
if (type == 0) {
|
||||||
|
wrapper.write(Type.INT, Integer.parseInt(wrapper.read(Type.STRING).substring(18)));
|
||||||
|
}
|
||||||
if (type == 1) {
|
if (type == 1) {
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Book Open
|
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Book Open
|
||||||
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Filter Active
|
wrapper.passthrough(Type.BOOLEAN); // Crafting Recipe Filter Active
|
||||||
|
@ -2,7 +2,7 @@ package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections;
|
|||||||
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.minecraft.Position;
|
import us.myles.ViaVersion.api.minecraft.Position;
|
||||||
import us.myles.ViaVersion.api.protocol.ProtocolRegistry;
|
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
||||||
|
|
||||||
public class GlassConnectionHandler extends AbstractFenceConnectionHandler {
|
public class GlassConnectionHandler extends AbstractFenceConnectionHandler {
|
||||||
|
|
||||||
@ -34,6 +34,8 @@ public class GlassConnectionHandler extends AbstractFenceConnectionHandler {
|
|||||||
@Override
|
@Override
|
||||||
protected byte getStates(UserConnection user, Position position, int blockState) {
|
protected byte getStates(UserConnection user, Position position, int blockState) {
|
||||||
byte states = super.getStates(user, position, blockState);
|
byte states = super.getStates(user, position, blockState);
|
||||||
return states == 0 && (ProtocolRegistry.SERVER_PROTOCOL <= 47 && ProtocolRegistry.SERVER_PROTOCOL != -1) ? 0xF : states;
|
return states == 0
|
||||||
|
&& user.get(ProtocolInfo.class).getServerProtocolVersion() <= 47
|
||||||
|
&& user.get(ProtocolInfo.class).getServerProtocolVersion() != -1 ? 0xF : states;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data;
|
||||||
|
|
||||||
|
import com.google.common.collect.ObjectArrays;
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class BlockIdData {
|
||||||
|
public static Map<String, String[]> blockIdMapping;
|
||||||
|
public static Map<String, String[]> fallbackReverseMapping;
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
InputStream stream = MappingData.class.getClassLoader()
|
||||||
|
.getResourceAsStream("assets/viaversion/data/blockIds1.12to1.13.json");
|
||||||
|
InputStreamReader reader = new InputStreamReader(stream);
|
||||||
|
try {
|
||||||
|
blockIdMapping = new HashMap<>((Map<String, String[]>) GsonUtil.getGson().fromJson(
|
||||||
|
reader,
|
||||||
|
new TypeToken<Map<String, String[]>>() {
|
||||||
|
}.getType()
|
||||||
|
));
|
||||||
|
fallbackReverseMapping = new HashMap<>();
|
||||||
|
for (Map.Entry<String, String[]> entry : blockIdMapping.entrySet()) {
|
||||||
|
for (String val : entry.getValue()) {
|
||||||
|
String[] previous = fallbackReverseMapping.get(val);
|
||||||
|
if (previous == null) previous = new String[0];
|
||||||
|
fallbackReverseMapping.put(val, ObjectArrays.concat(previous, entry.getKey()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
// Ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data;
|
||||||
|
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
|
import us.myles.ViaVersion.util.GsonUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class RecipeData {
|
||||||
|
public static Map<String, Recipe> recipes;
|
||||||
|
|
||||||
|
public static void init() {
|
||||||
|
InputStream stream = MappingData.class.getClassLoader()
|
||||||
|
.getResourceAsStream("assets/viaversion/data/itemrecipes1_12_2to1_13.json");
|
||||||
|
InputStreamReader reader = new InputStreamReader(stream);
|
||||||
|
try {
|
||||||
|
recipes = GsonUtil.getGson().fromJson(
|
||||||
|
reader,
|
||||||
|
new TypeToken<Map<String, Recipe>>() {
|
||||||
|
}.getType()
|
||||||
|
);
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
reader.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
// Ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class Recipe {
|
||||||
|
@NonNull
|
||||||
|
private String type;
|
||||||
|
private String group;
|
||||||
|
private int width;
|
||||||
|
private int height;
|
||||||
|
private float experience;
|
||||||
|
private int cookingTime;
|
||||||
|
private Item[] ingredient;
|
||||||
|
private Item[][] ingredients;
|
||||||
|
private Item result;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets;
|
package us.myles.ViaVersion.protocols.protocol1_13to1_12_2.packets;
|
||||||
|
|
||||||
|
import com.github.steveice10.opennbt.conversion.ConverterRegistry;
|
||||||
import com.github.steveice10.opennbt.tag.builtin.*;
|
import com.github.steveice10.opennbt.tag.builtin.*;
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
@ -13,6 +14,7 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
|||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
import us.myles.ViaVersion.packets.State;
|
import us.myles.ViaVersion.packets.State;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.ChatRewriter;
|
||||||
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.BlockIdData;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.SoundSource;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.SoundSource;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.SpawnEggRewriter;
|
import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.SpawnEggRewriter;
|
||||||
@ -373,6 +375,44 @@ public class InventoryPackets {
|
|||||||
tag.remove("StoredEnchantments");
|
tag.remove("StoredEnchantments");
|
||||||
tag.put(newStoredEnch);
|
tag.put(newStoredEnch);
|
||||||
}
|
}
|
||||||
|
if (tag.get("CanPlaceOn") instanceof ListTag) {
|
||||||
|
ListTag old = tag.get("CanPlaceOn");
|
||||||
|
ListTag newCanPlaceOn = new ListTag("CanPlaceOn", StringTag.class);
|
||||||
|
tag.put(ConverterRegistry.convertToTag(NBT_TAG_NAME + "|CanPlaceOn", ConverterRegistry.convertToValue(old))); // There will be data losing
|
||||||
|
for (Tag oldTag : old) {
|
||||||
|
Object value = oldTag.getValue();
|
||||||
|
String[] newValues = BlockIdData.blockIdMapping.get(value instanceof String
|
||||||
|
? ((String) value).replace("minecraft:", "")
|
||||||
|
: null);
|
||||||
|
if (newValues != null) {
|
||||||
|
for (String newValue : newValues) {
|
||||||
|
newCanPlaceOn.add(new StringTag("", newValue));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newCanPlaceOn.add(oldTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tag.put(newCanPlaceOn);
|
||||||
|
}
|
||||||
|
if (tag.get("CanDestroy") instanceof ListTag) {
|
||||||
|
ListTag old = tag.get("CanDestroy");
|
||||||
|
ListTag newCanDestroy = new ListTag("CanDestroy", StringTag.class);
|
||||||
|
tag.put(ConverterRegistry.convertToTag(NBT_TAG_NAME + "|CanDestroy", ConverterRegistry.convertToValue(old))); // There will be data losing
|
||||||
|
for (Tag oldTag : old) {
|
||||||
|
Object value = oldTag.getValue();
|
||||||
|
String[] newValues = BlockIdData.blockIdMapping.get(value instanceof String
|
||||||
|
? ((String) value).replace("minecraft:", "")
|
||||||
|
: null);
|
||||||
|
if (newValues != null) {
|
||||||
|
for (String newValue : newValues) {
|
||||||
|
newCanDestroy.add(new StringTag("", newValue));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newCanDestroy.add(oldTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tag.put(newCanDestroy);
|
||||||
|
}
|
||||||
// Handle SpawnEggs
|
// Handle SpawnEggs
|
||||||
if (item.getIdentifier() == 383) {
|
if (item.getIdentifier() == 383) {
|
||||||
if (tag.get("EntityTag") instanceof CompoundTag) {
|
if (tag.get("EntityTag") instanceof CompoundTag) {
|
||||||
@ -538,7 +578,6 @@ public class InventoryPackets {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display Name now uses JSON
|
// Display Name now uses JSON
|
||||||
if (tag.get("display") instanceof CompoundTag) {
|
if (tag.get("display") instanceof CompoundTag) {
|
||||||
CompoundTag display = tag.get("display");
|
CompoundTag display = tag.get("display");
|
||||||
@ -603,6 +642,54 @@ public class InventoryPackets {
|
|||||||
tag.remove("StoredEnchantments");
|
tag.remove("StoredEnchantments");
|
||||||
tag.put(newStoredEnch);
|
tag.put(newStoredEnch);
|
||||||
}
|
}
|
||||||
|
if (tag.get(NBT_TAG_NAME + "|CanPlaceOn") instanceof ListTag) {
|
||||||
|
tag.put(ConverterRegistry.convertToTag(
|
||||||
|
"CanPlaceOn",
|
||||||
|
ConverterRegistry.convertToValue(tag.get(NBT_TAG_NAME + "|CanPlaceOn"))
|
||||||
|
));
|
||||||
|
tag.remove(NBT_TAG_NAME + "|CanPlaceOn");
|
||||||
|
} else if (tag.get("CanPlaceOn") instanceof ListTag) {
|
||||||
|
ListTag old = tag.get("CanPlaceOn");
|
||||||
|
ListTag newCanPlaceOn = new ListTag("CanPlaceOn", StringTag.class);
|
||||||
|
for (Tag oldTag : old) {
|
||||||
|
Object value = oldTag.getValue();
|
||||||
|
String[] newValues = BlockIdData.fallbackReverseMapping.get(value instanceof String
|
||||||
|
? ((String) value).replace("minecraft:", "")
|
||||||
|
: null);
|
||||||
|
if (newValues != null) {
|
||||||
|
for (String newValue : newValues) {
|
||||||
|
newCanPlaceOn.add(new StringTag("", newValue));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newCanPlaceOn.add(oldTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tag.put(newCanPlaceOn);
|
||||||
|
}
|
||||||
|
if (tag.get(NBT_TAG_NAME + "|CanDestroy") instanceof ListTag) {
|
||||||
|
tag.put(ConverterRegistry.convertToTag(
|
||||||
|
"CanDestroy",
|
||||||
|
ConverterRegistry.convertToValue(tag.get(NBT_TAG_NAME + "|CanDestroy"))
|
||||||
|
));
|
||||||
|
tag.remove(NBT_TAG_NAME + "|CanDestroy");
|
||||||
|
} else if (tag.get("CanDestroy") instanceof ListTag) {
|
||||||
|
ListTag old = tag.get("CanDestroy");
|
||||||
|
ListTag newCanDestroy = new ListTag("CanDestroy", StringTag.class);
|
||||||
|
for (Tag oldTag : old) {
|
||||||
|
Object value = oldTag.getValue();
|
||||||
|
String[] newValues = BlockIdData.fallbackReverseMapping.get(value instanceof String
|
||||||
|
? ((String) value).replace("minecraft:", "")
|
||||||
|
: null);
|
||||||
|
if (newValues != null) {
|
||||||
|
for (String newValue : newValues) {
|
||||||
|
newCanDestroy.add(new StringTag("", newValue));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newCanDestroy.add(oldTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tag.put(newCanDestroy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,20 +132,33 @@ public class PlayerPackets {
|
|||||||
String[] players = wrapper.read(Type.STRING_ARRAY); // Players
|
String[] players = wrapper.read(Type.STRING_ARRAY); // Players
|
||||||
final EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
final EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
||||||
String myName = wrapper.user().get(ProtocolInfo.class).getUsername();
|
String myName = wrapper.user().get(ProtocolInfo.class).getUsername();
|
||||||
|
String teamName = wrapper.get(Type.STRING, 0);
|
||||||
for (String player : players) {
|
for (String player : players) {
|
||||||
if (entityTracker.isAutoTeam() && player.equalsIgnoreCase(myName)) {
|
if (entityTracker.isAutoTeam() && player.equalsIgnoreCase(myName)) {
|
||||||
if (mode == 4) {
|
if (mode == 4) {
|
||||||
// since removing add to auto team
|
// since removing add to auto team
|
||||||
entityTracker.sendTeamPacket(true, false);
|
entityTracker.sendTeamPacket(true, false);
|
||||||
|
entityTracker.setCurrentTeam("viaversion");
|
||||||
} else {
|
} else {
|
||||||
// since adding remove from auto team
|
// since adding remove from auto team
|
||||||
entityTracker.sendTeamPacket(false, true);
|
entityTracker.sendTeamPacket(false, true);
|
||||||
|
entityTracker.setCurrentTeam(teamName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wrapper.write(Type.STRING_ARRAY, players);
|
wrapper.write(Type.STRING_ARRAY, players);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mode == 1) { // Remove team
|
||||||
|
final EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
||||||
|
String teamName = wrapper.get(Type.STRING, 0);
|
||||||
|
if (entityTracker.isAutoTeam()
|
||||||
|
&& teamName.equals(entityTracker.getCurrentTeam())) {
|
||||||
|
// team was removed
|
||||||
|
entityTracker.sendTeamPacket(true, false);
|
||||||
|
entityTracker.setCurrentTeam("viaversion");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -190,6 +203,21 @@ public class PlayerPackets {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Scoreboard will be cleared when join game is received
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
||||||
|
if (Via.getConfig().isAutoTeam()) {
|
||||||
|
entityTracker.setAutoTeam(true);
|
||||||
|
entityTracker.sendTeamPacket(true, false);
|
||||||
|
entityTracker.setCurrentTeam("viaversion");
|
||||||
|
} else {
|
||||||
|
entityTracker.setAutoTeam(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -212,23 +212,6 @@ public class WorldPackets {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Server Difficulty Packet
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x41, 0x0D, new PacketRemapper() {
|
|
||||||
@Override
|
|
||||||
public void registerMap() {
|
|
||||||
handler(new PacketHandler() {
|
|
||||||
@Override
|
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
|
||||||
if (Via.getConfig().isAutoTeam()) {
|
|
||||||
EntityTracker entityTracker = wrapper.user().get(EntityTracker.class);
|
|
||||||
entityTracker.setAutoTeam(true);
|
|
||||||
entityTracker.sendTeamPacket(true, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Block Change Packet
|
// Block Change Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x23, 0x0B, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x23, 0x0B, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
@ -241,6 +224,7 @@ public class WorldPackets {
|
|||||||
|
|
||||||
protocol.registerOutgoing(State.PLAY, 0x25, 0x08); // Block Break Animation Packet
|
protocol.registerOutgoing(State.PLAY, 0x25, 0x08); // Block Break Animation Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x24, 0x0A); // Block Action Packet
|
protocol.registerOutgoing(State.PLAY, 0x24, 0x0A); // Block Action Packet
|
||||||
|
protocol.registerOutgoing(State.PLAY, 0x41, 0x0D); // Server Difficulty Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x22, 0x10); // Multi Block Change Packet
|
protocol.registerOutgoing(State.PLAY, 0x22, 0x10); // Multi Block Change Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x27, 0x1C); // Explosion Packet
|
protocol.registerOutgoing(State.PLAY, 0x27, 0x1C); // Explosion Packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x2A, 0x22); // Particle Packet
|
protocol.registerOutgoing(State.PLAY, 0x2A, 0x22); // Particle Packet
|
||||||
|
@ -53,6 +53,8 @@ public class EntityTracker extends StoredObject {
|
|||||||
private GameMode gameMode;
|
private GameMode gameMode;
|
||||||
@Setter
|
@Setter
|
||||||
private int mainHand;
|
private int mainHand;
|
||||||
|
@Setter
|
||||||
|
private String currentTeam;
|
||||||
|
|
||||||
public EntityTracker(UserConnection user) {
|
public EntityTracker(UserConnection user) {
|
||||||
super(user);
|
super(user);
|
||||||
|
@ -17,7 +17,7 @@ import java.util.UUID;
|
|||||||
public class UpdateUtil {
|
public class UpdateUtil {
|
||||||
|
|
||||||
public final static String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN;
|
public final static String PREFIX = ChatColor.GREEN + "" + ChatColor.BOLD + "[ViaVersion] " + ChatColor.GREEN;
|
||||||
private final static String URL = "http://api.spiget.org/v2/resources/";
|
private final static String URL = "https://api.spiget.org/v2/resources/";
|
||||||
private final static int PLUGIN = 19254;
|
private final static int PLUGIN = 19254;
|
||||||
private final static String LATEST_VERSION = "/versions/latest";
|
private final static String LATEST_VERSION = "/versions/latest";
|
||||||
|
|
||||||
|
753
common/src/main/resources/assets/viaversion/data/blockIds1.12to1.13.json
Normale Datei
753
common/src/main/resources/assets/viaversion/data/blockIds1.12to1.13.json
Normale Datei
@ -0,0 +1,753 @@
|
|||||||
|
// Data from https://minecraft.gamepedia.com/1.13/Flattening
|
||||||
|
{
|
||||||
|
"wooden_slab": [
|
||||||
|
"oak_slab",
|
||||||
|
"spruce_slab",
|
||||||
|
"birch_slab",
|
||||||
|
"jungle_slab",
|
||||||
|
"acacia_slab",
|
||||||
|
"dark_oak_slab"
|
||||||
|
],
|
||||||
|
"red_sandstone": [
|
||||||
|
"red_sandstone",
|
||||||
|
"chiseled_red_sandstone",
|
||||||
|
"cut_red_sandstone"
|
||||||
|
],
|
||||||
|
"lit_pumpkin": [
|
||||||
|
"jack_o_lantern"
|
||||||
|
],
|
||||||
|
"magma": [
|
||||||
|
"magma_block"
|
||||||
|
],
|
||||||
|
"silver_glazed_terracotta": [
|
||||||
|
"light_gray_glazed_terracotta"
|
||||||
|
],
|
||||||
|
"double_stone_slab2": [
|
||||||
|
"red_sandstone_slab",
|
||||||
|
"smooth_red_sandstone"
|
||||||
|
],
|
||||||
|
"standing_sign": [
|
||||||
|
"sign"
|
||||||
|
],
|
||||||
|
"stained_glass_pane": [
|
||||||
|
"white_stained_glass_pane",
|
||||||
|
"orange_stained_glass_pane",
|
||||||
|
"magenta_stained_glass_pane",
|
||||||
|
"light_blue_stained_glass_pane",
|
||||||
|
"yellow_stained_glass_pane",
|
||||||
|
"lime_stained_glass_pane",
|
||||||
|
"pink_stained_glass_pane",
|
||||||
|
"gray_stained_glass_pane",
|
||||||
|
"light_gray_stained_glass_pane",
|
||||||
|
"cyan_stained_glass_pane",
|
||||||
|
"purple_stained_glass_pane",
|
||||||
|
"blue_stained_glass_pane",
|
||||||
|
"brown_stained_glass_pane",
|
||||||
|
"green_stained_glass_pane",
|
||||||
|
"red_stained_glass_pane",
|
||||||
|
"black_stained_glass_pane"
|
||||||
|
],
|
||||||
|
"hardened_clay": [
|
||||||
|
"terracotta"
|
||||||
|
],
|
||||||
|
"portal": [
|
||||||
|
"nether_portal"
|
||||||
|
],
|
||||||
|
"leaves2": [
|
||||||
|
"acacia_leaves",
|
||||||
|
"dark_oak_leaves"
|
||||||
|
],
|
||||||
|
"piston_extension": [
|
||||||
|
"moving_piston"
|
||||||
|
],
|
||||||
|
"concrete_powder": [
|
||||||
|
"white_concrete_powder",
|
||||||
|
"orange_concrete_powder",
|
||||||
|
"magenta_concrete_powder",
|
||||||
|
"light_blue_concrete_powder",
|
||||||
|
"yellow_concrete_powder",
|
||||||
|
"lime_concrete_powder",
|
||||||
|
"pink_concrete_powder",
|
||||||
|
"gray_concrete_powder",
|
||||||
|
"light_gray_concrete_powder",
|
||||||
|
"cyan_concrete_powder",
|
||||||
|
"purple_concrete_powder",
|
||||||
|
"blue_concrete_powder",
|
||||||
|
"brown_concrete_powder",
|
||||||
|
"green_concrete_powder",
|
||||||
|
"red_concrete_powder",
|
||||||
|
"black_concrete_powder"
|
||||||
|
],
|
||||||
|
"powered_repeater": [
|
||||||
|
"repeater"
|
||||||
|
],
|
||||||
|
"record_wait": [
|
||||||
|
"music_disc_wait"
|
||||||
|
],
|
||||||
|
"waterlily": [
|
||||||
|
"lily_pad"
|
||||||
|
],
|
||||||
|
"record_chirp": [
|
||||||
|
"music_disc_chirp"
|
||||||
|
],
|
||||||
|
"nether_brick": [
|
||||||
|
"nether_bricks"
|
||||||
|
],
|
||||||
|
"record_ward": [
|
||||||
|
"music_disc_ward"
|
||||||
|
],
|
||||||
|
"flowing_lava": [
|
||||||
|
"lava"
|
||||||
|
],
|
||||||
|
"trapdoor": [
|
||||||
|
"oak_trapdoor"
|
||||||
|
],
|
||||||
|
"stone_slab2": [
|
||||||
|
"red_sandstone_slab",
|
||||||
|
"smooth_red_sandstone"
|
||||||
|
],
|
||||||
|
"record_cat": [
|
||||||
|
"music_disc_cat"
|
||||||
|
],
|
||||||
|
"mob_spawner": [
|
||||||
|
"spawner"
|
||||||
|
],
|
||||||
|
"sponge": [
|
||||||
|
"sponge",
|
||||||
|
"wet_sponge"
|
||||||
|
],
|
||||||
|
"log": [
|
||||||
|
"oak_log",
|
||||||
|
"spruce_log",
|
||||||
|
"birch_log",
|
||||||
|
"jungle_log",
|
||||||
|
"oak_wood",
|
||||||
|
"spruce_wood",
|
||||||
|
"birch_wood",
|
||||||
|
"jungle_wood"
|
||||||
|
],
|
||||||
|
"anvil": [
|
||||||
|
"anvil",
|
||||||
|
"chipped_anvil",
|
||||||
|
"damaged_anvil"
|
||||||
|
],
|
||||||
|
"daylight_detector": [
|
||||||
|
"daylight_detector"
|
||||||
|
],
|
||||||
|
"cooked_fish": [
|
||||||
|
"cooked_cod",
|
||||||
|
"cooked_salmon"
|
||||||
|
],
|
||||||
|
"lit_redstone_lamp": [
|
||||||
|
"redstone_lamp"
|
||||||
|
],
|
||||||
|
"daylight_detector_inverted": [
|
||||||
|
"daylight_detector"
|
||||||
|
],
|
||||||
|
"deadbush": [
|
||||||
|
"dead_bush"
|
||||||
|
],
|
||||||
|
"fireworks": [
|
||||||
|
"firework_rocket"
|
||||||
|
],
|
||||||
|
"sandstone": [
|
||||||
|
"sandstone",
|
||||||
|
"chiseled_sandstone",
|
||||||
|
"cut_sandstone"
|
||||||
|
],
|
||||||
|
"end_bricks": [
|
||||||
|
"end_stone_bricks"
|
||||||
|
],
|
||||||
|
"slime": [
|
||||||
|
"slime_block"
|
||||||
|
],
|
||||||
|
"web": [
|
||||||
|
"cobweb"
|
||||||
|
],
|
||||||
|
"grass": [
|
||||||
|
"grass_block"
|
||||||
|
],
|
||||||
|
"unpowered_repeater": [
|
||||||
|
"repeater"
|
||||||
|
],
|
||||||
|
"quartz_block": [
|
||||||
|
"quartz_block",
|
||||||
|
"chiseled_quartz_block",
|
||||||
|
"quartz_pillar"
|
||||||
|
],
|
||||||
|
"brick_block": [
|
||||||
|
"bricks"
|
||||||
|
],
|
||||||
|
"netherbrick": [
|
||||||
|
"nether_brick"
|
||||||
|
],
|
||||||
|
"log2": [
|
||||||
|
"acacia_log",
|
||||||
|
"dark_oak_log",
|
||||||
|
"acacia_wood",
|
||||||
|
"dark_oak_wood"
|
||||||
|
],
|
||||||
|
"double_stone_slab": [
|
||||||
|
"stone_slab",
|
||||||
|
"sandstone_slab",
|
||||||
|
"petrified_oak_slab",
|
||||||
|
"cobblestone_slab",
|
||||||
|
"brick_slab",
|
||||||
|
"stone_brick_slab",
|
||||||
|
"nether_brick_slab",
|
||||||
|
"quartz_slab",
|
||||||
|
"smooth_stone",
|
||||||
|
"smooth_sandstone",
|
||||||
|
"smooth_quartz"
|
||||||
|
],
|
||||||
|
"quartz_ore": [
|
||||||
|
"nether_quartz_ore"
|
||||||
|
],
|
||||||
|
"golden_apple": [
|
||||||
|
"golden_apple",
|
||||||
|
"enchanted_golden_apple"
|
||||||
|
],
|
||||||
|
"pumpkin_stem": [
|
||||||
|
"pumpkin_stem",
|
||||||
|
"attached_pumpkin_stem"
|
||||||
|
],
|
||||||
|
"stained_glass": [
|
||||||
|
"white_stained_glass",
|
||||||
|
"orange_stained_glass",
|
||||||
|
"magenta_stained_glass",
|
||||||
|
"light_blue_stained_glass",
|
||||||
|
"yellow_stained_glass",
|
||||||
|
"lime_stained_glass",
|
||||||
|
"pink_stained_glass",
|
||||||
|
"gray_stained_glass",
|
||||||
|
"light_gray_stained_glass",
|
||||||
|
"cyan_stained_glass",
|
||||||
|
"purple_stained_glass",
|
||||||
|
"blue_stained_glass",
|
||||||
|
"brown_stained_glass",
|
||||||
|
"green_stained_glass",
|
||||||
|
"red_stained_glass",
|
||||||
|
"black_stained_glass"
|
||||||
|
],
|
||||||
|
"double_wooden_slab": [
|
||||||
|
"oak_slab",
|
||||||
|
"spruce_slab",
|
||||||
|
"birch_slab",
|
||||||
|
"jungle_slab",
|
||||||
|
"acacia_slab",
|
||||||
|
"dark_oak_slab"
|
||||||
|
],
|
||||||
|
"torch": [
|
||||||
|
"wall_torch",
|
||||||
|
"torch"
|
||||||
|
],
|
||||||
|
"cobblestone_wall": [
|
||||||
|
"cobblestone_wall",
|
||||||
|
"mossy_cobblestone_wall"
|
||||||
|
],
|
||||||
|
"boat": [
|
||||||
|
"oak_boat"
|
||||||
|
],
|
||||||
|
"planks": [
|
||||||
|
"oak_planks",
|
||||||
|
"spruce_planks",
|
||||||
|
"birch_planks",
|
||||||
|
"jungle_planks",
|
||||||
|
"acacia_planks",
|
||||||
|
"dark_oak_planks"
|
||||||
|
],
|
||||||
|
"comparator": [
|
||||||
|
"comparator"
|
||||||
|
],
|
||||||
|
"dye": [
|
||||||
|
"bone_meal",
|
||||||
|
"orange_dye",
|
||||||
|
"magenta_dye",
|
||||||
|
"light_blue_dye",
|
||||||
|
"dandelion_yellow",
|
||||||
|
"lime_dye",
|
||||||
|
"pink_dye",
|
||||||
|
"gray_dye",
|
||||||
|
"light_gray_dye",
|
||||||
|
"cyan_dye",
|
||||||
|
"purple_dye",
|
||||||
|
"lapis_lazuli",
|
||||||
|
"cocoa_beans",
|
||||||
|
"cactus_green",
|
||||||
|
"rose_red",
|
||||||
|
"ink_sac"
|
||||||
|
],
|
||||||
|
"speckled_melon": [
|
||||||
|
"glistering_melon_slice"
|
||||||
|
],
|
||||||
|
"red_mushroom_block": [
|
||||||
|
"brown_mushroom_block",
|
||||||
|
"mushroom_stem",
|
||||||
|
"red_mushroom_block"
|
||||||
|
],
|
||||||
|
"firework_charge": [
|
||||||
|
"firework_star"
|
||||||
|
],
|
||||||
|
"fish": [
|
||||||
|
"cod",
|
||||||
|
"salmon",
|
||||||
|
"tropical_fish",
|
||||||
|
"pufferfish"
|
||||||
|
],
|
||||||
|
"wall_banner": [
|
||||||
|
"white_wall_banner",
|
||||||
|
"orange_wall_banner",
|
||||||
|
"magenta_wall_banner",
|
||||||
|
"light_blue_wall_banner",
|
||||||
|
"yellow_wall_banner",
|
||||||
|
"lime_wall_banner",
|
||||||
|
"pink_wall_banner",
|
||||||
|
"gray_wall_banner",
|
||||||
|
"light_gray_wall_banner",
|
||||||
|
"cyan_wall_banner",
|
||||||
|
"purple_wall_banner",
|
||||||
|
"blue_wall_banner",
|
||||||
|
"brown_wall_banner",
|
||||||
|
"green_wall_banner",
|
||||||
|
"red_wall_banner",
|
||||||
|
"black_wall_banner"
|
||||||
|
],
|
||||||
|
"record_mellohi": [
|
||||||
|
"music_disc_mellohi"
|
||||||
|
],
|
||||||
|
"melon_block": [
|
||||||
|
"melon"
|
||||||
|
],
|
||||||
|
"stonebrick": [
|
||||||
|
"stone_bricks",
|
||||||
|
"mossy_stone_bricks",
|
||||||
|
"cracked_stone_bricks",
|
||||||
|
"chiseled_stone_bricks"
|
||||||
|
],
|
||||||
|
"repeater": [
|
||||||
|
"repeater"
|
||||||
|
],
|
||||||
|
"silver_shulker_box": [
|
||||||
|
"light_gray_shulker_box"
|
||||||
|
],
|
||||||
|
"bed": [
|
||||||
|
"white_bed",
|
||||||
|
"orange_bed",
|
||||||
|
"magenta_bed",
|
||||||
|
"light_blue_bed",
|
||||||
|
"yellow_bed",
|
||||||
|
"lime_bed",
|
||||||
|
"pink_bed",
|
||||||
|
"gray_bed",
|
||||||
|
"light_gray_bed",
|
||||||
|
"cyan_bed",
|
||||||
|
"purple_bed",
|
||||||
|
"blue_bed",
|
||||||
|
"brown_bed",
|
||||||
|
"green_bed",
|
||||||
|
"red_bed",
|
||||||
|
"black_bed"
|
||||||
|
],
|
||||||
|
"prismarine": [
|
||||||
|
"prismarine",
|
||||||
|
"prismarine_bricks",
|
||||||
|
"dark_prismarine"
|
||||||
|
],
|
||||||
|
"wool": [
|
||||||
|
"white_wool",
|
||||||
|
"orange_wool",
|
||||||
|
"magenta_wool",
|
||||||
|
"light_blue_wool",
|
||||||
|
"yellow_wool",
|
||||||
|
"lime_wool",
|
||||||
|
"pink_wool",
|
||||||
|
"gray_wool",
|
||||||
|
"light_gray_wool",
|
||||||
|
"cyan_wool",
|
||||||
|
"purple_wool",
|
||||||
|
"blue_wool",
|
||||||
|
"brown_wool",
|
||||||
|
"green_wool",
|
||||||
|
"red_wool",
|
||||||
|
"black_wool"
|
||||||
|
],
|
||||||
|
"double_purpur_slab": [
|
||||||
|
"purpur_slab"
|
||||||
|
],
|
||||||
|
"furnace": [
|
||||||
|
"furnace"
|
||||||
|
],
|
||||||
|
"redstone_ore": [
|
||||||
|
"redstone_ore"
|
||||||
|
],
|
||||||
|
"red_flower": [
|
||||||
|
"poppy",
|
||||||
|
"blue_orchid",
|
||||||
|
"allium",
|
||||||
|
"azure_bluet",
|
||||||
|
"red_tulip",
|
||||||
|
"orange_tulip",
|
||||||
|
"white_tulip",
|
||||||
|
"pink_tulip",
|
||||||
|
"oxeye_daisy"
|
||||||
|
],
|
||||||
|
"lit_redstone_ore": [
|
||||||
|
"redstone_ore"
|
||||||
|
],
|
||||||
|
"tallgrass": [
|
||||||
|
"dead_bush",
|
||||||
|
"grass",
|
||||||
|
"fern"
|
||||||
|
],
|
||||||
|
"sign": [
|
||||||
|
"sign"
|
||||||
|
],
|
||||||
|
"spawn_egg": [
|
||||||
|
"bat_spawn_egg",
|
||||||
|
"blaze_spawn_egg",
|
||||||
|
"cave_spider_spawn_egg",
|
||||||
|
"chicken_spawn_egg",
|
||||||
|
"cow_spawn_egg",
|
||||||
|
"creeper_spawn_egg",
|
||||||
|
"donkey_spawn_egg",
|
||||||
|
"elder_guardian_spawn_egg",
|
||||||
|
"enderman_spawn_egg",
|
||||||
|
"endermite_spawn_egg",
|
||||||
|
"evoker_spawn_egg",
|
||||||
|
"ghast_spawn_egg",
|
||||||
|
"guardian_spawn_egg",
|
||||||
|
"horse_spawn_egg",
|
||||||
|
"husk_spawn_egg",
|
||||||
|
"llama_spawn_egg",
|
||||||
|
"magma_cube_spawn_egg",
|
||||||
|
"mooshroom_spawn_egg",
|
||||||
|
"mule_spawn_egg",
|
||||||
|
"ocelot_spawn_egg",
|
||||||
|
"parrot_spawn_egg",
|
||||||
|
"pig_spawn_egg",
|
||||||
|
"polar_bear_spawn_egg",
|
||||||
|
"rabbit_spawn_egg",
|
||||||
|
"sheep_spawn_egg",
|
||||||
|
"shulker_spawn_egg",
|
||||||
|
"silverfish_spawn_egg",
|
||||||
|
"skeleton_spawn_egg",
|
||||||
|
"skeleton_horse_spawn_egg",
|
||||||
|
"slime_spawn_egg",
|
||||||
|
"spider_spawn_egg",
|
||||||
|
"squid_spawn_egg",
|
||||||
|
"stray_spawn_egg",
|
||||||
|
"vex_spawn_egg",
|
||||||
|
"villager_spawn_egg",
|
||||||
|
"vindicator_spawn_egg",
|
||||||
|
"witch_spawn_egg",
|
||||||
|
"wither_skeleton_spawn_egg",
|
||||||
|
"wolf_spawn_egg",
|
||||||
|
"zombie_spawn_egg",
|
||||||
|
"zombie_horse_spawn_egg",
|
||||||
|
"zombie_pigman_spawn_egg",
|
||||||
|
"zombie_villager_spawn_egg"
|
||||||
|
],
|
||||||
|
"wooden_door": [
|
||||||
|
"oak_door"
|
||||||
|
],
|
||||||
|
"stone_slab": [
|
||||||
|
"stone_slab",
|
||||||
|
"sandstone_slab",
|
||||||
|
"petrified_oak_slab",
|
||||||
|
"cobblestone_slab",
|
||||||
|
"brick_slab",
|
||||||
|
"stone_brick_slab",
|
||||||
|
"nether_brick_slab",
|
||||||
|
"quartz_slab",
|
||||||
|
"smooth_stone",
|
||||||
|
"smooth_sandstone",
|
||||||
|
"smooth_quartz"
|
||||||
|
],
|
||||||
|
"unpowered_comparator": [
|
||||||
|
"comparator"
|
||||||
|
],
|
||||||
|
"leaves": [
|
||||||
|
"oak_leaves",
|
||||||
|
"spruce_leaves",
|
||||||
|
"birch_leaves",
|
||||||
|
"jungle_leaves"
|
||||||
|
],
|
||||||
|
"noteblock": [
|
||||||
|
"note_block"
|
||||||
|
],
|
||||||
|
"sapling": [
|
||||||
|
"oak_sapling",
|
||||||
|
"spruce_sapling",
|
||||||
|
"birch_sapling",
|
||||||
|
"jungle_sapling",
|
||||||
|
"acacia_sapling",
|
||||||
|
"dark_oak_sapling"
|
||||||
|
],
|
||||||
|
"melon": [
|
||||||
|
"melon_slice"
|
||||||
|
],
|
||||||
|
"wooden_button": [
|
||||||
|
"oak_button"
|
||||||
|
],
|
||||||
|
"golden_rail": [
|
||||||
|
"powered_rail"
|
||||||
|
],
|
||||||
|
"redstone_torch": [
|
||||||
|
"redstone_wall_torch",
|
||||||
|
"redstone_torch"
|
||||||
|
],
|
||||||
|
"stone_stairs": [
|
||||||
|
"cobblestone_stairs"
|
||||||
|
],
|
||||||
|
"dirt": [
|
||||||
|
"dirt",
|
||||||
|
"coarse_dirt",
|
||||||
|
"podzol"
|
||||||
|
],
|
||||||
|
"wooden_pressure_plate": [
|
||||||
|
"oak_pressure_plate"
|
||||||
|
],
|
||||||
|
"powered_comparator": [
|
||||||
|
"comparator"
|
||||||
|
],
|
||||||
|
"water": [
|
||||||
|
"water"
|
||||||
|
],
|
||||||
|
"sand": [
|
||||||
|
"sand",
|
||||||
|
"red_sand"
|
||||||
|
],
|
||||||
|
"flowing_water": [
|
||||||
|
"water"
|
||||||
|
],
|
||||||
|
"snow": [
|
||||||
|
"snow_block"
|
||||||
|
],
|
||||||
|
"carpet": [
|
||||||
|
"white_carpet",
|
||||||
|
"orange_carpet",
|
||||||
|
"magenta_carpet",
|
||||||
|
"light_blue_carpet",
|
||||||
|
"yellow_carpet",
|
||||||
|
"lime_carpet",
|
||||||
|
"pink_carpet",
|
||||||
|
"gray_carpet",
|
||||||
|
"light_gray_carpet",
|
||||||
|
"cyan_carpet",
|
||||||
|
"purple_carpet",
|
||||||
|
"blue_carpet",
|
||||||
|
"brown_carpet",
|
||||||
|
"green_carpet",
|
||||||
|
"red_carpet",
|
||||||
|
"black_carpet"
|
||||||
|
],
|
||||||
|
"lit_furnace": [
|
||||||
|
"furnace"
|
||||||
|
],
|
||||||
|
"coal": [
|
||||||
|
"coal",
|
||||||
|
"charcoal"
|
||||||
|
],
|
||||||
|
"concrete": [
|
||||||
|
"white_concrete",
|
||||||
|
"orange_concrete",
|
||||||
|
"magenta_concrete",
|
||||||
|
"light_blue_concrete",
|
||||||
|
"yellow_concrete",
|
||||||
|
"lime_concrete",
|
||||||
|
"pink_concrete",
|
||||||
|
"gray_concrete",
|
||||||
|
"light_gray_concrete",
|
||||||
|
"cyan_concrete",
|
||||||
|
"purple_concrete",
|
||||||
|
"blue_concrete",
|
||||||
|
"brown_concrete",
|
||||||
|
"green_concrete",
|
||||||
|
"red_concrete",
|
||||||
|
"black_concrete"
|
||||||
|
],
|
||||||
|
"record_mall": [
|
||||||
|
"music_disc_mall"
|
||||||
|
],
|
||||||
|
"monster_egg": [
|
||||||
|
"infested_stone",
|
||||||
|
"infested_cobblestone",
|
||||||
|
"infested_stone_bricks",
|
||||||
|
"infested_mossy_stone_bricks",
|
||||||
|
"infested_cracked_stone_bricks",
|
||||||
|
"infested_chiseled_stone_bricks"
|
||||||
|
],
|
||||||
|
"fence_gate": [
|
||||||
|
"oak_fence_gate"
|
||||||
|
],
|
||||||
|
"standing_banner": [
|
||||||
|
"white_banner",
|
||||||
|
"orange_banner",
|
||||||
|
"magenta_banner",
|
||||||
|
"light_blue_banner",
|
||||||
|
"yellow_banner",
|
||||||
|
"lime_banner",
|
||||||
|
"pink_banner",
|
||||||
|
"gray_banner",
|
||||||
|
"light_gray_banner",
|
||||||
|
"cyan_banner",
|
||||||
|
"purple_banner",
|
||||||
|
"blue_banner",
|
||||||
|
"brown_banner",
|
||||||
|
"green_banner",
|
||||||
|
"red_banner",
|
||||||
|
"black_banner"
|
||||||
|
],
|
||||||
|
"record_blocks": [
|
||||||
|
"music_disc_blocks"
|
||||||
|
],
|
||||||
|
"unlit_redstone_torch": [
|
||||||
|
"redstone_wall_torch",
|
||||||
|
"redstone_torch"
|
||||||
|
],
|
||||||
|
"lava": [
|
||||||
|
"lava"
|
||||||
|
],
|
||||||
|
"reeds": [
|
||||||
|
"sugar_cane"
|
||||||
|
],
|
||||||
|
"chorus_fruit_popped": [
|
||||||
|
"popped_chorus_fruit"
|
||||||
|
],
|
||||||
|
"redstone_lamp": [
|
||||||
|
"redstone_lamp"
|
||||||
|
],
|
||||||
|
"skull": [
|
||||||
|
"skeleton_skull",
|
||||||
|
"skeleton_wall_skull",
|
||||||
|
"wither_skeleton_skull",
|
||||||
|
"wither_skeleton_wall_skull",
|
||||||
|
"zombie_head",
|
||||||
|
"zombie_wall_head",
|
||||||
|
"player_head",
|
||||||
|
"player_wall_head",
|
||||||
|
"creeper_head",
|
||||||
|
"creeper_wall_head",
|
||||||
|
"dragon_head",
|
||||||
|
"dragon_wall_head"
|
||||||
|
],
|
||||||
|
"snow_layer": [
|
||||||
|
"snow"
|
||||||
|
],
|
||||||
|
"stained_hardened_clay": [
|
||||||
|
"white_terracotta",
|
||||||
|
"orange_terracotta",
|
||||||
|
"magenta_terracotta",
|
||||||
|
"light_blue_terracotta",
|
||||||
|
"yellow_terracotta",
|
||||||
|
"lime_terracotta",
|
||||||
|
"pink_terracotta",
|
||||||
|
"gray_terracotta",
|
||||||
|
"light_gray_terracotta",
|
||||||
|
"cyan_terracotta",
|
||||||
|
"purple_terracotta",
|
||||||
|
"blue_terracotta",
|
||||||
|
"brown_terracotta",
|
||||||
|
"green_terracotta",
|
||||||
|
"red_terracotta",
|
||||||
|
"black_terracotta"
|
||||||
|
],
|
||||||
|
"double_plant": [
|
||||||
|
"sunflower",
|
||||||
|
"lilac",
|
||||||
|
"tall_grass",
|
||||||
|
"large_fern",
|
||||||
|
"rose_bush",
|
||||||
|
"peony"
|
||||||
|
],
|
||||||
|
"record_strad": [
|
||||||
|
"music_disc_strad"
|
||||||
|
],
|
||||||
|
"brown_mushroom_block": [
|
||||||
|
"brown_mushroom_block",
|
||||||
|
"mushroom_stem",
|
||||||
|
"red_mushroom_block"
|
||||||
|
],
|
||||||
|
"flower_pot": [
|
||||||
|
"flower_pot",
|
||||||
|
"potted_poppy",
|
||||||
|
"potted_dandelion",
|
||||||
|
"potted_oak_sapling",
|
||||||
|
"potted_spruce_sapling",
|
||||||
|
"potted_birch_sapling",
|
||||||
|
"potted_jungle_sapling",
|
||||||
|
"potted_red_mushroom",
|
||||||
|
"potted_brown_mushroom",
|
||||||
|
"potted_cactus",
|
||||||
|
"potted_dead_bush",
|
||||||
|
"potted_fern",
|
||||||
|
"potted_acacia_sapling",
|
||||||
|
"potted_dark_oak_sapling",
|
||||||
|
"potted_blue_orchid",
|
||||||
|
"potted_allium",
|
||||||
|
"potted_azure_bluet",
|
||||||
|
"potted_red_tulip",
|
||||||
|
"potted_orange_tulip",
|
||||||
|
"potted_white_tulip",
|
||||||
|
"potted_pink_tulip",
|
||||||
|
"potted_oxeye_daisy"
|
||||||
|
],
|
||||||
|
"melon_stem": [
|
||||||
|
"melon_stem",
|
||||||
|
"attached_melon_stem"
|
||||||
|
],
|
||||||
|
"record_13": [
|
||||||
|
"music_disc_13"
|
||||||
|
],
|
||||||
|
"banner": [
|
||||||
|
"white_banner",
|
||||||
|
"orange_banner",
|
||||||
|
"magenta_banner",
|
||||||
|
"light_blue_banner",
|
||||||
|
"yellow_banner",
|
||||||
|
"lime_banner",
|
||||||
|
"pink_banner",
|
||||||
|
"gray_banner",
|
||||||
|
"light_gray_banner",
|
||||||
|
"cyan_banner",
|
||||||
|
"purple_banner",
|
||||||
|
"blue_banner",
|
||||||
|
"brown_banner",
|
||||||
|
"green_banner",
|
||||||
|
"red_banner",
|
||||||
|
"black_banner"
|
||||||
|
],
|
||||||
|
"stone": [
|
||||||
|
"stone",
|
||||||
|
"granite",
|
||||||
|
"polished_granite",
|
||||||
|
"diorite",
|
||||||
|
"polished_diorite",
|
||||||
|
"andesite",
|
||||||
|
"polished_andesite"
|
||||||
|
],
|
||||||
|
"yellow_flower": [
|
||||||
|
"dandelion"
|
||||||
|
],
|
||||||
|
"record_11": [
|
||||||
|
"music_disc_11"
|
||||||
|
],
|
||||||
|
"purpur_slab": [
|
||||||
|
"purpur_slab"
|
||||||
|
],
|
||||||
|
"red_nether_brick": [
|
||||||
|
"red_nether_bricks"
|
||||||
|
],
|
||||||
|
"record_far": [
|
||||||
|
"music_disc_far"
|
||||||
|
],
|
||||||
|
"record_stal": [
|
||||||
|
"music_disc_stal"
|
||||||
|
],
|
||||||
|
"fence": [
|
||||||
|
"oak_fence"
|
||||||
|
],
|
||||||
|
"pumpkin": [
|
||||||
|
"carved_pumpkin"
|
||||||
|
]
|
||||||
|
}
|
22265
common/src/main/resources/assets/viaversion/data/itemrecipes1_12_2to1_13.json
Normale Datei
22265
common/src/main/resources/assets/viaversion/data/itemrecipes1_12_2to1_13.json
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -54,7 +54,7 @@
|
|||||||
<shadedPattern>us.myles.viaversion.libs.gson</shadedPattern>
|
<shadedPattern>us.myles.viaversion.libs.gson</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>org.javassist</pattern>
|
<pattern>javassist</pattern>
|
||||||
<shadedPattern>us.myles.viaversion.libs.javassist</shadedPattern>
|
<shadedPattern>us.myles.viaversion.libs.javassist</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
package us.myles.ViaVersion.velocity.platform;
|
package us.myles.ViaVersion.velocity.platform;
|
||||||
|
|
||||||
|
import com.velocitypowered.api.network.ProtocolVersion;
|
||||||
|
import com.velocitypowered.api.proxy.InboundConnection;
|
||||||
import com.velocitypowered.api.proxy.Player;
|
import com.velocitypowered.api.proxy.Player;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
import us.myles.ViaVersion.VelocityPlugin;
|
||||||
import us.myles.ViaVersion.api.Via;
|
import us.myles.ViaVersion.api.Via;
|
||||||
import us.myles.ViaVersion.api.ViaAPI;
|
import us.myles.ViaVersion.api.ViaAPI;
|
||||||
import us.myles.ViaVersion.api.boss.BossBar;
|
import us.myles.ViaVersion.api.boss.BossBar;
|
||||||
@ -21,14 +24,18 @@ public class VelocityViaAPI implements ViaAPI<Player> {
|
|||||||
@Override
|
@Override
|
||||||
public int getPlayerVersion(@NonNull Player player) {
|
public int getPlayerVersion(@NonNull Player player) {
|
||||||
if (!isPorted(player.getUniqueId()))
|
if (!isPorted(player.getUniqueId()))
|
||||||
return ProtocolRegistry.SERVER_PROTOCOL;
|
return player.getProtocolVersion().getProtocol();
|
||||||
return getPortedPlayers().get(player.getUniqueId()).get(ProtocolInfo.class).getProtocolVersion();
|
return getPortedPlayers().get(player.getUniqueId()).get(ProtocolInfo.class).getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPlayerVersion(@NonNull UUID uuid) {
|
public int getPlayerVersion(@NonNull UUID uuid) {
|
||||||
if (!isPorted(uuid))
|
if (!isPorted(uuid)) {
|
||||||
return ProtocolRegistry.SERVER_PROTOCOL;
|
return VelocityPlugin.PROXY.getPlayer(uuid)
|
||||||
|
.map(InboundConnection::getProtocolVersion)
|
||||||
|
.map(ProtocolVersion::getProtocol)
|
||||||
|
.orElse(ProtocolRegistry.SERVER_PROTOCOL);
|
||||||
|
}
|
||||||
return getPortedPlayers().get(uuid).get(ProtocolInfo.class).getProtocolVersion();
|
return getPortedPlayers().get(uuid).get(ProtocolInfo.class).getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ import java.net.URL;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class VelocityViaConfig extends Config implements ViaVersionConfig {
|
public class VelocityViaConfig extends Config implements ViaVersionConfig {
|
||||||
private static List<String> UNSUPPORTED = Arrays.asList("nms-player-ticking", "item-cache", "anti-xray-patch", "quick-move-action-fix", "bungee-ping-interval", "bungee-ping-save", "bungee-servers");
|
private static List<String> UNSUPPORTED = Arrays.asList("nms-player-ticking", "item-cache", "anti-xray-patch", "quick-move-action-fix", "bungee-ping-interval", "bungee-ping-save", "bungee-servers", "blockconnection-method");
|
||||||
|
|
||||||
public VelocityViaConfig(File configFile) {
|
public VelocityViaConfig(File configFile) {
|
||||||
super(new File(configFile, "config.yml"));
|
super(new File(configFile, "config.yml"));
|
||||||
|
@ -8,27 +8,24 @@ import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
|||||||
import us.myles.ViaVersion.protocols.base.VersionProvider;
|
import us.myles.ViaVersion.protocols.base.VersionProvider;
|
||||||
import us.myles.ViaVersion.velocity.platform.VelocityViaInjector;
|
import us.myles.ViaVersion.velocity.platform.VelocityViaInjector;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
import java.util.stream.Collectors;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class VelocityVersionProvider extends VersionProvider {
|
public class VelocityVersionProvider extends VersionProvider {
|
||||||
|
private static final List<Integer> VELOCITY_PROTOCOLS = com.velocitypowered.api.network.ProtocolVersion.SUPPORTED_VERSIONS.stream()
|
||||||
|
.map(com.velocitypowered.api.network.ProtocolVersion::getProtocol)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getServerProtocol(UserConnection user) throws Exception {
|
public int getServerProtocol(UserConnection user) throws Exception {
|
||||||
// TODO Have one constant list forever until restart? (Might limit plugins if they change this)
|
|
||||||
List<Integer> sorted = new ArrayList<>(com.velocitypowered.api.network.ProtocolVersion.ID_TO_PROTOCOL_CONSTANT.keySet());
|
|
||||||
sorted.remove(Integer.valueOf(-1)); // Unknown/legacy
|
|
||||||
Collections.sort(sorted);
|
|
||||||
|
|
||||||
int playerVersion = user.get(ProtocolInfo.class).getProtocolVersion();
|
int playerVersion = user.get(ProtocolInfo.class).getProtocolVersion();
|
||||||
|
|
||||||
// Bungee supports it
|
// Bungee supports it
|
||||||
if (sorted.contains(playerVersion))
|
if (Collections.binarySearch(VELOCITY_PROTOCOLS, playerVersion) >= 0)
|
||||||
return playerVersion;
|
return playerVersion;
|
||||||
|
|
||||||
// Older than bungee supports, get the lowest version
|
// Older than bungee supports, get the lowest version
|
||||||
if (playerVersion < sorted.get(0)) {
|
if (playerVersion < VELOCITY_PROTOCOLS.get(0)) {
|
||||||
return VelocityViaInjector.getLowestSupportedProtocolVersion();
|
return VelocityViaInjector.getLowestSupportedProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +33,7 @@ public class VelocityVersionProvider extends VersionProvider {
|
|||||||
|
|
||||||
// TODO: This needs a better fix, i.e checking ProtocolRegistry to see if it would work.
|
// TODO: This needs a better fix, i.e checking ProtocolRegistry to see if it would work.
|
||||||
// This is more of a workaround for snapshot support by bungee.
|
// This is more of a workaround for snapshot support by bungee.
|
||||||
for (Integer protocol : Lists.reverse(sorted)) {
|
for (Integer protocol : Lists.reverse(VELOCITY_PROTOCOLS)) {
|
||||||
if (playerVersion > protocol && ProtocolVersion.isRegistered(protocol))
|
if (playerVersion > protocol && ProtocolVersion.isRegistered(protocol))
|
||||||
return protocol;
|
return protocol;
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren