mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-13 19:34:09 +00:00
Validate packets
This commit is contained in:
1 parent
3448957d04
commit
7e06be509d
5 files changed
+66
-4
No files matched your search
@@ -13,10 +13,20 @@ import kamkeel.npcs.util.ByteBufUtils;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.LogWriter;
|
||||
import noppes.npcs.NoppesUtilServer;
|
||||
import noppes.npcs.blocks.tiles.ITilePermission;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Convenience packet for saving extra data about Tile Entities. <br>
|
||||
* <br>
|
||||
* <b>Any tile entity that uses this packet should implement {@link ITilePermission}</b> <br>
|
||||
* Not implementing results in the packet treated as malformed and rejected.
|
||||
*/
|
||||
public final class TileEntitySavePacket extends AbstractPacket {
|
||||
public static final String packetName = "Request|TileEntitySave";
|
||||
|
||||
@@ -50,9 +60,35 @@ public final class TileEntitySavePacket extends AbstractPacket {
|
||||
if (!(player instanceof EntityPlayerMP))
|
||||
return;
|
||||
|
||||
NBTTagCompound incomingCompound = ByteBufUtils.readNBT(in);
|
||||
|
||||
if (isCorrectPermission(incomingCompound, player))
|
||||
return;
|
||||
|
||||
if (!PacketUtil.verifyItemPacket(packetName, player, EnumItemPacketType.WAND, EnumItemPacketType.BLOCK))
|
||||
return;
|
||||
|
||||
NoppesUtilServer.saveTileEntity((EntityPlayerMP) player, ByteBufUtils.readNBT(in));
|
||||
NoppesUtilServer.saveTileEntity((EntityPlayerMP) player, incomingCompound);
|
||||
}
|
||||
|
||||
private static boolean isCorrectPermission(NBTTagCompound incomingCompound, EntityPlayer player) {
|
||||
int x = incomingCompound.getInteger("x");
|
||||
int y = incomingCompound.getInteger("y");
|
||||
int z = incomingCompound.getInteger("z");
|
||||
TileEntity tile = player.worldObj.getTileEntity(x, y, z);
|
||||
|
||||
if (tile == null)
|
||||
return true;
|
||||
|
||||
boolean validatesPacket = tile instanceof ITilePermission;
|
||||
if (!validatesPacket) {
|
||||
LogWriter.error(String.format("%s tried to use TileEntitySavePacket on %s -- should this class implement ITileValidityChecker??", player.getCommandSenderName(), tile));
|
||||
return true; // Assume packet is not meant for this entity from the get-go as there is no checking process.
|
||||
}
|
||||
|
||||
ITilePermission validityChecker = (ITilePermission) tile;
|
||||
CustomNpcsPermissions.Permission perm = validityChecker.getPermission();
|
||||
|
||||
return !CustomNpcsPermissions.hasPermission(player, perm);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package noppes.npcs.blocks.tiles;
|
||||
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
|
||||
public interface ITilePermission {
|
||||
|
||||
CustomNpcsPermissions.Permission getPermission();
|
||||
}
|
||||
@@ -12,11 +12,12 @@ import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.controllers.data.Availability;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class TileBorder extends TileEntity implements IEntitySelector {
|
||||
public class TileBorder extends TileEntity implements IEntitySelector, ITilePermission {
|
||||
public Availability availability = new Availability();
|
||||
public AxisAlignedBB boundingbox;
|
||||
public int rotation = 0;
|
||||
@@ -109,4 +110,9 @@ public class TileBorder extends TileEntity implements IEntitySelector {
|
||||
public boolean isEntityApplicable(Entity var1) {
|
||||
return var1 instanceof EntityPlayerMP || var1 instanceof EntityEnderPearl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.EDIT_BLOCKS;
|
||||
}
|
||||
}
|
||||
@@ -6,12 +6,13 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import noppes.npcs.CustomNpcs;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.blocks.BlockNpcRedstone;
|
||||
import noppes.npcs.controllers.data.Availability;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class TileRedstoneBlock extends TileEntity {
|
||||
public class TileRedstoneBlock extends TileEntity implements ITilePermission {
|
||||
public int onRange = 6;
|
||||
public int offRange = 10;
|
||||
|
||||
@@ -138,4 +139,9 @@ public class TileRedstoneBlock extends TileEntity {
|
||||
public boolean canUpdate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.EDIT_REDSTONE;
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import noppes.npcs.CustomNpcsPermissions;
|
||||
import noppes.npcs.constants.EnumQuestType;
|
||||
import noppes.npcs.controllers.PartyController;
|
||||
import noppes.npcs.controllers.data.Party;
|
||||
@@ -18,7 +19,7 @@ import noppes.npcs.quests.QuestLocation;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TileWaypoint extends TileEntity {
|
||||
public class TileWaypoint extends TileEntity implements ITilePermission {
|
||||
|
||||
public String name = "";
|
||||
|
||||
@@ -102,4 +103,9 @@ public class TileWaypoint extends TileEntity {
|
||||
compound.setString("LocationName", name);
|
||||
compound.setInteger("LocationRange", range);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CustomNpcsPermissions.Permission getPermission() {
|
||||
return CustomNpcsPermissions.EDIT_WAYPOINT;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user