Skip to content

Commit

Permalink
remove legacy item script logic, fixes villager inconsistency
Browse files Browse the repository at this point in the history
Item scripts have not used lore to identify themselves for a while, so this prevention is safe to remove. This caused villager trades to not render properly for clients.
  • Loading branch information
mcmonkey4eva committed Jan 16, 2020
1 parent 4f56481 commit ab4a203
Show file tree
Hide file tree
Showing 5 changed files with 2 additions and 118 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,17 @@
import com.denizenscript.denizen.events.player.PlayerReceivesMessageScriptEvent;
import com.denizenscript.denizen.events.player.PlayerSteersEntityScriptEvent;
import com.denizenscript.denizen.events.player.ResourcePackStatusScriptEvent;
import com.denizenscript.denizen.nms.NMSHandler;
import com.denizenscript.denizen.nms.util.TradeOffer;
import com.denizenscript.denizen.nms.util.jnbt.StringTag;
import com.denizenscript.denizen.objects.EntityTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.scripts.commands.player.GlowCommand;
import com.denizenscript.denizen.scripts.commands.server.ExecuteCommand;
import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper;
import com.denizenscript.denizen.utilities.DenizenAPI;
import com.denizenscript.denizencore.objects.core.ElementTag;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
Expand Down Expand Up @@ -149,52 +141,4 @@ public boolean sendPacket(Player player, PacketOutEntityMetadata entityMetadata)
HashSet<UUID> players = GlowCommand.glowViewers.get(entityMetadata.getEntityId());
return players != null && entityMetadata.checkForGlow() && !players.contains(player.getUniqueId());
}

public boolean sendPacket(Player player, PacketOutSetSlot setSlot) {
setSlot.setItemStack(removeItemScriptLore(setSlot.getItemStack()));
return false;
}

public boolean sendPacket(Player player, PacketOutWindowItems windowItems) {
ItemStack[] contents = windowItems.getContents();
for (int i = 0; i < contents.length; i++) {
contents[i] = removeItemScriptLore(contents[i]);
}
windowItems.setContents(contents);
return false;
}

public boolean sendPacket(Player player, PacketOutTradeList tradeList) {
List<TradeOffer> tradeOffers = tradeList.getTradeOffers();
for (TradeOffer tradeOffer : tradeOffers) {
tradeOffer.setFirstCost(removeItemScriptLore(tradeOffer.getFirstCost()));
tradeOffer.setSecondCost(removeItemScriptLore(tradeOffer.getSecondCost()));
tradeOffer.setProduct(removeItemScriptLore(tradeOffer.getProduct()));
}
tradeList.setTradeOffers(tradeOffers);
return false;
}

