Files
NotEnoughItems/src/main/java/codechicken/nei/NEISPH.java
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

250 lines
11 KiB
Java
Raw Normal View History

2014-04-29 10:54:20 +10:00
package codechicken.nei;
2023-09-25 00:35:24 +02:00
import static codechicken.nei.PacketIDs.C2S;
import static codechicken.nei.PacketIDs.S2C;
import java.util.LinkedList;
import java.util.Set;
2014-04-29 10:54:20 +10:00
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.INetHandlerPlayServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.world.World;
2023-09-25 00:35:24 +02:00
import codechicken.core.CommonUtils;
import codechicken.core.ServerUtils;
import codechicken.lib.inventory.SlotDummy;
import codechicken.lib.packet.PacketCustom;
import codechicken.lib.packet.PacketCustom.IServerPacketHandler;
import codechicken.lib.vec.BlockCoord;
import cpw.mods.fml.relauncher.Side;
public class NEISPH implements IServerPacketHandler {
2014-04-29 10:54:20 +10:00
@Override
public void handlePacket(PacketCustom packet, EntityPlayerMP sender, INetHandlerPlayServer netHandler) {
if (!NEIServerConfig.authenticatePacket(sender, packet)) return;
2014-04-29 10:54:20 +10:00
switch (packet.getType()) {
2023-09-06 18:05:15 +09:00
case C2S.GIVE_ITEM:
2014-04-29 10:54:20 +10:00
handleGiveItem(sender, packet);
break;
2023-09-06 18:05:15 +09:00
case C2S.DELETE_ALL_ITEMS:
2014-04-29 10:54:20 +10:00
NEIServerUtils.deleteAllItems(sender);
break;
2023-09-06 18:05:15 +09:00
case C2S.SET_SLOT:
2014-04-29 10:54:20 +10:00
setInventorySlot(sender, packet);
break;
2023-09-06 18:05:15 +09:00
case C2S.TOGGLE_MAGNET:
2014-04-29 10:54:20 +10:00
NEIServerUtils.toggleMagnetMode(sender);
break;
2023-09-06 18:05:15 +09:00
case C2S.SET_TIME:
2014-04-29 10:54:20 +10:00
NEIServerUtils.setHourForward(sender.worldObj, packet.readUByte(), true);
break;
2023-09-06 18:05:15 +09:00
case C2S.HEAL:
2014-04-29 10:54:20 +10:00
NEIServerUtils.healPlayer(sender);
break;
2023-09-06 18:05:15 +09:00
case C2S.TOGGLE_RAIN:
2014-04-29 10:54:20 +10:00
NEIServerUtils.toggleRaining(sender.worldObj, true);
break;
2023-09-06 18:05:15 +09:00
case C2S.REQUEST_LOGIN_INFO:
2014-04-29 10:54:20 +10:00
sendLoginState(sender);
break;
2023-09-06 18:05:15 +09:00
case C2S.REQUEST_CONTAINER_CONTENTS:
2014-04-29 10:54:20 +10:00
sender.sendContainerAndContentsToPlayer(sender.openContainer, sender.openContainer.getInventory());
break;
2023-09-06 18:05:15 +09:00
case C2S.CHANGE_PROPERTY:
2014-04-29 10:54:20 +10:00
handlePropertyChange(sender, packet);
break;
2023-09-06 18:05:15 +09:00
case C2S.SET_GAME_MODE:
2014-04-29 10:54:20 +10:00
NEIServerUtils.setGamemode(sender, packet.readUByte());
break;
2023-09-06 18:05:15 +09:00
case C2S.CYCLE_CREATIVE_INV:
2014-04-29 10:54:20 +10:00
NEIServerUtils.cycleCreativeInv(sender, packet.readInt());
break;
2023-09-06 18:05:15 +09:00
case C2S.SEND_MOB_SPAWNER_ID:
2014-04-29 10:54:20 +10:00
handleMobSpawnerID(sender.worldObj, packet.readCoord(), packet.readString());
break;
2023-09-06 18:05:15 +09:00
case C2S.REQUEST_CONTAINER:
handleRequestContainer(sender, packet.readInt());
break;
2023-09-06 18:05:15 +09:00
case C2S.REQUEST_ENCHANTMENT_GUI:
2014-04-29 10:54:20 +10:00
openEnchantmentGui(sender);
break;
2023-09-06 18:05:15 +09:00
case C2S.MODIFY_ENCHANTMENT:
2014-04-29 10:54:20 +10:00
modifyEnchantment(sender, packet.readUByte(), packet.readUByte(), packet.readBoolean());
break;
2023-09-06 18:05:15 +09:00
case C2S.SET_CREATIVE_PLUS_MODE:
2014-04-29 10:54:20 +10:00
processCreativeInv(sender, packet.readBoolean());
break;
2023-09-06 18:05:15 +09:00
case C2S.REQUEST_POTION_GUI:
2014-04-29 10:54:20 +10:00
openPotionGui(sender, packet);
break;
2023-09-06 18:05:15 +09:00
case C2S.SET_DUMMY_SLOT:
2014-04-29 10:54:20 +10:00
handleDummySlotSet(sender, packet);
break;
}
}
private void handleDummySlotSet(EntityPlayerMP sender, PacketCustom packet) {
int slotNumber = packet.readShort();
ItemStack stack = packet.readItemStack(true);
Slot slot = sender.openContainer.getSlot(slotNumber);
if (slot instanceof SlotDummy) slot.putStack(stack);
2014-04-29 10:54:20 +10:00
}
private void handleMobSpawnerID(World world, BlockCoord coord, String mobtype) {
TileEntity tile = world.getTileEntity(coord.x, coord.y, coord.z);
if (tile instanceof TileEntityMobSpawner) {
((TileEntityMobSpawner) tile).func_145881_a().setEntityName(mobtype);
tile.markDirty();
world.markBlockForUpdate(coord.x, coord.y, coord.z);
}
}
private void handleRequestContainer(EntityPlayerMP sender, int containerSize) {
if (sender.openContainer.getInventory().size() != containerSize) return;
sender.sendContainerToPlayer(sender.openContainer);
}
2014-04-29 10:54:20 +10:00
private void handlePropertyChange(EntityPlayerMP sender, PacketCustom packet) {
String name = packet.readString();
if (NEIServerConfig.canPlayerPerformAction(sender.getCommandSenderName(), name))
NEIServerConfig.disableAction(sender.dimension, name, packet.readBoolean());
}
public static void processCreativeInv(EntityPlayerMP sender, boolean open) {
2014-04-29 10:54:20 +10:00
if (open) {
ServerUtils.openSMPContainer(
sender,
new ContainerCreativeInv(
sender,
new ExtendedCreativeInv(
NEIServerConfig.forPlayer(sender.getCommandSenderName()),
Side.SERVER)),
(player, windowId) -> {
2023-09-06 18:05:15 +09:00
PacketCustom packet = new PacketCustom(channel, S2C.SET_CREATIVE_PLUS_MODE);
packet.writeBoolean(true);
packet.writeByte(windowId);
packet.sendToPlayer(player);
});
2014-04-29 10:54:20 +10:00
} else {
sender.closeContainer();
2023-09-06 18:05:15 +09:00
PacketCustom packet = new PacketCustom(channel, S2C.SET_CREATIVE_PLUS_MODE);
2014-04-29 10:54:20 +10:00
packet.writeBoolean(false);
packet.sendToPlayer(sender);
}
}
private void handleGiveItem(EntityPlayerMP player, PacketCustom packet) {
NEIServerUtils.givePlayerItem(player, packet.readItemStack(true), packet.readBoolean(), packet.readBoolean());
}
private void setInventorySlot(EntityPlayerMP player, PacketCustom packet) {
boolean container = packet.readBoolean();
int slot = packet.readShort();
ItemStack item = packet.readItemStack();
ItemStack old = NEIServerUtils.getSlotContents(player, slot, container);
boolean deleting = item == null
|| old != null && NEIServerUtils.areStacksSameType(item, old) && item.stackSize < old.stackSize;
2014-04-29 10:54:20 +10:00
if (NEIServerConfig.canPlayerPerformAction(player.getCommandSenderName(), deleting ? "delete" : "item"))
NEIServerUtils.setSlotContents(player, slot, item, container);
}
private void modifyEnchantment(EntityPlayerMP player, int e, int lvl, boolean add) {
ContainerEnchantmentModifier containerem = (ContainerEnchantmentModifier) player.openContainer;
if (add) {
containerem.addEnchantment(e, lvl);
} else {
containerem.removeEnchantment(e);
}
}
private void openEnchantmentGui(EntityPlayerMP player) {
ServerUtils.openSMPContainer(
player,
new ContainerEnchantmentModifier(player.inventory, player.worldObj, 0, 0, 0),
(player1, windowId) -> {
2023-09-06 18:05:15 +09:00
PacketCustom packet = new PacketCustom(channel, S2C.OPEN_ENCHANTMENT_GUI);
packet.writeByte(windowId);
packet.sendToPlayer(player1);
});
2014-04-29 10:54:20 +10:00
}
private void openPotionGui(EntityPlayerMP player, PacketCustom packet) {
InventoryBasic b = new InventoryBasic("potionStore", true, 9);
for (int i = 0; i < b.getSizeInventory(); i++) b.setInventorySlotContents(i, packet.readItemStack());
2019-12-30 20:19:16 -08:00
ServerUtils.openSMPContainer(player, new ContainerPotionCreator(player.inventory, b), (player1, windowId) -> {
2023-09-06 18:05:15 +09:00
PacketCustom packet1 = new PacketCustom(channel, S2C.OPEN_POTION_GUI);
2019-12-30 20:19:16 -08:00
packet1.writeByte(windowId);
packet1.sendToPlayer(player1);
2014-04-29 10:54:20 +10:00
});
}
public static void sendActionDisabled(int dim, String name, boolean disable) {
2023-09-06 18:05:15 +09:00
new PacketCustom(channel, S2C.SEND_ACTION_DISABLED).writeString(name).writeBoolean(disable)
.sendToDimension(dim);
2014-04-29 10:54:20 +10:00
}
public static void sendActionEnabled(EntityPlayerMP player, String name, boolean enable) {
2023-09-06 18:05:15 +09:00
new PacketCustom(channel, S2C.SEND_ACTION_ENABLED).writeString(name).writeBoolean(enable).sendToPlayer(player);
2014-04-29 10:54:20 +10:00
}
private void sendLoginState(EntityPlayerMP player) {
2019-12-30 20:19:16 -08:00
LinkedList<String> actions = new LinkedList<>();
LinkedList<String> disabled = new LinkedList<>();
LinkedList<String> enabled = new LinkedList<>();
LinkedList<ItemStack> bannedItems = new LinkedList<>();
2014-04-29 10:54:20 +10:00
PlayerSave playerSave = NEIServerConfig.forPlayer(player.getCommandSenderName());
for (String name : NEIActions.nameActionMap.keySet()) {
if (NEIServerConfig.canPlayerPerformAction(player.getCommandSenderName(), name)) actions.add(name);
if (NEIServerConfig.isActionDisabled(player.dimension, name)) disabled.add(name);
if (playerSave.isActionEnabled(name)) enabled.add(name);
2014-04-29 10:54:20 +10:00
}
for (ItemStackMap.Entry<Set<String>> entry : NEIServerConfig.bannedItems.entries())
if (!NEIServerConfig.isPlayerInList(player.getCommandSenderName(), entry.value, true))
bannedItems.add(entry.key);
2023-09-06 18:05:15 +09:00
PacketCustom packet = new PacketCustom(channel, S2C.SEND_LOGIN_STATE);
2014-04-29 10:54:20 +10:00
packet.writeByte(actions.size());
for (String s : actions) packet.writeString(s);
2014-04-29 10:54:20 +10:00
packet.writeByte(disabled.size());
for (String s : disabled) packet.writeString(s);
2014-04-29 10:54:20 +10:00
packet.writeByte(enabled.size());
for (String s : enabled) packet.writeString(s);
2014-04-29 10:54:20 +10:00
packet.writeInt(bannedItems.size());
for (ItemStack stack : bannedItems) packet.writeItemStack(stack);
2014-04-29 10:54:20 +10:00
packet.sendToPlayer(player);
}
public static void sendHasServerSideTo(EntityPlayerMP player) {
NEIServerConfig.logger.debug("Sending serverside check to: " + player.getCommandSenderName());
2023-09-06 18:05:15 +09:00
PacketCustom packet = new PacketCustom(channel, S2C.SEND_SERVER_SIDE_CHECK);
2014-04-29 10:54:20 +10:00
packet.writeByte(NEIActions.protocol);
packet.writeString(CommonUtils.getWorldName(player.worldObj));
packet.sendToPlayer(player);
}
public static void sendAddMagneticItemTo(EntityPlayerMP player, EntityItem item) {
2023-09-06 18:05:15 +09:00
PacketCustom packet = new PacketCustom(channel, S2C.SEND_MAGNETIC_ITEM);
2014-04-29 10:54:20 +10:00
packet.writeInt(item.getEntityId());
packet.sendToPlayer(player);
}
public static final String channel = "NEI";
}