Skip to content

Commit

Permalink
Handle item scripts properly in villager trades
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Oct 16, 2016
1 parent 1f56381 commit b2e4bd0
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 35 deletions.
Expand Up @@ -146,9 +146,6 @@ public boolean sendPacket(Player player, PacketOutWindowItems windowItems) {
@Override
public boolean sendPacket(Player player, PacketOutTradeList tradeList) {
List<TradeOffer> tradeOffers = tradeList.getTradeOffers();
if (tradeOffers == null) {
return false;
}
for (TradeOffer tradeOffer : tradeOffers) {
tradeOffer.setFirstCost(removeItemScriptLore(tradeOffer.getFirstCost()));
tradeOffer.setSecondCost(removeItemScriptLore(tradeOffer.getSecondCost()));
Expand Down
Expand Up @@ -6,7 +6,9 @@
import net.minecraft.server.v1_10_R1.PacketDataSerializer;
import net.minecraft.server.v1_10_R1.PacketPlayOutCustomPayload;
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.List;

public class PacketOutTradeList_v1_10_R1 implements PacketOutTradeList {
Expand All @@ -15,14 +17,10 @@ public class PacketOutTradeList_v1_10_R1 implements PacketOutTradeList {
private int container;
private List<TradeOffer> tradeOffers;

public PacketOutTradeList_v1_10_R1(PacketPlayOutCustomPayload internal) {
public PacketOutTradeList_v1_10_R1(PacketPlayOutCustomPayload internal, PacketDataSerializer serializer) {
this.internal = internal;
/*try {
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
internal.b(serializer);
try {
container = serializer.readInt();
int bytes = serializer.readableBytes();
serializer = new PacketDataSerializer(serializer.readBytes(bytes));
tradeOffers = new ArrayList<TradeOffer>();
byte tradeCount = serializer.readByte();
for (byte i = 0; i < tradeCount; i++) {
Expand All @@ -38,7 +36,7 @@ public PacketOutTradeList_v1_10_R1(PacketPlayOutCustomPayload internal) {
}
catch (Exception e) {
e.printStackTrace();
}*/
}
}

@Override
Expand All @@ -50,6 +48,7 @@ public List<TradeOffer> getTradeOffers() {
public void setTradeOffers(List<TradeOffer> tradeOffers) {
try {
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
serializer.a("MC|TrList");
serializer.writeInt(container);
serializer.writeByte((byte)(tradeOffers.size() & 255));
for (TradeOffer tradeOffer : tradeOffers) {
Expand Down
@@ -1,5 +1,6 @@
package net.aufdemrand.denizen.nms.impl.packets.handlers;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
Expand All @@ -13,7 +14,6 @@
import net.aufdemrand.denizen.nms.impl.packets.PacketOutWindowItems_v1_10_R1;
import net.aufdemrand.denizen.nms.interfaces.packets.PacketHandler;
import net.aufdemrand.denizen.nms.interfaces.packets.PacketOutSpawnEntity;
import net.aufdemrand.denizen.nms.util.ReflectionHelper;
import net.minecraft.server.v1_10_R1.*;
import net.minecraft.server.v1_10_R1.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
import org.bukkit.Bukkit;
Expand Down Expand Up @@ -135,13 +135,21 @@ else if (packet instanceof PacketPlayOutWindowItems) {
}
}
else if (packet instanceof PacketPlayOutCustomPayload) {
String name = ReflectionHelper.getFieldValue(PacketPlayOutCustomPayload.class, "a", packet);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeList_v1_10_R1((PacketPlayOutCustomPayload) packet))) {
PacketPlayOutCustomPayload payload = (PacketPlayOutCustomPayload) packet;
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
try {
payload.b(serializer);
String name = serializer.e(20);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeList_v1_10_R1(payload, serializer))) {
oldManager.sendPacket(packet);
}
}
else {
oldManager.sendPacket(packet);
}
}
else {
catch (Exception e) {
oldManager.sendPacket(packet);
}
}
Expand Down
Expand Up @@ -6,7 +6,9 @@
import net.minecraft.server.v1_8_R3.PacketDataSerializer;
import net.minecraft.server.v1_8_R3.PacketPlayOutCustomPayload;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.List;

public class PacketOutTradeList_v1_8_R3 implements PacketOutTradeList {
Expand All @@ -15,11 +17,9 @@ public class PacketOutTradeList_v1_8_R3 implements PacketOutTradeList {
private int container;
private List<TradeOffer> tradeOffers;

public PacketOutTradeList_v1_8_R3(PacketPlayOutCustomPayload internal) {
/*this.internal = internal;
public PacketOutTradeList_v1_8_R3(PacketPlayOutCustomPayload internal, PacketDataSerializer serializer) {
this.internal = internal;
try {
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
internal.b(serializer);
container = serializer.readInt();
tradeOffers = new ArrayList<TradeOffer>();
byte tradeCount = serializer.readByte();
Expand All @@ -36,7 +36,7 @@ public PacketOutTradeList_v1_8_R3(PacketPlayOutCustomPayload internal) {
}
catch (Exception e) {
e.printStackTrace();
}*/
}
}

@Override
Expand All @@ -48,6 +48,7 @@ public List<TradeOffer> getTradeOffers() {
public void setTradeOffers(List<TradeOffer> tradeOffers) {
try {
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
serializer.a("MC|TrList");
serializer.writeInt(container);
serializer.writeByte((byte)(tradeOffers.size() & 255));
for (TradeOffer tradeOffer : tradeOffers) {
Expand Down
@@ -1,5 +1,6 @@
package net.aufdemrand.denizen.nms.impl.packets.handlers;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
Expand All @@ -13,7 +14,6 @@
import net.aufdemrand.denizen.nms.impl.packets.PacketOutWindowItems_v1_8_R3;
import net.aufdemrand.denizen.nms.interfaces.packets.PacketHandler;
import net.aufdemrand.denizen.nms.interfaces.packets.PacketOutSpawnEntity;
import net.aufdemrand.denizen.nms.util.ReflectionHelper;
import net.minecraft.server.v1_8_R3.*;
import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
import org.bukkit.Bukkit;
Expand Down Expand Up @@ -127,13 +127,21 @@ else if (packet instanceof PacketPlayOutWindowItems) {
}
}
else if (packet instanceof PacketPlayOutCustomPayload) {
String name = ReflectionHelper.getFieldValue(PacketPlayOutCustomPayload.class, "a", packet);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeList_v1_8_R3((PacketPlayOutCustomPayload) packet))) {
PacketPlayOutCustomPayload payload = (PacketPlayOutCustomPayload) packet;
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
try {
payload.b(serializer);
String name = serializer.c(20);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeList_v1_8_R3(payload, serializer))) {
oldManager.handle(packet);
}
}
else {
oldManager.handle(packet);
}
}
else {
catch (Exception e) {
oldManager.handle(packet);
}
}
Expand Down
Expand Up @@ -6,7 +6,9 @@
import net.minecraft.server.v1_9_R2.PacketDataSerializer;
import net.minecraft.server.v1_9_R2.PacketPlayOutCustomPayload;
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.List;

public class PacketOutTradeList_v1_9_R2 implements PacketOutTradeList {
Expand All @@ -15,11 +17,9 @@ public class PacketOutTradeList_v1_9_R2 implements PacketOutTradeList {
private int container;
private List<TradeOffer> tradeOffers;

public PacketOutTradeList_v1_9_R2(PacketPlayOutCustomPayload internal) {
/*this.internal = internal;
public PacketOutTradeList_v1_9_R2(PacketPlayOutCustomPayload internal, PacketDataSerializer serializer) {
this.internal = internal;
try {
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
internal.b(serializer);
container = serializer.readInt();
tradeOffers = new ArrayList<TradeOffer>();
byte tradeCount = serializer.readByte();
Expand All @@ -36,7 +36,7 @@ public PacketOutTradeList_v1_9_R2(PacketPlayOutCustomPayload internal) {
}
catch (Exception e) {
e.printStackTrace();
}*/
}
}

@Override
Expand All @@ -48,6 +48,7 @@ public List<TradeOffer> getTradeOffers() {
public void setTradeOffers(List<TradeOffer> tradeOffers) {
try {
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
serializer.a("MC|TrList");
serializer.writeInt(container);
serializer.writeByte((byte)(tradeOffers.size() & 255));
for (TradeOffer tradeOffer : tradeOffers) {
Expand Down
@@ -1,5 +1,6 @@
package net.aufdemrand.denizen.nms.impl.packets.handlers;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
Expand All @@ -13,7 +14,6 @@
import net.aufdemrand.denizen.nms.impl.packets.PacketOutWindowItems_v1_9_R2;
import net.aufdemrand.denizen.nms.interfaces.packets.PacketHandler;
import net.aufdemrand.denizen.nms.interfaces.packets.PacketOutSpawnEntity;
import net.aufdemrand.denizen.nms.util.ReflectionHelper;
import net.minecraft.server.v1_9_R2.*;
import net.minecraft.server.v1_9_R2.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
import org.bukkit.Bukkit;
Expand Down Expand Up @@ -135,13 +135,21 @@ else if (packet instanceof PacketPlayOutWindowItems) {
}
}
else if (packet instanceof PacketPlayOutCustomPayload) {
String name = ReflectionHelper.getFieldValue(PacketPlayOutCustomPayload.class, "a", packet);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeList_v1_9_R2((PacketPlayOutCustomPayload) packet))) {
PacketPlayOutCustomPayload payload = (PacketPlayOutCustomPayload) packet;
PacketDataSerializer serializer = new PacketDataSerializer(Unpooled.buffer());
try {
payload.b(serializer);
String name = serializer.e(20);
if (name != null && name.equals("MC|TrList")) {
if (!packetHandler.sendPacket(player.getBukkitEntity(), new PacketOutTradeList_v1_9_R2(payload, serializer))) {
oldManager.sendPacket(packet);
}
}
else {
oldManager.sendPacket(packet);
}
}
else {
catch (Exception e) {
oldManager.sendPacket(packet);
}
}
Expand Down

0 comments on commit b2e4bd0

Please sign in to comment.