private static ItemStack removeItemScriptLore(ItemStack itemStack) {
if (itemStack != null && itemStack.hasItemMeta() && itemStack.getItemMeta().hasLore()) {
ItemMeta meta = itemStack.getItemMeta();
List<String> lore = meta.getLore();
Iterator<String> iter = lore.iterator();
String hash = null;
while (iter.hasNext()) {
String line = iter.next();
if (line.startsWith(ItemScriptHelper.ItemScriptHashID)) {
hash = line;
iter.remove();
break;
}
}
if (hash != null) {
meta.setLore(lore);
itemStack.setItemMeta(meta);
return NMSHandler.getItemHelper().addNbtData(itemStack, "Denizen Item Script", new StringTag(hash));
}
}
return itemStack;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.denizenscript.denizen.nms.v1_12.impl.packets.handlers;

import com.denizenscript.denizen.nms.v1_12.impl.packets.PacketOutSetSlotImpl;
import com.denizenscript.denizen.nms.v1_12.impl.entities.EntityFakePlayerImpl;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
import io.netty.buffer.Unpooled;
Expand All @@ -12,8 +11,6 @@
import com.denizenscript.denizen.nms.v1_12.impl.packets.PacketOutChatImpl;
import com.denizenscript.denizen.nms.v1_12.impl.packets.PacketOutEntityMetadataImpl;
import com.denizenscript.denizen.nms.v1_12.impl.packets.PacketOutSpawnEntityImpl;
import com.denizenscript.denizen.nms.v1_12.impl.packets.PacketOutTradeListImpl;
import com.denizenscript.denizen.nms.v1_12.impl.packets.PacketOutWindowItemsImpl;
import com.denizenscript.denizen.nms.interfaces.packets.PacketOutSpawnEntity;
import com.denizenscript.denizen.nms.util.ReflectionHelper;
import com.denizenscript.denizencore.utilities.debugging.Debug;
Expand Down Expand Up @@ -292,16 +289,6 @@ else if (packet instanceof PacketPlayOutEntityMetadata) {
oldManager.sendPacket(packet);
}
}
else if (packet instanceof PacketPlayOutSetSlot) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutSetSlotImpl((PacketPlayOutSetSlot) packet))) {
oldManager.sendPacket(packet);
}
}
else if (packet instanceof PacketPlayOutWindowItems) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutWindowItemsImpl((PacketPlayOutWindowItems) packet))) {
oldManager.sendPacket(packet);
}
}
else if (packet instanceof PacketPlayOutCustomPayload) {
PacketPlayOutCustomPayload payload = (PacketPlayOutCustomPayload) packet;
PacketDataSerializer original = new PacketDataSerializer(Unpooled.buffer());
Expand All @@ -312,15 +299,7 @@ else if (packet instanceof PacketPlayOutCustomPayload) {
new byte[original.readableBytes()]));
// Write the original back to avoid odd errors
payload.a(original);
String name = serializer.e(20);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeListImpl(payload, serializer))) {
oldManager.sendPacket(packet);
}
}
else {
oldManager.sendPacket(packet);
}
oldManager.sendPacket(packet);
}
catch (Exception e) {
oldManager.sendPacket(packet);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import com.denizenscript.denizen.nms.v1_13.impl.entities.EntityFakePlayerImpl;
import com.denizenscript.denizen.nms.v1_13.impl.packets.PacketOutChatImpl;
import com.denizenscript.denizen.nms.v1_13.impl.packets.PacketOutSpawnEntityImpl;
import com.denizenscript.denizen.nms.v1_13.impl.packets.PacketOutTradeListImpl;
import com.denizenscript.denizen.nms.interfaces.packets.PacketOutSpawnEntity;
import com.denizenscript.denizen.nms.util.ReflectionHelper;
import com.denizenscript.denizen.utilities.packets.DenizenPacketHandler;
Expand All @@ -14,8 +13,6 @@
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import com.denizenscript.denizen.nms.v1_13.impl.packets.PacketOutEntityMetadataImpl;
import com.denizenscript.denizen.nms.v1_13.impl.packets.PacketOutSetSlotImpl;
import com.denizenscript.denizen.nms.v1_13.impl.packets.PacketOutWindowItemsImpl;
import com.denizenscript.denizencore.utilities.debugging.Debug;
import net.minecraft.server.v1_13_R2.*;
import net.minecraft.server.v1_13_R2.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
Expand Down Expand Up @@ -306,16 +303,6 @@ else if (packet instanceof PacketPlayOutEntityMetadata) {
oldManager.sendPacket(packet, genericfuturelistener);
}
}
else if (packet instanceof PacketPlayOutSetSlot) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutSetSlotImpl((PacketPlayOutSetSlot) packet))) {
oldManager.sendPacket(packet, genericfuturelistener);
}
}
else if (packet instanceof PacketPlayOutWindowItems) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutWindowItemsImpl((PacketPlayOutWindowItems) packet))) {
oldManager.sendPacket(packet, genericfuturelistener);
}
}
else if (packet instanceof PacketPlayOutCustomPayload) {
PacketPlayOutCustomPayload payload = (PacketPlayOutCustomPayload) packet;
PacketDataSerializer original = new PacketDataSerializer(Unpooled.buffer());
Expand All @@ -326,15 +313,7 @@ else if (packet instanceof PacketPlayOutCustomPayload) {
new byte[original.readableBytes()]));
// Write the original back to avoid odd errors
payload.a(original);
MinecraftKey key = serializer.l();
if (key != null && key.equals(PacketPlayOutCustomPayload.a)) { // MC|TrList -> minecraft:trader_list
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeListImpl(payload, serializer))) {
oldManager.sendPacket(packet, genericfuturelistener);
}
}
else {
oldManager.sendPacket(packet, genericfuturelistener);
}
oldManager.sendPacket(packet, genericfuturelistener);
}
catch (Exception e) {
oldManager.sendPacket(packet, genericfuturelistener);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -345,15 +345,6 @@ public boolean processPacketHandlerForPacket(Packet<?> packet) {
else if (packet instanceof PacketPlayOutEntityMetadata) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((PacketPlayOutEntityMetadata) packet));
}
else if (packet instanceof PacketPlayOutSetSlot) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutSetSlotImpl((PacketPlayOutSetSlot) packet));
}
else if (packet instanceof PacketPlayOutWindowItems) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutWindowItemsImpl((PacketPlayOutWindowItems) packet));
}
else if (packet instanceof PacketPlayOutOpenWindowMerchant) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeListImpl((PacketPlayOutOpenWindowMerchant) packet));
}
return false;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -345,15 +345,6 @@ public boolean processPacketHandlerForPacket(Packet<?> packet) {
else if (packet instanceof PacketPlayOutEntityMetadata) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutEntityMetadataImpl((PacketPlayOutEntityMetadata) packet));
}
else if (packet instanceof PacketPlayOutSetSlot) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutSetSlotImpl((PacketPlayOutSetSlot) packet));
}
else if (packet instanceof PacketPlayOutWindowItems) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutWindowItemsImpl((PacketPlayOutWindowItems) packet));
}
else if (packet instanceof PacketPlayOutOpenWindowMerchant) {
return packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeListImpl((PacketPlayOutOpenWindowMerchant) packet));
}
return false;
}

Expand Down

0 comments on commit ab4a203

Please sign in to comment.