Mirror von
https://github.com/ViaVersion/ViaBackwards.git
synchronisiert 2024-07-27 17:38:04 +02:00
Fix 1.11 enchant remapping, arrow velocity and bed handling (#159)
* Arrow velocity and entity meta error fix * Fix 1.11 enchant remapping, some minor cleanup
Dieser Commit ist enthalten in:
Ursprung
b21fce2506
Commit
0da10a2864
|
@ -31,8 +31,16 @@ import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public abstract class BlockItemRewriter<T extends BackwardsProtocol> extends Rewriter<T> {
|
public abstract class BlockItemRewriter<T extends BackwardsProtocol> extends Rewriter<T> {
|
||||||
|
|
||||||
private static final CompoundTagConverter converter = new CompoundTagConverter();
|
private static final CompoundTagConverter converter = new CompoundTagConverter();
|
||||||
private final Map<Integer, BlockItemSettings> replacementData = new ConcurrentHashMap<>();
|
private final Map<Integer, BlockItemSettings> replacementData = new ConcurrentHashMap<>();
|
||||||
|
protected String nbtTagName;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void register(T protocol) {
|
||||||
|
nbtTagName = "ViaBackwards|" + protocol.getClass().getSimpleName();
|
||||||
|
super.register(protocol);
|
||||||
|
}
|
||||||
|
|
||||||
protected BlockItemSettings rewrite(int itemId) {
|
protected BlockItemSettings rewrite(int itemId) {
|
||||||
BlockItemSettings settings = new BlockItemSettings(itemId);
|
BlockItemSettings settings = new BlockItemSettings(itemId);
|
||||||
|
@ -80,7 +88,7 @@ public abstract class BlockItemRewriter<T extends BackwardsProtocol> extends Rew
|
||||||
i.setData(original.getData());
|
i.setData(original.getData());
|
||||||
}
|
}
|
||||||
if (data.hasItemTagHandler()) {
|
if (data.hasItemTagHandler()) {
|
||||||
if (!i.getTag().contains("ViaBackwards|" + getProtocolName()))
|
if (!i.getTag().contains(nbtTagName))
|
||||||
i.getTag().put(createViaNBT(original));
|
i.getTag().put(createViaNBT(original));
|
||||||
data.getItemHandler().handle(i);
|
data.getItemHandler().handle(i);
|
||||||
}
|
}
|
||||||
|
@ -93,20 +101,20 @@ public abstract class BlockItemRewriter<T extends BackwardsProtocol> extends Rew
|
||||||
if (item.getTag() == null) return item;
|
if (item.getTag() == null) return item;
|
||||||
|
|
||||||
CompoundTag tag = item.getTag();
|
CompoundTag tag = item.getTag();
|
||||||
if (tag.contains("ViaBackwards|" + getProtocolName())) {
|
if (tag.contains(nbtTagName)) {
|
||||||
CompoundTag via = tag.get("ViaBackwards|" + getProtocolName());
|
CompoundTag via = tag.get(nbtTagName);
|
||||||
|
|
||||||
short id = (short) via.get("id").getValue();
|
short id = (short) via.get("id").getValue();
|
||||||
short data = (short) via.get("data").getValue();
|
short data = (short) via.get("data").getValue();
|
||||||
byte amount = (byte) via.get("amount").getValue();
|
byte amount = (byte) via.get("amount").getValue();
|
||||||
CompoundTag extras = via.get("extras");
|
CompoundTag extras = via.get("extras");
|
||||||
|
|
||||||
item.setId(id);
|
item.setIdentifier(id);
|
||||||
item.setData(data);
|
item.setData(data);
|
||||||
item.setAmount(amount);
|
item.setAmount(amount);
|
||||||
item.setTag(converter.convert("", converter.convert(extras)));
|
item.setTag(converter.convert("", converter.convert(extras)));
|
||||||
// Remove data tag
|
// Remove data tag
|
||||||
tag.remove("ViaBackwards|" + getProtocolName());
|
tag.remove(nbtTagName);
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
@ -205,19 +213,22 @@ public abstract class BlockItemRewriter<T extends BackwardsProtocol> extends Rew
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean containsBlock(int block) {
|
protected boolean containsBlock(int block) {
|
||||||
return replacementData.containsKey(block) && replacementData.get(block).hasRepBlock();
|
final BlockItemSettings settings = replacementData.get(block);
|
||||||
|
return settings != null && settings.hasRepBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean hasBlockEntityHandler(int block) {
|
protected boolean hasBlockEntityHandler(int block) {
|
||||||
return replacementData.containsKey(block) && replacementData.get(block).hasEntityHandler();
|
final BlockItemSettings settings = replacementData.get(block);
|
||||||
|
return settings != null && settings.hasEntityHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean hasItemTagHandler(int block) {
|
protected boolean hasItemTagHandler(int block) {
|
||||||
return replacementData.containsKey(block) && replacementData.get(block).hasItemTagHandler();
|
final BlockItemSettings settings = replacementData.get(block);
|
||||||
|
return settings != null && settings.hasItemTagHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
private CompoundTag createViaNBT(Item i) {
|
private CompoundTag createViaNBT(Item i) {
|
||||||
CompoundTag tag = new CompoundTag("ViaBackwards|" + getProtocolName());
|
CompoundTag tag = new CompoundTag(nbtTagName);
|
||||||
tag.put(new ShortTag("id", i.getId()));
|
tag.put(new ShortTag("id", i.getId()));
|
||||||
tag.put(new ShortTag("data", i.getData()));
|
tag.put(new ShortTag("data", i.getData()));
|
||||||
tag.put(new ByteTag("amount", i.getAmount()));
|
tag.put(new ByteTag("amount", i.getAmount()));
|
||||||
|
@ -243,7 +254,8 @@ public abstract class BlockItemRewriter<T extends BackwardsProtocol> extends Rew
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@ToString
|
@ToString
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
private class Pos {
|
private static class Pos {
|
||||||
|
|
||||||
private int x, y, z;
|
private int x, y, z;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
package nl.matsv.viabackwards.api.rewriters;
|
||||||
|
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class EnchantmentRewriter {
|
||||||
|
|
||||||
|
private final Map<String, String> enchantmentMappings = new HashMap<>();
|
||||||
|
private final String nbtTagName;
|
||||||
|
|
||||||
|
public EnchantmentRewriter(final String nbtTagName) {
|
||||||
|
this.nbtTagName = nbtTagName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerEnchantment(String key, String replacementLore) {
|
||||||
|
enchantmentMappings.put(key, replacementLore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rewriteEnchantmentsToClient(CompoundTag tag, boolean storedEnchant) {
|
||||||
|
String key = storedEnchant ? "StoredEnchantments" : "Enchantments";
|
||||||
|
ListTag enchantments = tag.get(key);
|
||||||
|
ListTag remappedEnchantments = new ListTag(nbtTagName + "|" + key, CompoundTag.class);
|
||||||
|
List<Tag> lore = new ArrayList<>();
|
||||||
|
for (Tag enchantmentEntry : enchantments.clone()) {
|
||||||
|
String newId = (String) ((CompoundTag) enchantmentEntry).get("id").getValue();
|
||||||
|
String enchantmentName = enchantmentMappings.get(newId);
|
||||||
|
if (enchantmentName != null) {
|
||||||
|
enchantments.remove(enchantmentEntry);
|
||||||
|
Number level = (Number) ((CompoundTag) enchantmentEntry).get("lvl").getValue();
|
||||||
|
lore.add(new StringTag("", enchantmentName + " " + getRomanNumber(level.shortValue())));
|
||||||
|
remappedEnchantments.add(enchantmentEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!lore.isEmpty()) {
|
||||||
|
if (!storedEnchant && enchantments.size() == 0) {
|
||||||
|
CompoundTag dummyEnchantment = new CompoundTag("");
|
||||||
|
dummyEnchantment.put(new StringTag("id", ""));
|
||||||
|
dummyEnchantment.put(new ShortTag("lvl", (short) 0));
|
||||||
|
enchantments.add(dummyEnchantment);
|
||||||
|
|
||||||
|
tag.put(new ByteTag(nbtTagName + "|dummyEnchant"));
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.put(remappedEnchantments);
|
||||||
|
|
||||||
|
CompoundTag display = tag.get("display");
|
||||||
|
if (display == null) {
|
||||||
|
tag.put(display = new CompoundTag("display"));
|
||||||
|
}
|
||||||
|
ListTag loreTag = display.get("Lore");
|
||||||
|
if (loreTag == null) {
|
||||||
|
display.put(loreTag = new ListTag("Lore", StringTag.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
lore.addAll(loreTag.getValue());
|
||||||
|
loreTag.setValue(lore);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rewriteEnchantmentsToServer(CompoundTag tag, boolean storedEnchant) {
|
||||||
|
String key = storedEnchant ? "StoredEnchantments" : "Enchantments";
|
||||||
|
ListTag remappedEnchantments = tag.get(nbtTagName + "|" + key);
|
||||||
|
ListTag enchantments = tag.contains(key) ? tag.get(key) : new ListTag(key, CompoundTag.class);
|
||||||
|
if (!storedEnchant && tag.contains(nbtTagName + "|dummyEnchant")) {
|
||||||
|
tag.remove(nbtTagName + "|dummyEnchant");
|
||||||
|
|
||||||
|
for (Tag enchantment : enchantments.clone()) {
|
||||||
|
String id = (String) ((CompoundTag) enchantment).get("id").getValue();
|
||||||
|
if (id.isEmpty()) {
|
||||||
|
enchantments.remove(enchantment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CompoundTag display = tag.get("display");
|
||||||
|
// A few null checks just to be safe, though they shouldn't actually be
|
||||||
|
ListTag lore = display != null ? display.get("Lore") : null;
|
||||||
|
for (Tag enchantment : remappedEnchantments.clone()) {
|
||||||
|
enchantments.add(enchantment);
|
||||||
|
if (lore != null && lore.size() != 0) {
|
||||||
|
lore.remove(lore.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lore != null && lore.size() == 0) {
|
||||||
|
display.remove("Lore");
|
||||||
|
if (display.isEmpty()) {
|
||||||
|
tag.remove("display");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tag.put(enchantments);
|
||||||
|
tag.remove(remappedEnchantments.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getRomanNumber(int number) {
|
||||||
|
switch (number) {
|
||||||
|
case 1:
|
||||||
|
return "I";
|
||||||
|
case 2:
|
||||||
|
return "II";
|
||||||
|
case 3:
|
||||||
|
return "III";
|
||||||
|
case 4:
|
||||||
|
return "IV";
|
||||||
|
case 5:
|
||||||
|
return "V";
|
||||||
|
case 6:
|
||||||
|
return "VI";
|
||||||
|
case 7:
|
||||||
|
return "VII";
|
||||||
|
case 8:
|
||||||
|
return "VIII";
|
||||||
|
case 9:
|
||||||
|
return "IX";
|
||||||
|
case 10:
|
||||||
|
return "X";
|
||||||
|
default:
|
||||||
|
return Integer.toString(number);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
package nl.matsv.viabackwards.api.rewriters;
|
||||||
|
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.*;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class LegacyEnchantmentRewriter {
|
||||||
|
|
||||||
|
private final Map<Short, String> enchantmentMappings = new HashMap<>();
|
||||||
|
private final String nbtTagName;
|
||||||
|
private Set<Short> hideLevelForEnchants;
|
||||||
|
|
||||||
|
public LegacyEnchantmentRewriter(final String nbtTagName) {
|
||||||
|
this.nbtTagName = nbtTagName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerEnchantment(int id, String replacementLore) {
|
||||||
|
enchantmentMappings.put((short) id, replacementLore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rewriteEnchantmentsToClient(CompoundTag tag, boolean storedEnchant) {
|
||||||
|
String key = storedEnchant ? "StoredEnchantments" : "ench";
|
||||||
|
ListTag enchantments = tag.get(key);
|
||||||
|
ListTag remappedEnchantments = new ListTag(nbtTagName + "|" + key, CompoundTag.class);
|
||||||
|
List<Tag> lore = new ArrayList<>();
|
||||||
|
for (Tag enchantmentEntry : enchantments.clone()) {
|
||||||
|
Short newId = (Short) ((CompoundTag) enchantmentEntry).get("id").getValue();
|
||||||
|
String enchantmentName = enchantmentMappings.get(newId);
|
||||||
|
if (enchantmentName != null) {
|
||||||
|
enchantments.remove(enchantmentEntry);
|
||||||
|
Number level = (Number) ((CompoundTag) enchantmentEntry).get("lvl").getValue();
|
||||||
|
if (hideLevelForEnchants != null && hideLevelForEnchants.contains(newId)) {
|
||||||
|
lore.add(new StringTag("", enchantmentName));
|
||||||
|
} else {
|
||||||
|
lore.add(new StringTag("", enchantmentName + " " + EnchantmentRewriter.getRomanNumber(level.shortValue())));
|
||||||
|
}
|
||||||
|
remappedEnchantments.add(enchantmentEntry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!lore.isEmpty()) {
|
||||||
|
if (!storedEnchant && enchantments.size() == 0) {
|
||||||
|
CompoundTag dummyEnchantment = new CompoundTag("");
|
||||||
|
dummyEnchantment.put(new ShortTag("id", (short) 0));
|
||||||
|
dummyEnchantment.put(new ShortTag("lvl", (short) 0));
|
||||||
|
enchantments.add(dummyEnchantment);
|
||||||
|
|
||||||
|
tag.put(new ByteTag(nbtTagName + "|dummyEnchant"));
|
||||||
|
|
||||||
|
IntTag hideFlags = tag.get("HideFlags");
|
||||||
|
if (hideFlags == null) {
|
||||||
|
hideFlags = new IntTag("HideFlags");
|
||||||
|
} else {
|
||||||
|
tag.put(new IntTag(nbtTagName + "|oldHideFlags", hideFlags.getValue()));
|
||||||
|
}
|
||||||
|
|
||||||
|
int flags = hideFlags.getValue() | 1;
|
||||||
|
hideFlags.setValue(flags);
|
||||||
|
tag.put(hideFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.put(remappedEnchantments);
|
||||||
|
|
||||||
|
CompoundTag display = tag.get("display");
|
||||||
|
if (display == null) {
|
||||||
|
tag.put(display = new CompoundTag("display"));
|
||||||
|
}
|
||||||
|
ListTag loreTag = display.get("Lore");
|
||||||
|
if (loreTag == null) {
|
||||||
|
display.put(loreTag = new ListTag("Lore", StringTag.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
lore.addAll(loreTag.getValue());
|
||||||
|
loreTag.setValue(lore);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rewriteEnchantmentsToServer(CompoundTag tag, boolean storedEnchant) {
|
||||||
|
String key = storedEnchant ? "StoredEnchantments" : "ench";
|
||||||
|
ListTag remappedEnchantments = tag.get(nbtTagName + "|" + key);
|
||||||
|
ListTag enchantments = tag.contains(key) ? tag.get(key) : new ListTag(key, CompoundTag.class);
|
||||||
|
if (!storedEnchant && tag.contains(nbtTagName + "|dummyEnchant")) {
|
||||||
|
tag.remove(nbtTagName + "|dummyEnchant");
|
||||||
|
|
||||||
|
for (Tag enchantment : enchantments.clone()) {
|
||||||
|
Short id = (Short) ((CompoundTag) enchantment).get("id").getValue();
|
||||||
|
Short level = (Short) ((CompoundTag) enchantment).get("lvl").getValue();
|
||||||
|
if (id == 0 && level == 0) {
|
||||||
|
enchantments.remove(enchantment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IntTag hideFlags = tag.get(nbtTagName + "|oldHideFlags");
|
||||||
|
if (hideFlags != null) {
|
||||||
|
tag.put(new IntTag("HideFlags", hideFlags.getValue()));
|
||||||
|
tag.remove(nbtTagName + "|oldHideFlags");
|
||||||
|
} else {
|
||||||
|
tag.remove("HideFlags");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CompoundTag display = tag.get("display");
|
||||||
|
// A few null checks just to be safe, though they shouldn't actually be
|
||||||
|
ListTag lore = display != null ? display.get("Lore") : null;
|
||||||
|
for (Tag enchantment : remappedEnchantments.clone()) {
|
||||||
|
enchantments.add(enchantment);
|
||||||
|
if (lore != null && lore.size() != 0) {
|
||||||
|
lore.remove(lore.get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lore != null && lore.size() == 0) {
|
||||||
|
display.remove("Lore");
|
||||||
|
if (display.isEmpty()) {
|
||||||
|
tag.remove("display");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tag.put(enchantments);
|
||||||
|
tag.remove(remappedEnchantments.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHideLevelForEnchants(Integer... enchants) {
|
||||||
|
this.hideLevelForEnchants = new HashSet<>();
|
||||||
|
for (Integer enchant : enchants) {
|
||||||
|
hideLevelForEnchants.add(enchant.shortValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,7 +22,7 @@ public abstract class Rewriter<T extends BackwardsProtocol> {
|
||||||
*
|
*
|
||||||
* @param protocol Protocol instance
|
* @param protocol Protocol instance
|
||||||
*/
|
*/
|
||||||
public final void register(T protocol) {
|
public void register(T protocol) {
|
||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
registerPackets(protocol);
|
registerPackets(protocol);
|
||||||
registerRewrites();
|
registerRewrites();
|
||||||
|
|
|
@ -13,6 +13,7 @@ package nl.matsv.viabackwards.protocol.protocol1_10to1_11.packets;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
||||||
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.LegacyEnchantmentRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_10to1_11.EntityTypeNames;
|
import nl.matsv.viabackwards.protocol.protocol1_10to1_11.EntityTypeNames;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11;
|
import nl.matsv.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage;
|
import nl.matsv.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage;
|
||||||
|
@ -34,12 +35,16 @@ import us.myles.ViaVersion.packets.State;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.types.Chunk1_9_3_4Type;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
import us.myles.viaversion.libs.opennbt.tag.builtin.StringTag;
|
import us.myles.viaversion.libs.opennbt.tag.builtin.StringTag;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class BlockItemPackets1_11 extends BlockItemRewriter<Protocol1_10To1_11> {
|
public class BlockItemPackets1_11 extends BlockItemRewriter<Protocol1_10To1_11> {
|
||||||
|
|
||||||
|
private LegacyEnchantmentRewriter enchantmentRewriter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets(Protocol1_10To1_11 protocol) {
|
protected void registerPackets(Protocol1_10To1_11 protocol) {
|
||||||
ItemRewriter itemRewriter = new ItemRewriter(protocol, this::handleItemToClient, this::handleItemToServer);
|
ItemRewriter itemRewriter = new ItemRewriter(protocol, this::handleItemToClient, this::handleItemToServer);
|
||||||
|
@ -375,6 +380,45 @@ public class BlockItemPackets1_11 extends BlockItemRewriter<Protocol1_10To1_11>
|
||||||
// Shulker shell to Popped Chorus Fruit
|
// Shulker shell to Popped Chorus Fruit
|
||||||
rewrite(450).repItem(new Item((short) 433, (byte) 1, (short) 0, getNamedTag("1.11 Shulker Shell")));
|
rewrite(450).repItem(new Item((short) 433, (byte) 1, (short) 0, getNamedTag("1.11 Shulker Shell")));
|
||||||
|
|
||||||
|
enchantmentRewriter = new LegacyEnchantmentRewriter(nbtTagName);
|
||||||
|
enchantmentRewriter.registerEnchantment(71, "§cCurse of Vanishing");
|
||||||
|
enchantmentRewriter.registerEnchantment(10, "§cCurse of Binding");
|
||||||
|
|
||||||
|
enchantmentRewriter.setHideLevelForEnchants(71, 10); // Curses do not display their level
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Item handleItemToClient(final Item item) {
|
||||||
|
if (item == null) return null;
|
||||||
|
super.handleItemToClient(item);
|
||||||
|
|
||||||
|
CompoundTag tag = item.getTag();
|
||||||
|
if (tag == null) return item;
|
||||||
|
|
||||||
|
if (tag.get("ench") instanceof ListTag) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToClient(tag, false);
|
||||||
|
}
|
||||||
|
if (tag.get("StoredEnchantments") instanceof ListTag) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToClient(tag, true);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Item handleItemToServer(final Item item) {
|
||||||
|
if (item == null) return null;
|
||||||
|
super.handleItemToServer(item);
|
||||||
|
|
||||||
|
CompoundTag tag = item.getTag();
|
||||||
|
if (tag == null) return item;
|
||||||
|
|
||||||
|
if (tag.contains(nbtTagName + "|ench")) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToServer(tag, false);
|
||||||
|
}
|
||||||
|
if (tag.contains(nbtTagName + "|StoredEnchantments")) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToServer(tag, true);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isLlama(UserConnection user) {
|
private boolean isLlama(UserConnection user) {
|
||||||
|
|
|
@ -292,6 +292,5 @@ public class BlockItemPackets1_12 extends BlockItemRewriter<Protocol1_11_1To1_12
|
||||||
|
|
||||||
// Handle beds
|
// Handle beds
|
||||||
rewrite(355).repItem(new Item((short) 355, (byte) 1, (short) 0, getNamedTag("1.12 %viabackwards_color% Bed")));
|
rewrite(355).repItem(new Item((short) 355, (byte) 1, (short) 0, getNamedTag("1.12 %viabackwards_color% Bed")));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
package nl.matsv.viabackwards.protocol.protocol1_11to1_11_1.packets;
|
package nl.matsv.viabackwards.protocol.protocol1_11to1_11_1.packets;
|
||||||
|
|
||||||
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.LegacyEnchantmentRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
|
import nl.matsv.viabackwards.protocol.protocol1_11to1_11_1.Protocol1_11To1_11_1;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.minecraft.item.Item;
|
import us.myles.ViaVersion.api.minecraft.item.Item;
|
||||||
|
@ -20,9 +21,13 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper;
|
||||||
import us.myles.ViaVersion.api.rewriters.ItemRewriter;
|
import us.myles.ViaVersion.api.rewriters.ItemRewriter;
|
||||||
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.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
|
|
||||||
public class ItemPackets1_11_1 extends BlockItemRewriter<Protocol1_11To1_11_1> {
|
public class ItemPackets1_11_1 extends BlockItemRewriter<Protocol1_11To1_11_1> {
|
||||||
|
|
||||||
|
private LegacyEnchantmentRewriter enchantmentRewriter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets(Protocol1_11To1_11_1 protocol) {
|
protected void registerPackets(Protocol1_11To1_11_1 protocol) {
|
||||||
ItemRewriter itemRewriter = new ItemRewriter(protocol, this::handleItemToClient, this::handleItemToServer);
|
ItemRewriter itemRewriter = new ItemRewriter(protocol, this::handleItemToClient, this::handleItemToServer);
|
||||||
|
@ -86,6 +91,43 @@ public class ItemPackets1_11_1 extends BlockItemRewriter<Protocol1_11To1_11_1> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerRewrites() {
|
protected void registerRewrites() {
|
||||||
rewrite(452).repItem(new Item((short) 265, (byte) 1, (short) 0, getNamedTag("1.11.2 Iron Nugget")));
|
rewrite(452).repItem(new Item(265, (byte) 1, (short) 0, getNamedTag("1.11.2 Iron Nugget")));
|
||||||
|
|
||||||
|
enchantmentRewriter = new LegacyEnchantmentRewriter(nbtTagName);
|
||||||
|
enchantmentRewriter.registerEnchantment(22, "§7Sweeping Edge");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Item handleItemToClient(final Item item) {
|
||||||
|
if (item == null) return null;
|
||||||
|
super.handleItemToClient(item);
|
||||||
|
|
||||||
|
CompoundTag tag = item.getTag();
|
||||||
|
if (tag == null) return item;
|
||||||
|
|
||||||
|
if (tag.get("ench") instanceof ListTag) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToClient(tag, false);
|
||||||
|
}
|
||||||
|
if (tag.get("StoredEnchantments") instanceof ListTag) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToClient(tag, true);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Item handleItemToServer(final Item item) {
|
||||||
|
if (item == null) return null;
|
||||||
|
super.handleItemToServer(item);
|
||||||
|
|
||||||
|
CompoundTag tag = item.getTag();
|
||||||
|
if (tag == null) return item;
|
||||||
|
|
||||||
|
if (tag.contains(nbtTagName + "|ench")) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToServer(tag, false);
|
||||||
|
}
|
||||||
|
if (tag.contains(nbtTagName + "|StoredEnchantments")) {
|
||||||
|
enchantmentRewriter.rewriteEnchantmentsToServer(tag, true);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ package nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.packets;
|
||||||
|
|
||||||
import nl.matsv.viabackwards.ViaBackwards;
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
||||||
|
import nl.matsv.viabackwards.api.rewriters.EnchantmentRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.Protocol1_12_2To1_13;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.block_entity_handlers.FlowerPotHandler;
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.block_entity_handlers.FlowerPotHandler;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.BackwardsMappings;
|
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.BackwardsMappings;
|
||||||
|
@ -759,9 +760,11 @@ public class BlockItemPackets1_13 extends BlockItemRewriter<Protocol1_12_2To1_13
|
||||||
for (Tag enchantmentEntry : enchantments.clone()) {
|
for (Tag enchantmentEntry : enchantments.clone()) {
|
||||||
CompoundTag enchEntry = new CompoundTag("");
|
CompoundTag enchEntry = new CompoundTag("");
|
||||||
String newId = (String) ((CompoundTag) enchantmentEntry).get("id").getValue();
|
String newId = (String) ((CompoundTag) enchantmentEntry).get("id").getValue();
|
||||||
if (enchantmentMappings.containsKey(newId)) {
|
|
||||||
lore.add(new StringTag("", enchantmentMappings.get(newId) + " "
|
String mappedEnchantmentId = enchantmentMappings.get(newId);
|
||||||
+ getRomanNumber((Short) ((CompoundTag) enchantmentEntry).get("lvl").getValue())));
|
if (mappedEnchantmentId != null) {
|
||||||
|
lore.add(new StringTag("", mappedEnchantmentId + " "
|
||||||
|
+ EnchantmentRewriter.getRomanNumber((Short) ((CompoundTag) enchantmentEntry).get("lvl").getValue())));
|
||||||
noMapped.add(enchantmentEntry);
|
noMapped.add(enchantmentEntry);
|
||||||
} else if (!newId.isEmpty()) {
|
} else if (!newId.isEmpty()) {
|
||||||
Short oldId = MappingData.oldEnchantmentsIds.inverse().get(newId);
|
Short oldId = MappingData.oldEnchantmentsIds.inverse().get(newId);
|
||||||
|
@ -778,7 +781,7 @@ public class BlockItemPackets1_13 extends BlockItemRewriter<Protocol1_12_2To1_13
|
||||||
name = "§7" + Character.toUpperCase(name.charAt(0)) + name.substring(1).toLowerCase(Locale.ENGLISH);
|
name = "§7" + Character.toUpperCase(name.charAt(0)) + name.substring(1).toLowerCase(Locale.ENGLISH);
|
||||||
|
|
||||||
lore.add(new StringTag("", name + " "
|
lore.add(new StringTag("", name + " "
|
||||||
+ getRomanNumber((Short) ((CompoundTag) enchantmentEntry).get("lvl").getValue())));
|
+ EnchantmentRewriter.getRomanNumber((Short) ((CompoundTag) enchantmentEntry).get("lvl").getValue())));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Via.getManager().isDebug())
|
if (Via.getManager().isDebug())
|
||||||
|
@ -1070,31 +1073,4 @@ public class BlockItemPackets1_13 extends BlockItemRewriter<Protocol1_12_2To1_13
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getRomanNumber(int number) {
|
|
||||||
switch (number) {
|
|
||||||
case 1:
|
|
||||||
return "I";
|
|
||||||
case 2:
|
|
||||||
return "II";
|
|
||||||
case 3:
|
|
||||||
return "III";
|
|
||||||
case 4:
|
|
||||||
return "IV";
|
|
||||||
case 5:
|
|
||||||
return "V";
|
|
||||||
case 6:
|
|
||||||
return "VI";
|
|
||||||
case 7:
|
|
||||||
return "VII";
|
|
||||||
case 8:
|
|
||||||
return "VIII";
|
|
||||||
case 9:
|
|
||||||
return "IX";
|
|
||||||
case 10:
|
|
||||||
return "X";
|
|
||||||
default:
|
|
||||||
return Integer.toString(number);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.google.common.collect.ImmutableSet;
|
||||||
import nl.matsv.viabackwards.ViaBackwards;
|
import nl.matsv.viabackwards.ViaBackwards;
|
||||||
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
import nl.matsv.viabackwards.api.entities.storage.EntityTracker;
|
||||||
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
import nl.matsv.viabackwards.api.rewriters.BlockItemRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.packets.BlockItemPackets1_13;
|
import nl.matsv.viabackwards.api.rewriters.EnchantmentRewriter;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
|
import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14;
|
||||||
import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage;
|
import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.storage.ChunkLightStorage;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
|
@ -31,14 +31,18 @@ import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.types.Chunk1_14Type;
|
import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.types.Chunk1_14Type;
|
||||||
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld;
|
||||||
import us.myles.viaversion.libs.opennbt.conversion.ConverterRegistry;
|
import us.myles.viaversion.libs.opennbt.conversion.ConverterRegistry;
|
||||||
import us.myles.viaversion.libs.opennbt.tag.builtin.*;
|
import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag;
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.ListTag;
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.StringTag;
|
||||||
|
import us.myles.viaversion.libs.opennbt.tag.builtin.Tag;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14> {
|
public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14> {
|
||||||
|
|
||||||
private static final String NBT_TAG_NAME = "ViaBackwards|" + Protocol1_13_2To1_14.class.getSimpleName();
|
private EnchantmentRewriter enchantmentRewriter;
|
||||||
private final Map<String, String> enchantmentMappings = new HashMap<>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets(Protocol1_13_2To1_14 protocol) {
|
protected void registerPackets(Protocol1_13_2To1_14 protocol) {
|
||||||
|
@ -249,13 +253,14 @@ public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Set<String> removedTypes = ImmutableSet.of("crafting_special_suspiciousstew", "blasting", "smoking", "campfire_cooking", "stonecutting");
|
|
||||||
|
|
||||||
// Declare Recipes
|
// Declare Recipes
|
||||||
protocol.registerOutgoing(State.PLAY, 0x5A, 0x54, new PacketRemapper() { // c
|
protocol.registerOutgoing(State.PLAY, 0x5A, 0x54, new PacketRemapper() { // c
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
handler(new PacketHandler() {
|
handler(new PacketHandler() {
|
||||||
|
|
||||||
|
private final Set<String> removedTypes = ImmutableSet.of("crafting_special_suspiciousstew", "blasting", "smoking", "campfire_cooking", "stonecutting");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int size = wrapper.passthrough(Type.VAR_INT);
|
int size = wrapper.passthrough(Type.VAR_INT);
|
||||||
|
@ -685,9 +690,10 @@ public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14
|
||||||
rewrite(741).repItem(new Item((short) 698, (byte) 1, (short) -1, getNamedTag("1.14 Trader Llama Spawn Egg")));
|
rewrite(741).repItem(new Item((short) 698, (byte) 1, (short) -1, getNamedTag("1.14 Trader Llama Spawn Egg")));
|
||||||
rewrite(747).repItem(new Item((short) 739, (byte) 1, (short) -1, getNamedTag("1.14 Wandering Trader Spawn Egg")));
|
rewrite(747).repItem(new Item((short) 739, (byte) 1, (short) -1, getNamedTag("1.14 Wandering Trader Spawn Egg")));
|
||||||
|
|
||||||
enchantmentMappings.put("minecraft:multishot", "§7Multishot");
|
enchantmentRewriter = new EnchantmentRewriter(nbtTagName);
|
||||||
enchantmentMappings.put("minecraft:quick_charge", "§7Quick Charge");
|
enchantmentRewriter.registerEnchantment("minecraft:multishot", "§7Multishot");
|
||||||
enchantmentMappings.put("minecraft:piercing", "§7Piercing");
|
enchantmentRewriter.registerEnchantment("minecraft:quick_charge", "§7Quick Charge");
|
||||||
|
enchantmentRewriter.registerEnchantment("minecraft:piercing", "§7Piercing");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -703,7 +709,7 @@ public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14
|
||||||
CompoundTag display = tag.get("display");
|
CompoundTag display = tag.get("display");
|
||||||
if (((CompoundTag) tag.get("display")).get("Lore") instanceof ListTag) {
|
if (((CompoundTag) tag.get("display")).get("Lore") instanceof ListTag) {
|
||||||
ListTag lore = display.get("Lore");
|
ListTag lore = display.get("Lore");
|
||||||
ListTag via = display.get(NBT_TAG_NAME + "|Lore");
|
ListTag via = display.get(nbtTagName + "|Lore");
|
||||||
if (via != null) {
|
if (via != null) {
|
||||||
display.put(ConverterRegistry.convertToTag("Lore", ConverterRegistry.convertToValue(via)));
|
display.put(ConverterRegistry.convertToTag("Lore", ConverterRegistry.convertToValue(via)));
|
||||||
} else {
|
} else {
|
||||||
|
@ -717,60 +723,20 @@ public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
display.remove(NBT_TAG_NAME + "|Lore");
|
display.remove(nbtTagName + "|Lore");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag.get("Enchantments") instanceof ListTag) {
|
if (tag.get("Enchantments") instanceof ListTag) {
|
||||||
rewriteEnchantmentsToClient(tag, false);
|
enchantmentRewriter.rewriteEnchantmentsToClient(tag, false);
|
||||||
}
|
}
|
||||||
if (tag.get("StoredEnchantments") instanceof ListTag) {
|
if (tag.get("StoredEnchantments") instanceof ListTag) {
|
||||||
rewriteEnchantmentsToClient(tag, true);
|
enchantmentRewriter.rewriteEnchantmentsToClient(tag, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rewriteEnchantmentsToClient(CompoundTag tag, boolean storedEnchant) {
|
|
||||||
String key = storedEnchant ? "StoredEnchantments" : "Enchantments";
|
|
||||||
ListTag enchantments = tag.get(key);
|
|
||||||
ListTag noMapped = new ListTag(NBT_TAG_NAME + "|" + key, CompoundTag.class);
|
|
||||||
List<Tag> lore = new ArrayList<>();
|
|
||||||
for (Tag enchantmentEntry : enchantments.clone()) {
|
|
||||||
String newId = (String) ((CompoundTag) enchantmentEntry).get("id").getValue();
|
|
||||||
String enchantmentName = enchantmentMappings.get(newId);
|
|
||||||
if (enchantmentName != null) {
|
|
||||||
enchantments.remove(enchantmentEntry);
|
|
||||||
lore.add(new StringTag("", enchantmentMappings.get(newId) + " " + BlockItemPackets1_13.getRomanNumber((Short) ((CompoundTag) enchantmentEntry).get("lvl").getValue())));
|
|
||||||
noMapped.add(enchantmentEntry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!lore.isEmpty()) {
|
|
||||||
if (!storedEnchant && enchantments.size() == 0) {
|
|
||||||
CompoundTag dummyEnchantment = new CompoundTag("");
|
|
||||||
dummyEnchantment.put(new StringTag("id", ""));
|
|
||||||
dummyEnchantment.put(new ShortTag("lvl", (short) 0));
|
|
||||||
enchantments.add(dummyEnchantment);
|
|
||||||
|
|
||||||
tag.put(new ByteTag(NBT_TAG_NAME + "|dummyEnchant"));
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.put(noMapped);
|
|
||||||
|
|
||||||
CompoundTag display = tag.get("display");
|
|
||||||
if (display == null) {
|
|
||||||
tag.put(display = new CompoundTag("display"));
|
|
||||||
}
|
|
||||||
ListTag loreTag = display.get("Lore");
|
|
||||||
if (loreTag == null) {
|
|
||||||
display.put(loreTag = new ListTag("Lore", StringTag.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
lore.addAll(loreTag.getValue());
|
|
||||||
loreTag.setValue(lore);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item handleItemToServer(Item item) {
|
public Item handleItemToServer(Item item) {
|
||||||
if (item == null) return null;
|
if (item == null) return null;
|
||||||
|
@ -784,7 +750,7 @@ public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14
|
||||||
CompoundTag display = tag.get("display");
|
CompoundTag display = tag.get("display");
|
||||||
if (display.get("Lore") instanceof ListTag) {
|
if (display.get("Lore") instanceof ListTag) {
|
||||||
ListTag lore = display.get("Lore");
|
ListTag lore = display.get("Lore");
|
||||||
display.put(ConverterRegistry.convertToTag(NBT_TAG_NAME + "|Lore", ConverterRegistry.convertToValue(lore)));
|
display.put(ConverterRegistry.convertToTag(nbtTagName + "|Lore", ConverterRegistry.convertToValue(lore)));
|
||||||
for (Tag loreEntry : lore) {
|
for (Tag loreEntry : lore) {
|
||||||
if (loreEntry instanceof StringTag) {
|
if (loreEntry instanceof StringTag) {
|
||||||
((StringTag) loreEntry).setValue(
|
((StringTag) loreEntry).setValue(
|
||||||
|
@ -797,46 +763,16 @@ public class BlockItemPackets1_14 extends BlockItemRewriter<Protocol1_13_2To1_14
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tag.contains(NBT_TAG_NAME + "|Enchantments")) {
|
if (tag.contains(nbtTagName + "|Enchantments")) {
|
||||||
rewriteEnchantmentsToServer(tag, false);
|
enchantmentRewriter.rewriteEnchantmentsToServer(tag, false);
|
||||||
}
|
}
|
||||||
if (tag.contains(NBT_TAG_NAME + "|StoredEnchantments")) {
|
if (tag.contains(nbtTagName + "|StoredEnchantments")) {
|
||||||
rewriteEnchantmentsToServer(tag, true);
|
enchantmentRewriter.rewriteEnchantmentsToServer(tag, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rewriteEnchantmentsToServer(CompoundTag tag, boolean storedEnchant) {
|
|
||||||
String key = storedEnchant ? "StoredEnchantments" : "Enchantments";
|
|
||||||
ListTag newEnchantments = tag.get(NBT_TAG_NAME + "|" + key);
|
|
||||||
ListTag enchantments = tag.contains(key) ? tag.get(key) : new ListTag(key, CompoundTag.class);
|
|
||||||
if (!storedEnchant && tag.contains(NBT_TAG_NAME + "|dummyEnchant")) {
|
|
||||||
tag.remove(NBT_TAG_NAME + "|dummyEnchant");
|
|
||||||
for (Tag enchantment : enchantments.clone()) {
|
|
||||||
String id = (String) ((CompoundTag) enchantment).get("id").getValue();
|
|
||||||
if (id.isEmpty())
|
|
||||||
enchantments.remove(enchantment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CompoundTag display = tag.get("display");
|
|
||||||
// A few null checks just to be safe, though they shouldn't actually be
|
|
||||||
ListTag lore = display != null ? display.get("Lore") : null;
|
|
||||||
for (Tag enchantment : newEnchantments.clone()) {
|
|
||||||
enchantments.add(enchantment);
|
|
||||||
if (lore != null && lore.size() != 0)
|
|
||||||
lore.remove(lore.get(0));
|
|
||||||
}
|
|
||||||
if (lore != null && lore.size() == 0) {
|
|
||||||
display.remove("Lore");
|
|
||||||
if (display.isEmpty())
|
|
||||||
tag.remove("display");
|
|
||||||
}
|
|
||||||
tag.put(enchantments);
|
|
||||||
tag.remove(newEnchantments.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected CompoundTag getNamedTag(String text) {
|
protected CompoundTag getNamedTag(String text) {
|
||||||
CompoundTag tag = new CompoundTag("");
|
CompoundTag tag = new CompoundTag("");
|
||||||
|
|
|
@ -35,7 +35,7 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
@Override
|
@Override
|
||||||
protected void registerPackets(Protocol1_13_2To1_14 protocol) {
|
protected void registerPackets(Protocol1_13_2To1_14 protocol) {
|
||||||
// Spawn Object
|
// Spawn Object
|
||||||
protocol.registerOutgoing(State.PLAY, 0x0, 0x0, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x00, 0x00, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity id
|
map(Type.VAR_INT); // 0 - Entity id
|
||||||
|
@ -47,6 +47,9 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
map(Type.BYTE); // 6 - Pitch
|
map(Type.BYTE); // 6 - Pitch
|
||||||
map(Type.BYTE); // 7 - Yaw
|
map(Type.BYTE); // 7 - Yaw
|
||||||
map(Type.INT); // 8 - Data
|
map(Type.INT); // 8 - Data
|
||||||
|
map(Type.SHORT); // 9 - Velocity X
|
||||||
|
map(Type.SHORT); // 10 - Velocity Y
|
||||||
|
map(Type.SHORT); // 11 - Velocity Z
|
||||||
|
|
||||||
handler(getObjectTrackerHandler());
|
handler(getObjectTrackerHandler());
|
||||||
|
|
||||||
|
@ -55,9 +58,9 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int id = wrapper.get(Type.BYTE, 0);
|
int id = wrapper.get(Type.BYTE, 0);
|
||||||
Entity1_13Types.EntityType entityType = Entity1_13Types.getTypeFromId(EntityTypeMapping.getOldId(id).orElse(id), false);
|
Entity1_13Types.EntityType entityType = Entity1_13Types.getTypeFromId(EntityTypeMapping.getOldId(id).orElse(id), false);
|
||||||
Optional<Entity1_13Types.ObjectType> type;
|
Entity1_13Types.ObjectType objectType;
|
||||||
if (entityType.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT)) {
|
if (entityType.isOrHasParent(Entity1_13Types.EntityType.MINECART_ABSTRACT)) {
|
||||||
type = Optional.of(Entity1_13Types.ObjectType.MINECART);
|
objectType = Entity1_13Types.ObjectType.MINECART;
|
||||||
int data = 0;
|
int data = 0;
|
||||||
switch (entityType) {
|
switch (entityType) {
|
||||||
case CHEST_MINECART:
|
case CHEST_MINECART:
|
||||||
|
@ -82,31 +85,21 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
if (data != 0)
|
if (data != 0)
|
||||||
wrapper.set(Type.INT, 0, data);
|
wrapper.set(Type.INT, 0, data);
|
||||||
} else {
|
} else {
|
||||||
type = Entity1_13Types.ObjectType.fromEntityType(entityType);
|
objectType = Entity1_13Types.ObjectType.fromEntityType(entityType).orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type.isPresent()) {
|
if (objectType == null) return;
|
||||||
wrapper.set(Type.BYTE, 0, (byte) type.get().getId());
|
|
||||||
}
|
wrapper.set(Type.BYTE, 0, (byte) objectType.getId());
|
||||||
if (type.isPresent() && type.get() == Entity1_13Types.ObjectType.FALLING_BLOCK) {
|
|
||||||
|
int data = wrapper.get(Type.INT, 0);
|
||||||
|
if (objectType == Entity1_13Types.ObjectType.FALLING_BLOCK) {
|
||||||
int blockState = wrapper.get(Type.INT, 0);
|
int blockState = wrapper.get(Type.INT, 0);
|
||||||
int combined = BlockItemPackets1_13.toOldId(blockState);
|
int combined = BlockItemPackets1_13.toOldId(blockState);
|
||||||
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
combined = ((combined >> 4) & 0xFFF) | ((combined & 0xF) << 12);
|
||||||
wrapper.set(Type.INT, 0, combined);
|
wrapper.set(Type.INT, 0, combined);
|
||||||
} else if (type.isPresent() && type.get() == Entity1_13Types.ObjectType.ITEM_FRAME) {
|
} else if (entityType.isOrHasParent(Entity1_13Types.EntityType.ABSTRACT_ARROW)) {
|
||||||
int data = wrapper.get(Type.INT, 0);
|
wrapper.set(Type.INT, 0, data + 1);
|
||||||
switch (data) {
|
|
||||||
case 3:
|
|
||||||
data = 0;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
data = 1;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
data = 3;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
wrapper.set(Type.INT, 0, data);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -114,7 +107,7 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Spawn mob packet
|
// Spawn mob packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x3, 0x3, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() {
|
||||||
@Override
|
@Override
|
||||||
public void registerMap() {
|
public void registerMap() {
|
||||||
map(Type.VAR_INT); // 0 - Entity ID
|
map(Type.VAR_INT); // 0 - Entity ID
|
||||||
|
@ -136,11 +129,8 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
public void handle(PacketWrapper wrapper) throws Exception {
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
int type = wrapper.get(Type.VAR_INT, 1);
|
int type = wrapper.get(Type.VAR_INT, 1);
|
||||||
Entity1_14Types.EntityType entityType = Entity1_14Types.getTypeFromId(type);
|
Entity1_14Types.EntityType entityType = Entity1_14Types.getTypeFromId(type);
|
||||||
addTrackedEntity(
|
addTrackedEntity(wrapper.user(), wrapper.get(Type.VAR_INT, 0), entityType);
|
||||||
wrapper.user(),
|
|
||||||
wrapper.get(Type.VAR_INT, 0),
|
|
||||||
entityType
|
|
||||||
);
|
|
||||||
Optional<Integer> oldId = EntityTypeMapping.getOldId(type);
|
Optional<Integer> oldId = EntityTypeMapping.getOldId(type);
|
||||||
if (!oldId.isPresent()) {
|
if (!oldId.isPresent()) {
|
||||||
Optional<EntityData> oldType = getEntityData(entityType);
|
Optional<EntityData> oldType = getEntityData(entityType);
|
||||||
|
@ -168,7 +158,24 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
registerExtraTracker(0x02, Entity1_14Types.EntityType.LIGHTNING_BOLT);
|
registerExtraTracker(0x02, Entity1_14Types.EntityType.LIGHTNING_BOLT);
|
||||||
|
|
||||||
// Spawn painting
|
// Spawn painting
|
||||||
registerExtraTracker(0x04, Entity1_14Types.EntityType.PAINTING);
|
protocol.registerOutgoing(State.PLAY, 0x04, 0x04, new PacketRemapper() {
|
||||||
|
@Override
|
||||||
|
public void registerMap() {
|
||||||
|
map(Type.VAR_INT);
|
||||||
|
map(Type.UUID);
|
||||||
|
map(Type.VAR_INT);
|
||||||
|
map(Type.POSITION1_14, Type.POSITION);
|
||||||
|
map(Type.BYTE);
|
||||||
|
|
||||||
|
// Track entity
|
||||||
|
handler(new PacketHandler() {
|
||||||
|
@Override
|
||||||
|
public void handle(PacketWrapper wrapper) throws Exception {
|
||||||
|
addTrackedEntity(wrapper.user(), wrapper.get(Type.VAR_INT, 0), Entity1_14Types.EntityType.PAINTING);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Spawn player packet
|
// Spawn player packet
|
||||||
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() {
|
||||||
|
@ -264,7 +271,7 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
meta.setValue(getProtocol().getBlockItemPackets().handleItemToClient(item));
|
meta.setValue(getProtocol().getBlockItemPackets().handleItemToClient(item));
|
||||||
} else if (type == MetaType1_13_2.BlockID) {
|
} else if (type == MetaType1_13_2.BlockID) {
|
||||||
int blockstate = (Integer) meta.getValue();
|
int blockstate = (Integer) meta.getValue();
|
||||||
meta.setValue(getProtocol().getNewBlockStateId(blockstate));
|
meta.setValue(Protocol1_13_2To1_14.getNewBlockStateId(blockstate));
|
||||||
}
|
}
|
||||||
|
|
||||||
return meta;
|
return meta;
|
||||||
|
@ -361,26 +368,18 @@ public class EntityPackets1_14 extends EntityRewriter<Protocol1_13_2To1_14> {
|
||||||
if (index == 12) {
|
if (index == 12) {
|
||||||
Position position = (Position) meta.getValue();
|
Position position = (Position) meta.getValue();
|
||||||
if (position != null) {
|
if (position != null) {
|
||||||
|
// Use bed
|
||||||
|
PacketWrapper wrapper = new PacketWrapper(0x33, null, e.getUser());
|
||||||
|
wrapper.write(Type.VAR_INT, e.getEntity().getEntityId());
|
||||||
|
wrapper.write(Type.POSITION, position);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//Use bed
|
|
||||||
PacketWrapper wrapper = new PacketWrapper(0x33, null, e.getUser());
|
|
||||||
wrapper.write(Type.VAR_INT, e.getEntity().getEntityId());
|
|
||||||
wrapper.write(Type.POSITION, position);
|
|
||||||
wrapper.send(Protocol1_13_2To1_14.class);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
//Animation leave bed
|
|
||||||
PacketWrapper wrapper = new PacketWrapper(0x6, null, e.getUser());
|
|
||||||
wrapper.write(Type.VAR_INT, e.getEntity().getEntityId());
|
|
||||||
wrapper.write(Type.UNSIGNED_BYTE, (short) 2);
|
|
||||||
wrapper.send(Protocol1_13_2To1_14.class);
|
wrapper.send(Protocol1_13_2To1_14.class);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw RemovedValueException.EX;
|
throw RemovedValueException.EX;
|
||||||
} else if (index > 12) {
|
} else if (index > 12) {
|
||||||
meta.setId(index - 1);
|
meta.setId(index - 1);
|
||||||
|
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren