diff --git a/src/main/java/codechicken/nei/NEICPH.java b/src/main/java/codechicken/nei/NEICPH.java index 170cfa7b..285676c7 100644 --- a/src/main/java/codechicken/nei/NEICPH.java +++ b/src/main/java/codechicken/nei/NEICPH.java @@ -186,6 +186,12 @@ public class NEICPH implements IClientPacketHandler { packet.sendToServer(); } + public static void sendChatLink(ItemStack stackover) { + PacketCustom packet = new PacketCustom(channel, C2S.SEND_CHAT_ITEM_LINK); + packet.writeItemStack(stackover); + packet.sendToServer(); + } + public static void sendOpenEnchantmentWindow() { PacketCustom packet = new PacketCustom(channel, C2S.REQUEST_ENCHANTMENT_GUI); packet.sendToServer(); diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index ce65699e..f36d4bf7 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -769,6 +769,7 @@ public class NEIClientConfig { API.addKeyBind("world.creative", 0); API.addHashBind("gui.copy_name", Keyboard.KEY_C + NEIClientUtils.CTRL_HASH); API.addHashBind("gui.copy_oredict", Keyboard.KEY_D + NEIClientUtils.CTRL_HASH); + API.addHashBind("gui.chat_link_item", Keyboard.KEY_L + NEIClientUtils.CTRL_HASH); } public static OptionList getOptionList() { diff --git a/src/main/java/codechicken/nei/NEIClientUtils.java b/src/main/java/codechicken/nei/NEIClientUtils.java index 3edc4748..8e85cfac 100644 --- a/src/main/java/codechicken/nei/NEIClientUtils.java +++ b/src/main/java/codechicken/nei/NEIClientUtils.java @@ -370,6 +370,10 @@ public class NEIClientUtils extends NEIServerUtils { else sendCommand(getStringSetting("command.heal"), mc().thePlayer.getCommandSenderName()); } + public static void sendChatItemLink(ItemStack stackover) { + if (hasSMPCounterPart()) NEICPH.sendChatLink(stackover); + } + public static void toggleMagnetMode() { if (hasSMPCounterPart()) NEICPH.sendToggleMagnetMode(); } diff --git a/src/main/java/codechicken/nei/NEISPH.java b/src/main/java/codechicken/nei/NEISPH.java index 4b51d549..a5a7002d 100644 --- a/src/main/java/codechicken/nei/NEISPH.java +++ b/src/main/java/codechicken/nei/NEISPH.java @@ -88,9 +88,16 @@ public class NEISPH implements IServerPacketHandler { case C2S.SET_DUMMY_SLOT: handleDummySlotSet(sender, packet); break; + case C2S.SEND_CHAT_ITEM_LINK: + handleSendChatItemLink(sender, packet); + break; } } + private void handleSendChatItemLink(EntityPlayerMP sender, PacketCustom packet) { + NEIServerUtils.sendChatItemLink(sender, packet.readItemStack()); + } + private void handleDummySlotSet(EntityPlayerMP sender, PacketCustom packet) { int slotNumber = packet.readShort(); ItemStack stack = packet.readItemStack(true); diff --git a/src/main/java/codechicken/nei/NEIServerUtils.java b/src/main/java/codechicken/nei/NEIServerUtils.java index 68a4d19d..2655c207 100644 --- a/src/main/java/codechicken/nei/NEIServerUtils.java +++ b/src/main/java/codechicken/nei/NEIServerUtils.java @@ -82,6 +82,14 @@ public class NEIServerUtils { player.extinguish(); } + public static void sendChatItemLink(EntityPlayerMP sender, ItemStack stackover) { + ServerUtils.sendChatToAll( + new ChatComponentTranslation( + "nei.chat.item_link.text", + sender.getDisplayName(), + stackover.func_151000_E())); + } + public static long getTime(World world) { return world.getWorldInfo().getWorldTime(); } diff --git a/src/main/java/codechicken/nei/PacketIDs.java b/src/main/java/codechicken/nei/PacketIDs.java index 9ff2f291..5c9661d3 100644 --- a/src/main/java/codechicken/nei/PacketIDs.java +++ b/src/main/java/codechicken/nei/PacketIDs.java @@ -23,6 +23,7 @@ public final class PacketIDs { public static final int SET_CREATIVE_PLUS_MODE = 23; public static final int REQUEST_POTION_GUI = 24; public static final int SET_DUMMY_SLOT = 25; + public static final int SEND_CHAT_ITEM_LINK = 26; } public static final class S2C { diff --git a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java index 679dc6ef..a39d39b0 100644 --- a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java +++ b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java @@ -100,6 +100,10 @@ public abstract class ShortcutInputHandler { return copyItemStackOreDictionary(stackover); } + if (NEIClientConfig.isKeyHashDown("gui.chat_link_item")) { + return sendItemStackChatLink(stackover); + } + if (NEIClientConfig.isKeyHashDown("gui.recipe")) { return GuiCraftingRecipe.openRecipeGui("item", stackover); } @@ -148,6 +152,13 @@ public abstract class ShortcutInputHandler { return true; } + private static boolean sendItemStackChatLink(ItemStack stackover) { + if (stackover == null) return false; + + NEIClientUtils.sendChatItemLink(stackover); // I wish clients could just send formatted messages + return true; + } + private static boolean copyItemStackOreDictionary(ItemStack stackover) { StringBuilder builder = new StringBuilder(); @@ -408,6 +419,9 @@ public abstract class ShortcutInputHandler { hotkeys.put(NEIClientConfig.getKeyName("gui.copy_name"), NEIClientUtils.translate("itempanel.copy_name")); hotkeys.put(NEIClientConfig.getKeyName("gui.copy_oredict"), NEIClientUtils.translate("itempanel.copy_oredict")); + hotkeys.put( + NEIClientConfig.getKeyName("gui.chat_link_item"), + NEIClientUtils.translate("itempanel.chat_link_item")); if (!(gui instanceof GuiRecipe) && NEIClientConfig.canCheatItem(stack)) { hotkeys.put( diff --git a/src/main/resources/assets/nei/lang/en_US.lang b/src/main/resources/assets/nei/lang/en_US.lang index 71dacc30..117eb4ec 100644 --- a/src/main/resources/assets/nei/lang/en_US.lang +++ b/src/main/resources/assets/nei/lang/en_US.lang @@ -63,6 +63,7 @@ nei.itempanel.open_crafting=Recipe to make this item nei.itempanel.open_usage=Recipes that use this item nei.itempanel.copy_name=Copy Item Name nei.itempanel.copy_oredict=Copy Item OreDictionary +nei.itempanel.chat_link_item=Send item link to chat nei.enchant=Enchant nei.enchant.level=Level @@ -134,6 +135,7 @@ nei.chat.chunkoverlay.0=Chunk Overlay: Off nei.chat.chunkoverlay.1=Chunk Overlay: Chunk Corners nei.chat.chunkoverlay.2=Chunk Overlay: Chunks nei.chat.chunkoverlay.3=Chunk Overlay: GT Ore Veins +nei.chat.item_link.text=<%s> Check this out: %s nei.options=NEI Options nei.options.back=Back @@ -174,6 +176,7 @@ nei.options.keys.gui.next_tooltip=Next Tooltip nei.options.keys.gui.copy_name=Copy Item Name nei.options.keys.gui.craft_items=Craft Items nei.options.keys.gui.copy_oredict=Copy Item OreDictionary +nei.options.keys.gui.chat_link_item=Send item link to chat nei.options.keys.gui.itemzoom_toggle=Toggle Item Zoom nei.options.keys.gui.itemzoom_hold=Hold to Display Item Zoom nei.options.keys.gui.itemzoom_zoom_in=Item Zoom In diff --git a/src/main/resources/assets/nei/lang/ru_RU.lang b/src/main/resources/assets/nei/lang/ru_RU.lang index f4fc6366..97bd5ab1 100644 --- a/src/main/resources/assets/nei/lang/ru_RU.lang +++ b/src/main/resources/assets/nei/lang/ru_RU.lang @@ -31,6 +31,7 @@ nei.itempanel.deleteItem=Удалить предмет nei.itempanel.collapsed.button.tip=Свернуть/Развернуть все группы предметов nei.itempanel.collapsed.hint.expand=Развернуть группу (%d предметов) nei.itempanel.collapsed.hint.collapse=Свернуть группу (%d предметов) +nei.itempanel.chat_link_item=Отправить ссылку на предмет в чат nei.enchant=Зачаровать nei.enchant.level=Уровень @@ -100,6 +101,7 @@ nei.chat.chunkoverlay.0=Отображение чанков: Выключено nei.chat.chunkoverlay.1=Отображение чанков: Углы чанков nei.chat.chunkoverlay.2=Отображение чанков: Чанки nei.chat.chunkoverlay.3=Отображение чанков: Жилы руды GT +nei.chat.item_link.text=<%s> Взгляни на это: %s nei.options=Настройки NEI nei.options.back=Назад @@ -139,6 +141,7 @@ nei.options.keys.gui.getnextsearch=Следующий поиск nei.options.keys.gui.next_tooltip=Следующая подсказка nei.options.keys.gui.copy_name=Скопировать название предмета nei.options.keys.gui.copy_oredict=Скопировать OreDictionary предмета +nei.options.keys.gui.chat_link_item=Отправить ссылку на предмет в чат nei.options.keys.gui.itemzoom_toggle=Переключить увеличение предмета nei.options.keys.gui.itemzoom_hold=Удерживать для отображения увеличения предмета nei.options.keys.gui.itemzoom_zoom_in=Увеличить предмет