Skip to content

Commit

Permalink
Fix #177 Fix #277 Use custom give command when installed on the server
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Jun 2, 2016
1 parent 93dbb81 commit 237d865
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 98 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Expand Up @@ -5,4 +5,4 @@ curse_project_id=238222

version_major=3
version_minor=4
version_patch=2
version_patch=3
4 changes: 2 additions & 2 deletions src/main/java/mezz/jei/network/PacketHandler.java
Expand Up @@ -15,7 +15,7 @@
import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;

import mezz.jei.network.packets.PacketDeletePlayerItem;
import mezz.jei.network.packets.PacketGiveItemMessageBig;
import mezz.jei.network.packets.PacketGiveItemStack;
import mezz.jei.network.packets.PacketJEI;
import mezz.jei.network.packets.PacketRecipeTransfer;
import mezz.jei.util.Log;
Expand Down Expand Up @@ -49,7 +49,7 @@ public void onPacket(FMLNetworkEvent.ServerCustomPacketEvent event) {
break;
}
case GIVE_BIG: {
packet = new PacketGiveItemMessageBig();
packet = new PacketGiveItemStack();
break;
}
default: {
Expand Down

This file was deleted.

81 changes: 81 additions & 0 deletions src/main/java/mezz/jei/network/packets/PacketGiveItemStack.java
@@ -0,0 +1,81 @@
package mezz.jei.network.packets;

import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.Map;

import mezz.jei.network.IPacketId;
import mezz.jei.network.PacketIdServer;
import net.minecraft.command.CommandGive;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandManager;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.server.FMLServerHandler;

public class PacketGiveItemStack extends PacketJEI {
private ItemStack itemStack;

public PacketGiveItemStack() {

}

public PacketGiveItemStack(@Nonnull ItemStack itemStack) {
this.itemStack = itemStack;
}

@Override
public IPacketId getPacketId() {
return PacketIdServer.GIVE_BIG;
}

@Override
public void writePacketData(PacketBuffer buf) throws IOException {
buf.writeItemStackToBuffer(itemStack);
}

@Override
public void readPacketData(PacketBuffer buf, EntityPlayer player) throws IOException {
if (player instanceof EntityPlayerMP) {
EntityPlayerMP sender = (EntityPlayerMP) player;

MinecraftServer minecraftServer = sender.mcServer;
ICommandManager commandManager = minecraftServer.getCommandManager();
Map<String, ICommand> commands = commandManager.getCommands();
ICommand giveCommand = commands.get("give");
if (giveCommand != null && giveCommand.checkPermission(minecraftServer, sender)) {
ItemStack itemStack = buf.readItemStackFromBuffer();
executeGive(sender, itemStack);
} else {
TextComponentTranslation textcomponenttranslation1 = new TextComponentTranslation("commands.generic.permission");
textcomponenttranslation1.getStyle().setColor(TextFormatting.RED);
sender.addChatMessage(textcomponenttranslation1);
}
}
}

public void executeGive(EntityPlayer entityplayer, ItemStack itemStack) {
boolean addedToInventory = entityplayer.inventory.addItemStackToInventory(itemStack);

if (addedToInventory) {
entityplayer.worldObj.playSound(null, entityplayer.posX, entityplayer.posY, entityplayer.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, ((entityplayer.getRNG().nextFloat() - entityplayer.getRNG().nextFloat()) * 0.7F + 1.0F) * 2.0F);
entityplayer.inventoryContainer.detectAndSendChanges();
}

if (!addedToInventory || itemStack.stackSize > 0) {
EntityItem entityitem = entityplayer.dropItem(itemStack, false);
if (entityitem != null) {
entityitem.setNoPickupDelay();
entityitem.setOwner(entityplayer.getName());
}
}
}
}
47 changes: 29 additions & 18 deletions src/main/java/mezz/jei/util/Commands.java
@@ -1,22 +1,23 @@
package mezz.jei.util;

import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;

import mezz.jei.JustEnoughItems;
import mezz.jei.config.SessionData;
import mezz.jei.network.packets.PacketGiveItemMessageBig;
import mezz.jei.network.packets.PacketGiveItemStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting;
import org.apache.commons.lang3.StringUtils;

import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;

public class Commands {

public static void giveFullStack(@Nonnull ItemStack itemstack) {
Expand All @@ -31,6 +32,20 @@ public static void giveOneFromStack(@Nonnull ItemStack itemstack) {
* /give <player> <item> [amount] [data] [dataTag]
*/
public static void giveStack(@Nonnull ItemStack itemStack, int amount) {
if (SessionData.isJeiOnServer()) {
ItemStack sendStack = itemStack.copy();
sendStack.stackSize = amount;
PacketGiveItemStack packet = new PacketGiveItemStack(sendStack);
JustEnoughItems.getProxy().sendPacketToServer(packet);
} else {
giveStackVanilla(itemStack, amount);
}
}

/**
* Fallback for when JEI is not on the server, tries to use the /give command.
*/
private static void giveStackVanilla(@Nonnull ItemStack itemStack, int amount) {
EntityPlayerSP sender = Minecraft.getMinecraft().thePlayer;
String senderName = sender.getName();

Expand All @@ -41,8 +56,9 @@ public static void giveStack(@Nonnull ItemStack itemStack, int amount) {
commandStrings.add(String.valueOf(amount));
commandStrings.add(String.valueOf(itemStack.getMetadata()));

if (itemStack.hasTagCompound()) {
commandStrings.add(itemStack.getTagCompound().toString());
NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound != null) {
commandStrings.add(tagCompound.toString());
}

String fullCommand = StringUtils.join(commandStrings, " ");
Expand All @@ -53,18 +69,13 @@ private static void sendChatMessage(EntityPlayerSP sender, String chatMessage) {
if (chatMessage.length() <= 100) {
sender.sendChatMessage(chatMessage);
} else {
if (SessionData.isJeiOnServer()) {
PacketGiveItemMessageBig packet = new PacketGiveItemMessageBig(chatMessage);
JustEnoughItems.getProxy().sendPacketToServer(packet);
} else {
ITextComponent errorMessage = new TextComponentTranslation("jei.chat.error.command.too.long");
errorMessage.getStyle().setColor(TextFormatting.RED);
sender.addChatComponentMessage(errorMessage);
ITextComponent errorMessage = new TextComponentTranslation("jei.chat.error.command.too.long");
errorMessage.getStyle().setColor(TextFormatting.RED);
sender.addChatComponentMessage(errorMessage);

ITextComponent chatMessageComponent = new TextComponentString(chatMessage);
chatMessageComponent.getStyle().setColor(TextFormatting.RED);
sender.addChatComponentMessage(chatMessageComponent);
}
ITextComponent chatMessageComponent = new TextComponentString(chatMessage);
chatMessageComponent.getStyle().setColor(TextFormatting.RED);
sender.addChatComponentMessage(chatMessageComponent);
}
}
}

0 comments on commit 237d865

Please sign in to comment.