2018-09-13 12:03:28 -04:00
|
|
|
package noppes.npcs;
|
|
|
|
|
|
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
|
|
|
|
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;
|
2022-02-02 07:18:33 -06:00
|
|
|
import noppes.npcs.constants.*;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.containers.ContainerMail;
|
2021-10-11 07:16:10 -05:00
|
|
|
import noppes.npcs.controllers.*;
|
2022-05-24 01:07:50 -05:00
|
|
|
import noppes.npcs.controllers.data.*;
|
2018-09-13 12:03:28 -04:00
|
|
|
import noppes.npcs.entity.EntityNPCInterface;
|
|
|
|
|
import noppes.npcs.roles.RoleCompanion;
|
|
|
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
|
|
|
|
import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent;
|
|
|
|
|
|
|
|
|
|
public class PacketHandlerPlayer{
|
|
|
|
|
|
|
|
|
|
@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){
|
|
|
|
|
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);
|
2021-10-12 02:57:32 -05:00
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.KeyPressed) {
|
2021-10-11 07:16:10 -05:00
|
|
|
if(ScriptController.Instance.languages.isEmpty()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-31 20:16:00 -06:00
|
|
|
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 = Server.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];
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-03 13:34:56 -05:00
|
|
|
EventHooks.onPlayerKeyPressed(player, button, isCtrlPressed, isShiftPressed, isAltPressed, isMetaPressed, buttonDown, keysDown);
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
2021-10-12 02:57:32 -05:00
|
|
|
else if(type == EnumPlayerPacket.MouseClicked) {
|
|
|
|
|
if(ScriptController.Instance.languages.isEmpty()) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-06 18:41:39 -05:00
|
|
|
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 = Server.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);
|
2021-10-12 02:57:32 -05:00
|
|
|
}
|
2018-09-13 12:03:28 -04:00
|
|
|
else if(type == EnumPlayerPacket.FollowerHire){
|
|
|
|
|
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
|
|
|
|
if(npc == null || npc.advanced.role != EnumRoleType.Follower)
|
|
|
|
|
return;
|
2021-10-11 07:16:10 -05:00
|
|
|
NoppesUtilPlayer.hireFollower(player, npc);
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.FollowerExtend){
|
|
|
|
|
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
|
|
|
|
if(npc == null || npc.advanced.role != EnumRoleType.Follower)
|
|
|
|
|
return;
|
2021-10-11 07:16:10 -05:00
|
|
|
NoppesUtilPlayer.extendFollower(player, npc);
|
2018-09-13 12:03:28 -04:00
|
|
|
Server.sendData(player, EnumPacketClient.GUI_DATA, 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);
|
|
|
|
|
Server.sendData(player, EnumPacketClient.GUI_DATA, npc.roleInterface.writeToNBT(new NBTTagCompound()));
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.RoleGet){
|
|
|
|
|
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
|
|
|
|
if(npc == null || npc.advanced.role == EnumRoleType.None)
|
|
|
|
|
return;
|
|
|
|
|
Server.sendData(player, EnumPacketClient.GUI_DATA, npc.roleInterface.writeToNBT(new NBTTagCompound()));
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.Transport){
|
|
|
|
|
EntityNPCInterface npc = NoppesUtilServer.getEditingNpc(player);
|
|
|
|
|
if(npc == null || npc.advanced.role != EnumRoleType.Transporter)
|
|
|
|
|
return;
|
|
|
|
|
NoppesUtilPlayer.transport(player, npc, Server.readString(buffer));
|
|
|
|
|
}
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
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){
|
2022-02-02 07:18:33 -06:00
|
|
|
PlayerData playerData = PlayerDataController.instance.getPlayerData(player);
|
|
|
|
|
PlayerQuestData questData = PlayerDataController.instance.getPlayerData(player).questData;
|
|
|
|
|
questData.checkQuestCompletion(playerData, null);
|
2018-09-13 12:03:28 -04:00
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.QuestLog){
|
|
|
|
|
NoppesUtilPlayer.sendQuestLogData(player);
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.FactionsGet){
|
|
|
|
|
PlayerFactionData data = PlayerDataController.instance.getPlayerData(player).factionData;
|
|
|
|
|
Server.sendData(player, EnumPacketClient.GUI_DATA, data.getPlayerGuiData());
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.MailGet){
|
|
|
|
|
PlayerMailData data = PlayerDataController.instance.getPlayerData(player).mailData;
|
|
|
|
|
Server.sendData(player, EnumPacketClient.GUI_DATA, data.saveNBTData(new NBTTagCompound()));
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.MailDelete){
|
|
|
|
|
long time = buffer.readLong();
|
|
|
|
|
String username = Server.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();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Server.sendData(player, EnumPacketClient.GUI_DATA, data.saveNBTData(new NBTTagCompound()));
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.MailSend){
|
|
|
|
|
if(!(player.openContainer instanceof ContainerMail))
|
|
|
|
|
return;
|
|
|
|
|
String username = PlayerDataController.instance.hasPlayer(Server.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(Server.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 = Server.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 = Server.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(mail.getQuest(), player);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.SignSave){
|
|
|
|
|
int x = buffer.readInt(), y = buffer.readInt(), z = buffer.readInt();
|
|
|
|
|
TileEntity tile = player.worldObj.getTileEntity(x, y, z);
|
|
|
|
|
if(tile == null || !(tile instanceof TileBigSign))
|
|
|
|
|
return;
|
|
|
|
|
TileBigSign sign = (TileBigSign) tile;
|
|
|
|
|
if(sign.canEdit){
|
|
|
|
|
sign.setText(Server.readString(buffer));
|
|
|
|
|
sign.canEdit = false;
|
|
|
|
|
player.worldObj.markBlockForUpdate(x, y, z);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(type == EnumPlayerPacket.SaveBook){
|
|
|
|
|
int x = buffer.readInt(), y = buffer.readInt(), z = buffer.readInt();
|
|
|
|
|
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();
|
|
|
|
|
ItemStack book = ItemStack.loadItemStackFromNBT(Server.readNBT(buffer));
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|