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

314 lines
12 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 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;
2023-09-08 20:34:48 -04:00
import net.minecraft.world.chunk.Chunk;
2018-09-13 12:03:28 -04:00
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;
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{
@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);
}
else if(type == EnumPlayerPacket.KeyPressed) {
2021-10-11 07:16:10 -05:00
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 = 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.onPlayerKeyPressed(player, button, isCtrlPressed, isShiftPressed, isAltPressed, isMetaPressed, buttonDown, keysDown);
2018-09-13 12:03:28 -04: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);
}
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();
2023-06-05 19:35:06 -04:00
BankData data = PlayerDataController.Instance.getBankData(player,bankId).getBankOrDefault(bankId);
2018-09-13 12:03:28 -04:00
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){
2023-06-05 19:35:06 -04: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){
2023-06-05 19:35:06 -04:00
PlayerFactionData data = PlayerDataController.Instance.getPlayerData(player).factionData;
2018-09-13 12:03:28 -04:00
Server.sendData(player, EnumPacketClient.GUI_DATA, data.getPlayerGuiData());
}
else if(type == EnumPlayerPacket.MailGet){
2023-06-05 19:35:06 -04:00
PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
2018-09-13 12:03:28 -04:00
Server.sendData(player, EnumPacketClient.GUI_DATA, data.saveNBTData(new NBTTagCompound()));
}
else if(type == EnumPlayerPacket.MailDelete){
long time = buffer.readLong();
String username = Server.readString(buffer);
2023-06-05 19:35:06 -04:00
PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
2018-09-13 12:03:28 -04:00
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;
2023-06-05 19:35:06 -04:00
String username = PlayerDataController.Instance.hasPlayer(Server.readString(buffer));
2018-09-13 12:03:28 -04:00
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;
}
2023-06-05 19:35:06 -04:00
PlayerDataController.Instance.addPlayerMessage(username, mail);
2018-09-13 12:03:28 -04:00
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();
2023-06-05 19:35:06 -04:00
PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
2018-09-13 12:03:28 -04:00
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);
2023-06-05 19:35:06 -04:00
PlayerMailData data = PlayerDataController.Instance.getPlayerData(player).mailData;
2018-09-13 12:03:28 -04:00
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);
2018-09-13 12:03:28 -04:00
}
}
}
else if(type == EnumPlayerPacket.SignSave) {
2018-09-13 12:03:28 -04:00
int x = buffer.readInt(), y = buffer.readInt(), z = buffer.readInt();
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) {
sign.setText(Server.readString(buffer));
sign.canEdit = false;
player.worldObj.markBlockForUpdate(x, y, z);
2023-09-08 20:34:48 -04:00
}
2018-09-13 12:03:28 -04:00
}
}
else if(type == EnumPlayerPacket.SaveBook) {
2018-09-13 12:03:28 -04:00
int x = buffer.readInt(), y = buffer.readInt(), z = buffer.readInt();
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();
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);
2023-09-08 20:34:48 -04:00
}
2018-09-13 12:03:28 -04:00
}
}
}
}