Files
CustomNPC-Plus/src/main/java/noppes/npcs/PacketHandlerPlayer.java
T

327 lines
13 KiB
Java
Raw Normal View History

2018-09-13 12:03:28 -04:00
package noppes.npcs;
2023-01-12 21:33:06 -05:00
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent;
2018-09-13 12:03:28 -04:00
import io.netty.buffer.ByteBuf;
import kamkeel.npcs.network.packets.data.large.GuiDataPacket;
2025-01-30 12:44:39 -05:00
import kamkeel.npcs.util.ByteBufUtils;
2018-09-13 12:03:28 -04:00
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.ItemEditableBook;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemWritableBook;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.network.NetHandlerPlayServer;
import net.minecraft.tileentity.TileEntity;
import noppes.npcs.blocks.tiles.TileBigSign;
import noppes.npcs.blocks.tiles.TileBook;
import noppes.npcs.constants.*;
2018-09-13 12:03:28 -04:00
import noppes.npcs.containers.ContainerMail;
2024-03-03 20:19:08 -05:00
import noppes.npcs.controllers.PartyController;
2023-01-12 21:33:06 -05:00
import noppes.npcs.controllers.PlayerDataController;
import noppes.npcs.controllers.PlayerQuestController;
import noppes.npcs.controllers.ScriptController;
import noppes.npcs.controllers.data.*;
2018-09-13 12:03:28 -04:00
import noppes.npcs.entity.EntityNPCInterface;
import noppes.npcs.roles.RoleCompanion;
2023-01-12 21:33:06 -05:00
import java.io.IOException;
import java.util.Iterator;
2018-09-13 12:03:28 -04:00
public class PacketHandlerPlayer{
2024-02-21 03:02:39 -05:00
2018-09-13 12:03:28 -04:00
@SubscribeEvent
public void onServerPacket(ServerCustomPacketEvent event) {
EntityPlayerMP player = ((NetHandlerPlayServer)event.handler).playerEntity;
ByteBuf buffer = event.packet.payload();
try {
player(buffer, player, EnumPlayerPacket.values()[buffer.readInt()]);
} catch (IOException e) {
LogWriter.except(e);
}
}
private void player(ByteBuf buffer, EntityPlayerMP player, EnumPlayerPacket type) throws IOException {
if(type == EnumPlayerPacket.CompanionTalentExp){
2018-09-13 12:03:28 -04:00
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
if(npc == null || npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner())
return;
int id = buffer.readInt();
int exp = buffer.readInt();
RoleCompanion role = (RoleCompanion) npc.roleInterface;
if(exp <= 0 || !role.canAddExp(-exp) || id < 0 || id >= EnumCompanionTalent.values().length) //should never happen unless hacking
return;
EnumCompanionTalent talent = EnumCompanionTalent.values()[id];
role.addExp(-exp);
role.addTalentExp(talent, exp);
}
else if(type == EnumPlayerPacket.CompanionOpenInv){
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
if(npc == null || npc.advanced.role != EnumRoleType.Companion || player != npc.getOwner())
return;
NoppesUtilServer.sendOpenGui(player, EnumGuiType.CompanionInv, npc);
}
2025-02-03 01:32:49 +01:00
// else if(type == EnumPlayerPacket.KeyPressed) {
// if(ScriptController.Instance.languages.isEmpty()) {
// return;
// }
//
// int button = buffer.readInt();
// boolean isCtrlPressed = buffer.readBoolean();
// boolean isShiftPressed = buffer.readBoolean();
// boolean isAltPressed = buffer.readBoolean();
// boolean isMetaPressed = buffer.readBoolean();
// boolean buttonDown = buffer.readBoolean();
//
// String ints = ByteBufUtils.readString(buffer);
// String[] split = ints.split(",");
// int[] keysDown;
//
// if(ints.length() > 0) {
// keysDown = new int[split.length];
// try {
// for (int i = 0; i < split.length; i++) {
// keysDown[i] = Integer.parseInt(split[i]);
// }
// }
// catch (NumberFormatException ignored){
// }
// } else {
// keysDown = new int[0];
// }
//
// EventHooks.onPlayerKeyPressed(player, button, isCtrlPressed, isShiftPressed, isAltPressed, isMetaPressed, buttonDown, keysDown);
// }
// else if(type == EnumPlayerPacket.MouseClicked) {
// if(ScriptController.Instance.languages.isEmpty()) {
// return;
// }
//
// int button = buffer.readInt();
// int mouseWheel = buffer.readInt();
// boolean buttonDown = buffer.readBoolean();
//
// boolean isCtrlPressed = buffer.readBoolean();
// boolean isShiftPressed = buffer.readBoolean();
// boolean isAltPressed = buffer.readBoolean();
// boolean isMetaPressed = buffer.readBoolean();
//
// String ints = ByteBufUtils.readString(buffer);
// String[] split = ints.split(",");
// int[] keysDown;
//
// if(ints.length() > 0) {
// keysDown = new int[split.length];
// try {
// for (int i = 0; i < split.length; i++) {
// keysDown[i] = Integer.parseInt(split[i]);
// }
// }
// catch (NumberFormatException ignored){
// }
// } else {
// keysDown = new int[0];
// }
//
// EventHooks.onPlayerMouseClicked(player, button, mouseWheel, buttonDown, isCtrlPressed, isShiftPressed, isAltPressed, isMetaPressed, keysDown);
// }
2025-02-02 22:21:29 +01:00
// else if(type == EnumPlayerPacket.FollowerHire){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Follower)
// return;
// NoppesUtilPlayer.hireFollower(player, npc);
// }
// else if(type == EnumPlayerPacket.FollowerExtend){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Follower)
// return;
// NoppesUtilPlayer.extendFollower(player, npc);
// GuiDataPacket.sendGuiData(player, npc.roleInterface.writeToNBT(new NBTTagCompound()));
// }
// else if(type == EnumPlayerPacket.FollowerState){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Follower)
// return;
// NoppesUtilPlayer.changeFollowerState(player,npc);
// GuiDataPacket.sendGuiData(player, npc.roleInterface.writeToNBT(new NBTTagCompound()));
// }
2018-09-13 12:03:28 -04:00
else if(type == EnumPlayerPacket.RoleGet){
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
if(npc == null || npc.advanced.role == EnumRoleType.None)
return;
GuiDataPacket.sendGuiData(player, npc.roleInterface.writeToNBT(new NBTTagCompound()));
2018-09-13 12:03:28 -04:00
}
2025-02-02 23:19:29 +01:00
// else if(type == EnumPlayerPacket.Transport){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Transporter)
// return;
// NoppesUtilPlayer.transport(player, npc, ByteBufUtils.readString(buffer));
// }
2025-02-02 22:57:46 +01:00
// else if(type == EnumPlayerPacket.BankUpgrade){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Bank)
// return;
// NoppesUtilPlayer.bankUpgrade(player, npc);
// }
// else if(type == EnumPlayerPacket.BankUnlock){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Bank)
// return;
// NoppesUtilPlayer.bankUnlock(player, npc);
// }
// else if(type == EnumPlayerPacket.BankSlotOpen){
// EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
// if(npc == null || npc.advanced.role != EnumRoleType.Bank)
// return;
// int slot = buffer.readInt();
// int bankId = buffer.readInt();
// BankData data = PlayerDataController.Instance.getBankData(player,bankId).getBankOrDefault(bankId);
// data.openBankGui(player, npc, bankId, slot);
// }
2018-09-13 12:03:28 -04:00
else if(type == EnumPlayerPacket.Dialog){
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
if(npc == null)
return;
2021-10-11 07:16:10 -05:00
NoppesUtilPlayer.dialogSelected(buffer.readInt(), buffer.readInt(), player, npc);
2018-09-13 12:03:28 -04:00
}
else if(type == EnumPlayerPacket.CheckQuestCompletion){
2023-06-05 19:35:06 -04:00
PlayerData playerData = PlayerDataController.Instance.getPlayerData(player);
PlayerQuestData questData = PlayerDataController.Instance.getPlayerData(player).questData;
2024-03-03 20:19:08 -05:00
Party playerParty = playerData.getPlayerParty();
if(playerParty != null)
PartyController.Instance().checkQuestCompletion(playerParty, null);
questData.checkQuestCompletion(playerData, null);
2018-09-13 12:03:28 -04:00
}
else if(type == EnumPlayerPacket.QuestLog){
NoppesUtilPlayer.sendQuestLogData(player);
}
2024-03-15 15:43:29 -04:00
else if(type == EnumPlayerPacket.TrackedQuest){
NoppesUtilPlayer.sendTrackedQuest(player);
}
2018-09-13 12:03:28 -04:00
else if(type == EnumPlayerPacket.FactionsGet){
2023-06-05 19:35:06 -04:00
PlayerFactionData data = PlayerDataController.Instance.getPlayerData(player).factionData;
GuiDataPacket.sendGuiData(player, data.getPlayerGuiData());
2018-09-13 12:03:28 -04:00
}
2025-02-03 03:31:04 +01:00
// else if(type == EnumPlayerPacket.MailGet){
// PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
// GuiDataPacket.sendGuiData(player, data.saveNBTData(new NBTTagCompound()));
// }
// else if(type == EnumPlayerPacket.MailDelete){
// long time = buffer.readLong();
// String username = ByteBufUtils.readString(buffer);
// PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
//
// Iterator<PlayerMail> it = data.playermail.iterator();
// while(it.hasNext()){
// PlayerMail mail = it.next();
// if(mail.time == time && mail.sender.equals(username)){
// it.remove();
// }
// }
// GuiDataPacket.sendGuiData(player, data.saveNBTData(new NBTTagCompound()));
// }
// else if(type == EnumPlayerPacket.MailSend){
// if(!(player.openContainer instanceof ContainerMail))
// return;
// String username = PlayerDataController.Instance.hasPlayer(ByteBufUtils.readString(buffer));
// if(username.isEmpty()){
// NoppesUtilServer.sendGuiError(player, 0);
// return;
// }
//
// PlayerMail mail = new PlayerMail();
// //String s = player.func_145748_c_().getFormattedText();
// String s = player.getDisplayName();
// if(!s.equals(player.getCommandSenderName()))
// s += "(" + player.getCommandSenderName() + ")";
// mail.readNBT(ByteBufUtils.readNBT(buffer));
// mail.sender = s;
// mail.items = ((ContainerMail)player.openContainer).mail.items;
//
// if(mail.subject.isEmpty()){
// NoppesUtilServer.sendGuiError(player, 1);
// return;
// }
// PlayerDataController.Instance.addPlayerMessage(username, mail);
//
// NBTTagCompound comp = new NBTTagCompound();
// comp.setString("username", username);
// NoppesUtilServer.sendGuiClose(player, 1,comp);
// }
// else if(type == EnumPlayerPacket.MailboxOpenMail){
// long time = buffer.readLong();
// String username = ByteBufUtils.readString(buffer);
// player.closeContainer();
// PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
//
// Iterator<PlayerMail> it = data.playermail.iterator();
// while(it.hasNext()){
// PlayerMail mail = it.next();
// if(mail.time == time && mail.sender.equals(username)){
// ContainerMail.staticmail = mail;
// player.openGui(CustomNpcs.instance, EnumGuiType.PlayerMailman.ordinal(), player.worldObj, 0, 0, 0);
// break;
// }
// }
// }
// else if(type == EnumPlayerPacket.MailRead){
// long time = buffer.readLong();
// String username = ByteBufUtils.readString(buffer);
// PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
//
// Iterator<PlayerMail> it = data.playermail.iterator();
// while(it.hasNext()){
// PlayerMail mail = it.next();
// if(mail.time == time && mail.sender.equals(username)){
// mail.beenRead = true;
// if(mail.hasQuest())
// PlayerQuestController.addActiveQuest(new QuestData(mail.getQuest()), player);
// }
// }
// }
2024-01-18 16:18:03 -05:00
else if(type == EnumPlayerPacket.SignSave) {
2018-09-13 12:03:28 -04:00
int x = buffer.readInt(), y = buffer.readInt(), z = buffer.readInt();
2024-01-18 16:18:03 -05:00
if (player.worldObj.blockExists(x, y, z)) {
TileEntity tile = player.worldObj.getTileEntity(x, y, z);
if(!(tile instanceof TileBigSign))
return;
TileBigSign sign = (TileBigSign) tile;
if (sign.canEdit) {
2025-01-30 12:44:39 -05:00
sign.setText(ByteBufUtils.readString(buffer));
2024-01-18 16:18:03 -05:00
sign.canEdit = false;
player.worldObj.markBlockForUpdate(x, y, z);
}
2018-09-13 12:03:28 -04:00
}
}
2024-01-18 16:18:03 -05:00
else if(type == EnumPlayerPacket.SaveBook) {
2018-09-13 12:03:28 -04:00
int x = buffer.readInt(), y = buffer.readInt(), z = buffer.readInt();
2024-01-18 16:18:03 -05:00
if (player.worldObj.blockExists(x, y, z)) {
TileEntity tileentity = player.worldObj.getTileEntity(x, y, z);
if (!(tileentity instanceof TileBook))
return;
TileBook tile = (TileBook) tileentity;
if (tile.book.getItem() == Items.written_book)
return;
boolean sign = buffer.readBoolean();
2025-01-30 12:44:39 -05:00
ItemStack book = ItemStack.loadItemStackFromNBT(ByteBufUtils.readNBT(buffer));
2024-01-18 16:18:03 -05:00
if (book == null)
return;
if (book.getItem() == Items.writable_book && !sign && ItemWritableBook.func_150930_a(book.getTagCompound())) {
tile.book.setTagInfo("pages", book.getTagCompound().getTagList("pages", 8));
}
if (book.getItem() == Items.written_book && sign && ItemEditableBook.validBookTagContents(book.getTagCompound())) {
tile.book.setTagInfo("author", new NBTTagString(player.getCommandSenderName()));
tile.book.setTagInfo("title", new NBTTagString(book.getTagCompound().getString("title")));
tile.book.setTagInfo("pages", book.getTagCompound().getTagList("pages", 8));
tile.book.func_150996_a(Items.written_book);
}
2018-09-13 12:03:28 -04:00
}
}
2025-02-03 03:41:01 +01:00
// else if(type == EnumPlayerPacket.ScreenSize){
// int width = buffer.readInt(), height = buffer.readInt();
// PlayerDataController.Instance.getPlayerData(player).screenSize.setSize(width,height);
// }
2018-09-13 12:03:28 -04:00
}
}