From 344e842764d03b520cbd42811bb77899de422e76 Mon Sep 17 00:00:00 2001 From: mezz Date: Sun, 14 Dec 2014 18:07:57 -0800 Subject: [PATCH] Fix some mail glitches. Check valid addresses for writing letters --- api | 2 +- .../core/proxy/ClientProxyNetwork.java | 6 ++++- src/main/java/forestry/mail/MailAddress.java | 23 ++++++++++--------- src/main/java/forestry/mail/PostRegistry.java | 16 +++++++++++++ .../forestry/mail/gadgets/MachineTrader.java | 1 - .../forestry/mail/gui/ContainerLetter.java | 21 ++++++++++++----- .../forestry/mail/gui/ContainerTradeName.java | 4 ++-- .../java/forestry/mail/gui/GuiLetter.java | 5 +++- 8 files changed, 55 insertions(+), 23 deletions(-) diff --git a/api b/api index d6d724bbd..c2f49cd4d 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit d6d724bbd787f432e08a38304ba6bac3cf5bf303 +Subproject commit c2f49cd4d292a7023d2310d81c24c54269b15d14 diff --git a/src/main/java/forestry/core/proxy/ClientProxyNetwork.java b/src/main/java/forestry/core/proxy/ClientProxyNetwork.java index b8c649194..b55ad8e65 100755 --- a/src/main/java/forestry/core/proxy/ClientProxyNetwork.java +++ b/src/main/java/forestry/core/proxy/ClientProxyNetwork.java @@ -10,12 +10,16 @@ ******************************************************************************/ package forestry.core.proxy; +import net.minecraft.client.network.NetHandlerPlayClient; + import forestry.core.network.ForestryPacket; public class ClientProxyNetwork extends ProxyNetwork { @Override public void sendToServer(ForestryPacket packet) { - Proxies.common.getClientInstance().getNetHandler().addToSendQueue(packet.getPacket()); + NetHandlerPlayClient netHandler = Proxies.common.getClientInstance().getNetHandler(); + if (netHandler != null) + netHandler.addToSendQueue(packet.getPacket()); } } diff --git a/src/main/java/forestry/mail/MailAddress.java b/src/main/java/forestry/mail/MailAddress.java index d5ea3a8fd..1f2e65e87 100644 --- a/src/main/java/forestry/mail/MailAddress.java +++ b/src/main/java/forestry/mail/MailAddress.java @@ -10,23 +10,24 @@ ******************************************************************************/ package forestry.mail; -import com.mojang.authlib.GameProfile; -import forestry.api.core.INBTTagable; -import forestry.api.mail.EnumAddressee; -import forestry.api.mail.IMailAddress; -import forestry.core.network.EntityNetData; -import forestry.core.utils.PlayerUtil; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTUtil; - import java.util.Locale; import java.util.UUID; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTUtil; + +import com.mojang.authlib.GameProfile; + +import forestry.api.core.INBTTagable; +import forestry.api.mail.EnumAddressee; +import forestry.api.mail.IMailAddress; +import forestry.core.network.PacketPayload; +import forestry.core.utils.PlayerUtil; + public class MailAddress implements INBTTagable, IMailAddress { private static final GameProfile invalidGameProfile = new GameProfile(new UUID(0, 0), ""); - @EntityNetData + private EnumAddressee type; - @EntityNetData private GameProfile gameProfile; // gameProfile is a fake GameProfile for traders, and real for players public MailAddress() { diff --git a/src/main/java/forestry/mail/PostRegistry.java b/src/main/java/forestry/mail/PostRegistry.java index 507f78daf..6199ce05d 100755 --- a/src/main/java/forestry/mail/PostRegistry.java +++ b/src/main/java/forestry/mail/PostRegistry.java @@ -16,6 +16,7 @@ import java.util.Map; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import com.mojang.authlib.GameProfile; @@ -163,11 +164,26 @@ public class PostRegistry implements IPostRegistry { return new MailAddress(gameProfile); } + public IMailAddress getValidMailAddress(World world, GameProfile gameProfile) { + IMailAddress address = new MailAddress(gameProfile);; + if (getPOBox(world, address) != null) + return address; + return null; + } + @Override public IMailAddress getMailAddress(String traderName) { return new MailAddress(traderName); } + @Override + public IMailAddress getValidMailAddress(World world, String traderName) { + IMailAddress address = new MailAddress(traderName); + if (getTradeStation(world, address) != null) + return address; + return null; + } + /* CARRIER */ private final HashMap carriers = new HashMap(); diff --git a/src/main/java/forestry/mail/gadgets/MachineTrader.java b/src/main/java/forestry/mail/gadgets/MachineTrader.java index 224a2d780..fa0790c47 100755 --- a/src/main/java/forestry/mail/gadgets/MachineTrader.java +++ b/src/main/java/forestry/mail/gadgets/MachineTrader.java @@ -41,7 +41,6 @@ import java.util.LinkedList; public class MachineTrader extends TileBase implements ISidedInventory { - @EntityNetData private MailAddress address; public MachineTrader() { diff --git a/src/main/java/forestry/mail/gui/ContainerLetter.java b/src/main/java/forestry/mail/gui/ContainerLetter.java index 679ce4f37..16252c599 100755 --- a/src/main/java/forestry/mail/gui/ContainerLetter.java +++ b/src/main/java/forestry/mail/gui/ContainerLetter.java @@ -156,14 +156,14 @@ public class ContainerLetter extends ContainerItemInventory { String typeName = packet.payload.stringPayload[1]; EnumAddressee type = EnumAddressee.fromString(typeName); - IMailAddress recipient; + IMailAddress recipient = null; if (type == EnumAddressee.PLAYER) { GameProfile gameProfile = MinecraftServer.getServer().func_152358_ax().func_152655_a(recipientName); if (gameProfile == null) gameProfile = new GameProfile(new UUID(0, 0), recipientName); - recipient = PostManager.postRegistry.getMailAddress(gameProfile); + recipient = PostManager.postRegistry.getValidMailAddress(player.worldObj, gameProfile); } else if (type == EnumAddressee.TRADER) { - recipient = PostManager.postRegistry.getMailAddress(recipientName); + recipient = PostManager.postRegistry.getValidMailAddress(player.worldObj, recipientName); } else { return; } @@ -171,7 +171,8 @@ public class ContainerLetter extends ContainerItemInventory { getLetter().setRecipient(recipient); // Update the trading info - updateTradeInfo(player.worldObj, recipient); + if (recipient == null || recipient.isTrader()) + updateTradeInfo(player.worldObj, recipient); // Update info on client Proxies.net.sendToPlayer(new PacketLetterInfo(PacketIds.LETTER_INFO, type, tradeInfo, recipient), player); @@ -210,12 +211,16 @@ public class ContainerLetter extends ContainerItemInventory { if (!Proxies.common.isSimulating(world)) return; - if (address.isPlayer()) + if (address == null) { + setTradeInfo(null); return; + } ITradeStation station = PostManager.postRegistry.getTradeStation(world, address); - if (station == null) + if (station == null) { + setTradeInfo(null); return; + } setTradeInfo(station.getTradeInfo()); } @@ -235,5 +240,9 @@ public class ContainerLetter extends ContainerItemInventory { private void setTradeInfo(TradeStationInfo info) { this.tradeInfo = info; + if (tradeInfo == null) + getLetter().setRecipient(null); + else + getLetter().setRecipient(tradeInfo.address); } } diff --git a/src/main/java/forestry/mail/gui/ContainerTradeName.java b/src/main/java/forestry/mail/gui/ContainerTradeName.java index b97913f2e..8dd4a5e57 100755 --- a/src/main/java/forestry/mail/gui/ContainerTradeName.java +++ b/src/main/java/forestry/mail/gui/ContainerTradeName.java @@ -51,13 +51,13 @@ public class ContainerTradeName extends ContainerForestry { PacketUpdate packet = new PacketUpdate(PacketIds.TRADING_ADDRESS_SET, payload); Proxies.net.sendToServer(packet); - IMailAddress address = PostManager.postRegistry.getMailAddress(addressName); + IMailAddress address = PostManager.postRegistry.getValidMailAddress(machine.getWorld(), addressName); machine.setAddress(address); } public void handleSetAddress(PacketUpdate packet) { String addressName = packet.payload.stringPayload[0]; - IMailAddress address = PostManager.postRegistry.getMailAddress(addressName); + IMailAddress address = PostManager.postRegistry.getValidMailAddress(machine.getWorld(), addressName); machine.setAddress(address); } diff --git a/src/main/java/forestry/mail/gui/GuiLetter.java b/src/main/java/forestry/mail/gui/GuiLetter.java index 25fd670d9..f5af7a737 100755 --- a/src/main/java/forestry/mail/gui/GuiLetter.java +++ b/src/main/java/forestry/mail/gui/GuiLetter.java @@ -154,6 +154,9 @@ public class GuiLetter extends GuiForestry { if(!isProcessedLetter && !checkedSessionVars) { checkedSessionVars = true; setFromSessionVars(); + String recipient = this.address.getText(); + EnumAddressee recipientType = container.getCarrierType(); + setRecipient(recipient, recipientType); } // Check for focus changes @@ -247,7 +250,7 @@ public class GuiLetter extends GuiForestry { address.setText(recipient); EnumAddressee type = EnumAddressee.fromString(typeName); - setRecipient(recipient, type); + container.setCarrierType(type); } SessionVars.clearStringVar("mail.letter.recipient");