Fixed CustomTagFix.

Updated ServerData ServerGroup and SErverMonitor for new flags in Arcade.
This commit is contained in:
Jonathan Williams 2014-09-12 10:03:33 -10:00
parent 558231457c
commit 14c4152248
14 changed files with 232 additions and 126 deletions

View File

@ -5,8 +5,10 @@ import java.util.List;
import mineplex.core.common.DummyEntity; import mineplex.core.common.DummyEntity;
import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.NautHashMap;
import mineplex.core.packethandler.IPacketHandler;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.packethandler.PacketVerifier; import mineplex.core.packethandler.PacketVerifier;
import mineplex.core.packethandler.PlayerPacketEvent; import mineplex.core.packethandler.PacketInfo;
import net.minecraft.server.v1_7_R4.DataWatcher; import net.minecraft.server.v1_7_R4.DataWatcher;
import net.minecraft.server.v1_7_R4.EnumEntitySize; import net.minecraft.server.v1_7_R4.EnumEntitySize;
import net.minecraft.server.v1_7_R4.MathHelper; import net.minecraft.server.v1_7_R4.MathHelper;
@ -20,23 +22,23 @@ import net.minecraft.server.v1_7_R4.WatchableObject;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_7_R4.CraftWorld; import org.bukkit.craftbukkit.v1_7_R4.CraftWorld;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
public class CustomTagFix extends MiniPlugin public class CustomTagFix extends MiniPlugin implements IPacketHandler
{ {
private static int _fakeIdCounter = 455000; private static int _fakeIdCounter = 455000;
private NautHashMap<Integer, Integer> _entityMap = new NautHashMap<Integer, Integer>(); private NautHashMap<Player, NautHashMap<Integer, Integer>> _entityMap = new NautHashMap<Player, NautHashMap<Integer, Integer>>();
private Field _destroyId; private Field _destroyId;
public CustomTagFix(JavaPlugin plugin) public CustomTagFix(JavaPlugin plugin, PacketHandler packetHandler)
{ {
super("Custom Tag Fix", plugin); super("Custom Tag Fix", plugin);
packetHandler.addPacketHandler(this);
try try
{ {
@ -50,16 +52,27 @@ public class CustomTagFix extends MiniPlugin
} }
} }
@SuppressWarnings("unchecked") @EventHandler
@EventHandler(priority = EventPriority.HIGHEST) public void playerQuit(PlayerQuitEvent event)
public void handlePackets(PlayerPacketEvent event)
{ {
Packet packet = event.getPacket(); _entityMap.remove(event.getPlayer());
Player owner = event.getPlayer(); }
PacketVerifier verifier = event.getVerifier();
@SuppressWarnings("unchecked")
public void handle(PacketInfo packetInfo)
{
if (packetInfo.isCancelled())
return;
Packet packet = packetInfo.getPacket();
Player owner = packetInfo.getPlayer();
PacketVerifier verifier = packetInfo.getVerifier();
if (((CraftPlayer)owner).getHandle().playerConnection.networkManager.getVersion() >= 47) if (((CraftPlayer)owner).getHandle().playerConnection.networkManager.getVersion() >= 47)
{ {
if (owner.isOnline() && !_entityMap.containsKey(owner))
_entityMap.put(owner, new NautHashMap<Integer, Integer>());
if (packet instanceof PacketPlayOutSpawnEntityLiving) if (packet instanceof PacketPlayOutSpawnEntityLiving)
{ {
PacketPlayOutSpawnEntityLiving spawnPacket = (PacketPlayOutSpawnEntityLiving)packet; PacketPlayOutSpawnEntityLiving spawnPacket = (PacketPlayOutSpawnEntityLiving)packet;
@ -68,14 +81,14 @@ public class CustomTagFix extends MiniPlugin
if (spawnPacket.l.getByte(11) == 1 || spawnPacket.l.getByte(3) == 1) if (spawnPacket.l.getByte(11) == 1 || spawnPacket.l.getByte(3) == 1)
{ {
if (_entityMap.containsKey(spawnPacket.a)) if (_entityMap.get(owner).containsKey(spawnPacket.a))
{ {
verifier.bypassProcess(new PacketPlayOutEntityDestroy(_entityMap.get(spawnPacket.a))); verifier.bypassProcess(new PacketPlayOutEntityDestroy(_entityMap.get(owner).get(spawnPacket.a)));
} }
int newId = _fakeIdCounter++; int newId = _fakeIdCounter++;
sendProtocolPackets(owner, spawnPacket.a, newId, entityName, verifier); sendProtocolPackets(owner, spawnPacket.a, newId, entityName, verifier);
_entityMap.put(spawnPacket.a, newId); _entityMap.get(owner).put(spawnPacket.a, newId);
} }
} }
@ -83,7 +96,7 @@ public class CustomTagFix extends MiniPlugin
{ {
PacketPlayOutEntityMetadata metaPacket = (PacketPlayOutEntityMetadata)packet; PacketPlayOutEntityMetadata metaPacket = (PacketPlayOutEntityMetadata)packet;
if (!_entityMap.containsKey(metaPacket.a) && metaPacket.a != 777777) if (!_entityMap.get(owner).containsKey(metaPacket.a) && metaPacket.a != 777777)
{ {
String entityName = ""; String entityName = "";
for (WatchableObject watchable : (List<WatchableObject>)metaPacket.b) for (WatchableObject watchable : (List<WatchableObject>)metaPacket.b)
@ -98,7 +111,7 @@ public class CustomTagFix extends MiniPlugin
{ {
int newId = _fakeIdCounter++; int newId = _fakeIdCounter++;
sendProtocolPackets(owner, metaPacket.a, newId, entityName, verifier); sendProtocolPackets(owner, metaPacket.a, newId, entityName, verifier);
_entityMap.put(metaPacket.a, newId); _entityMap.get(owner).put(metaPacket.a, newId);
} }
} }
} }
@ -108,10 +121,10 @@ public class CustomTagFix extends MiniPlugin
{ {
for (int id : (int[])_destroyId.get(packet)) for (int id : (int[])_destroyId.get(packet))
{ {
if (_entityMap.containsKey(id)) if (_entityMap.get(owner).containsKey(id))
{ {
verifier.bypassProcess(new PacketPlayOutEntityDestroy(_entityMap.get(id))); verifier.bypassProcess(new PacketPlayOutEntityDestroy(_entityMap.get(owner).get(id)));
_entityMap.remove(id); _entityMap.get(owner).remove(id);
} }
} }
} }
@ -126,7 +139,7 @@ public class CustomTagFix extends MiniPlugin
if (attachPacket.c == owner.getEntityId()) if (attachPacket.c == owner.getEntityId())
{ {
event.setCancelled(true); packetInfo.setCancelled(true);
//verifier.bypassProcess(new PacketPlayOutEntityDestroy(attachPacket.b)); //verifier.bypassProcess(new PacketPlayOutEntityDestroy(attachPacket.b));
/* /*
System.out.println("Adding patch item."); System.out.println("Adding patch item.");

View File

@ -40,13 +40,15 @@ import mineplex.core.common.util.NautHashMap;
import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.disguise.disguises.DisguiseBase;
import mineplex.core.disguise.disguises.DisguiseBlock; import mineplex.core.disguise.disguises.DisguiseBlock;
import mineplex.core.disguise.disguises.DisguiseInsentient; import mineplex.core.disguise.disguises.DisguiseInsentient;
import mineplex.core.packethandler.IPacketHandler;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.packethandler.PacketVerifier; import mineplex.core.packethandler.PacketVerifier;
import mineplex.core.packethandler.PlayerPacketEvent; import mineplex.core.packethandler.PacketInfo;
import mineplex.core.timing.TimingManager; import mineplex.core.timing.TimingManager;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
public class DisguiseManager extends MiniPlugin public class DisguiseManager extends MiniPlugin implements IPacketHandler
{ {
private NautHashMap<Integer, DisguiseBase> _spawnPacketMap = new NautHashMap<Integer, DisguiseBase>(); private NautHashMap<Integer, DisguiseBase> _spawnPacketMap = new NautHashMap<Integer, DisguiseBase>();
private NautHashMap<Integer, PacketPlayOutEntityVelocity> _movePacketMap = new NautHashMap<Integer, PacketPlayOutEntityVelocity>(); private NautHashMap<Integer, PacketPlayOutEntityVelocity> _movePacketMap = new NautHashMap<Integer, PacketPlayOutEntityVelocity>();
@ -64,10 +66,12 @@ public class DisguiseManager extends MiniPlugin
private Field _soundC; private Field _soundC;
private Field _soundD; private Field _soundD;
public DisguiseManager(JavaPlugin plugin) public DisguiseManager(JavaPlugin plugin, PacketHandler packetHandler)
{ {
super("Disguise Manager", plugin); super("Disguise Manager", plugin);
packetHandler.addPacketHandler(this);
try try
{ {
_attributesA = PacketPlayOutUpdateAttributes.class.getDeclaredField("a"); _attributesA = PacketPlayOutUpdateAttributes.class.getDeclaredField("a");
@ -173,6 +177,8 @@ public class DisguiseManager extends MiniPlugin
entityPlayer.playerConnection.sendPacket(new PacketPlayOutSpawnEntityLiving(((CraftLivingEntity)entity).getHandle())); entityPlayer.playerConnection.sendPacket(new PacketPlayOutSpawnEntityLiving(((CraftLivingEntity)entity).getHandle()));
} }
} }
_disguisePlayerMap.remove(disguise);
} }
public void reApplyDisguise(final DisguiseBase disguise) public void reApplyDisguise(final DisguiseBase disguise)
@ -347,6 +353,7 @@ public class DisguiseManager extends MiniPlugin
_entityDisguiseMap.clear(); _entityDisguiseMap.clear();
_addTempList.clear(); _addTempList.clear();
_delTempList.clear(); _delTempList.clear();
_disguisePlayerMap.clear();
} }
@EventHandler @EventHandler
@ -360,15 +367,14 @@ public class DisguiseManager extends MiniPlugin
} }
} }
@EventHandler public void handle(PacketInfo packetInfo)
public void handlePackets(PlayerPacketEvent event)
{ {
if (_handlingPacket) if (_handlingPacket)
return; return;
final Packet packet = event.getPacket(); final Packet packet = packetInfo.getPacket();
Player owner = event.getPlayer(); Player owner = packetInfo.getPlayer();
final PacketVerifier packetVerifier = event.getVerifier(); final PacketVerifier packetVerifier = packetInfo.getVerifier();
if (packet instanceof PacketPlayOutNamedEntitySpawn) if (packet instanceof PacketPlayOutNamedEntitySpawn)
{ {
@ -377,7 +383,7 @@ public class DisguiseManager extends MiniPlugin
if (_spawnPacketMap.containsKey(entityId) && (_spawnPacketMap.get(entityId).Global || _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner))) if (_spawnPacketMap.containsKey(entityId) && (_spawnPacketMap.get(entityId).Global || _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner)))
{ {
handlePacket(_spawnPacketMap.get(entityId).GetSpawnPacket(), packetVerifier); handlePacket(_spawnPacketMap.get(entityId).GetSpawnPacket(), packetVerifier);
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
else if (packet instanceof PacketPlayOutSpawnEntity) else if (packet instanceof PacketPlayOutSpawnEntity)
@ -387,7 +393,7 @@ public class DisguiseManager extends MiniPlugin
if (_spawnPacketMap.containsKey(entityId) && (_spawnPacketMap.get(entityId).Global || _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner))) if (_spawnPacketMap.containsKey(entityId) && (_spawnPacketMap.get(entityId).Global || _disguisePlayerMap.get(_spawnPacketMap.get(entityId)).contains(owner)))
{ {
handlePacket(_spawnPacketMap.get(entityId).GetSpawnPacket(), packetVerifier); handlePacket(_spawnPacketMap.get(entityId).GetSpawnPacket(), packetVerifier);
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
else if (packet instanceof PacketPlayOutUpdateAttributes) else if (packet instanceof PacketPlayOutUpdateAttributes)
@ -411,7 +417,7 @@ public class DisguiseManager extends MiniPlugin
{ {
// Crash clients with meta to a block id. // Crash clients with meta to a block id.
if (_spawnPacketMap.get(entityId) instanceof DisguiseBlock) if (_spawnPacketMap.get(entityId) instanceof DisguiseBlock)
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
else if (packet instanceof PacketPlayOutAnimation) else if (packet instanceof PacketPlayOutAnimation)
@ -420,7 +426,7 @@ public class DisguiseManager extends MiniPlugin
if (containsSpawnDisguise(owner, entityId) && owner.getEntityId() != entityId) if (containsSpawnDisguise(owner, entityId) && owner.getEntityId() != entityId)
{ {
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
else if (packet instanceof PacketPlayOutEntityMetadata) else if (packet instanceof PacketPlayOutEntityMetadata)
@ -430,7 +436,7 @@ public class DisguiseManager extends MiniPlugin
if (containsSpawnDisguise(owner, entityId) && owner.getEntityId() != entityId) if (containsSpawnDisguise(owner, entityId) && owner.getEntityId() != entityId)
{ {
handlePacket(_spawnPacketMap.get(entityId).GetMetaDataPacket(), packetVerifier); handlePacket(_spawnPacketMap.get(entityId).GetMetaDataPacket(), packetVerifier);
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
else if (packet instanceof PacketPlayOutEntityEquipment) else if (packet instanceof PacketPlayOutEntityEquipment)
@ -441,7 +447,7 @@ public class DisguiseManager extends MiniPlugin
{ {
if (!((DisguiseInsentient)_spawnPacketMap.get(entityId)).armorVisible() && ((PacketPlayOutEntityEquipment)packet).b != 0) if (!((DisguiseInsentient)_spawnPacketMap.get(entityId)).armorVisible() && ((PacketPlayOutEntityEquipment)packet).b != 0)
{ {
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
} }
@ -461,7 +467,7 @@ public class DisguiseManager extends MiniPlugin
} }
else if (_spawnPacketMap.containsKey(velocityPacket.a)) else if (_spawnPacketMap.containsKey(velocityPacket.a))
{ {
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
else if (packet instanceof PacketPlayOutRelEntityMove) else if (packet instanceof PacketPlayOutRelEntityMove)

View File

@ -20,22 +20,26 @@ import mineplex.core.friend.command.DeleteFriend;
import mineplex.core.friend.data.FriendData; import mineplex.core.friend.data.FriendData;
import mineplex.core.friend.data.FriendRepository; import mineplex.core.friend.data.FriendRepository;
import mineplex.core.friend.ui.FriendTabList; import mineplex.core.friend.ui.FriendTabList;
import mineplex.core.packethandler.PlayerPacketEvent; import mineplex.core.packethandler.IPacketHandler;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.packethandler.PacketInfo;
import mineplex.core.timing.TimingManager; import mineplex.core.timing.TimingManager;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
public class FriendManager extends MiniClientPlugin<FriendData> public class FriendManager extends MiniClientPlugin<FriendData> implements IPacketHandler
{ {
private FriendRepository _repository; private FriendRepository _repository;
private NautHashMap<Player, FriendTabList> _playerTabMap; private NautHashMap<Player, FriendTabList> _playerTabMap;
private boolean _sendingPackets = false; private boolean _sendingPackets = false;
public FriendManager(JavaPlugin plugin) public FriendManager(JavaPlugin plugin, PacketHandler packetHandler)
{ {
super("Friends", plugin); super("Friends", plugin);
packetHandler.addPacketHandler(this);
_repository = new FriendRepository(plugin); _repository = new FriendRepository(plugin);
_playerTabMap = new NautHashMap<Player, FriendTabList>(); _playerTabMap = new NautHashMap<Player, FriendTabList>();
} }
@ -134,15 +138,14 @@ public class FriendManager extends MiniClientPlugin<FriendData>
_playerTabMap.remove(event.getPlayer()); _playerTabMap.remove(event.getPlayer());
} }
@EventHandler public void handle(PacketInfo packetInfo)
public void handleFriendPackets(PlayerPacketEvent event)
{ {
if (event.isCancelled()) if (packetInfo.isCancelled())
return; return;
if (event.getPacket() instanceof PacketPlayOutPlayerInfo) if (packetInfo.getPacket() instanceof PacketPlayOutPlayerInfo)
{ {
event.setCancelled(_sendingPackets); packetInfo.setCancelled(_sendingPackets);
} }
} }

View File

@ -0,0 +1,6 @@
package mineplex.core.packethandler;
public interface IPacketHandler
{
void handle(PacketInfo packetInfo);
}

View File

@ -1,6 +1,9 @@
package mineplex.core.packethandler; package mineplex.core.packethandler;
import java.util.HashSet;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R4.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
@ -8,9 +11,13 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin; import mineplex.core.MiniPlugin;
import mineplex.core.common.util.NautHashMap;
public class PacketHandler extends MiniPlugin public class PacketHandler extends MiniPlugin
{ {
private NautHashMap<Player, PacketVerifier> _playerVerifierMap = new NautHashMap<Player, PacketVerifier>();
private HashSet<IPacketHandler> _packetHandlers = new HashSet<IPacketHandler>();
public PacketHandler(JavaPlugin plugin) public PacketHandler(JavaPlugin plugin)
{ {
super("PacketHandler", plugin); super("PacketHandler", plugin);
@ -19,12 +26,29 @@ public class PacketHandler extends MiniPlugin
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) public void onPlayerJoin(PlayerJoinEvent event)
{ {
((CraftPlayer) event.getPlayer()).getHandle().playerConnection.PacketVerifier.addPacketVerifier(new PacketVerifier(event.getPlayer())); _playerVerifierMap.put(event.getPlayer(), new PacketVerifier(event.getPlayer()));
((CraftPlayer) event.getPlayer()).getHandle().playerConnection.PacketVerifier.addPacketVerifier(_playerVerifierMap.get(event.getPlayer()));
for (IPacketHandler packetHandler : _packetHandlers)
{
_playerVerifierMap.get(event.getPlayer()).addPacketHandler(packetHandler);
}
} }
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(PlayerQuitEvent event) public void onPlayerQuit(PlayerQuitEvent event)
{ {
((CraftPlayer) event.getPlayer()).getHandle().playerConnection.PacketVerifier.clearVerifiers(); ((CraftPlayer) event.getPlayer()).getHandle().playerConnection.PacketVerifier.clearVerifiers();
_playerVerifierMap.remove(event.getPlayer()).clearHandlers();
} }
public void addPacketHandler(IPacketHandler packetHandler)
{
_packetHandlers.add(packetHandler);
for (PacketVerifier verifier : _playerVerifierMap.values())
{
verifier.addPacketHandler(packetHandler);
}
}
} }

View File

@ -6,33 +6,21 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
public class PlayerPacketEvent extends Event public class PacketInfo
{ {
private static final HandlerList handlers = new HandlerList();
private Player _player; private Player _player;
private Packet _packet; private Packet _packet;
private PacketVerifier _verifier; private PacketVerifier _verifier;
private boolean _cancelled = false; private boolean _cancelled = false;
public PlayerPacketEvent(Player player, Packet packet, PacketVerifier verifier) public PacketInfo(Player player, Packet packet, PacketVerifier verifier)
{ {
_player = player; _player = player;
_packet = packet; _packet = packet;
_verifier = verifier; _verifier = verifier;
} }
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
public Packet getPacket() public Packet getPacket()
{ {
return _packet; return _packet;

View File

@ -1,5 +1,9 @@
package mineplex.core.packethandler; package mineplex.core.packethandler;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.server.v1_7_R4.IPacketVerifier; import net.minecraft.server.v1_7_R4.IPacketVerifier;
import net.minecraft.server.v1_7_R4.Packet; import net.minecraft.server.v1_7_R4.Packet;
import net.minecraft.server.v1_7_R4.PacketPlayOutAnimation; import net.minecraft.server.v1_7_R4.PacketPlayOutAnimation;
@ -23,38 +27,41 @@ import org.bukkit.entity.Player;
public class PacketVerifier implements IPacketVerifier public class PacketVerifier implements IPacketVerifier
{ {
private static Field _destroyId;
private Player _owner; private Player _owner;
private List<IPacketHandler> _packetHandlers = new ArrayList<IPacketHandler>();
public PacketVerifier(Player owner) public PacketVerifier(Player owner)
{ {
_owner = owner; _owner = owner;
if (_destroyId == null)
{
try
{
_destroyId = PacketPlayOutEntityDestroy.class.getDeclaredField("a");
_destroyId.setAccessible(true);
}
catch (Exception exception)
{
System.out.println("Field exception in CustomTagFix : ");
exception.printStackTrace();
}
}
} }
@Override @Override
public boolean verify(Packet o) public boolean verify(Packet o)
{ {
if (o instanceof PacketPlayOutNamedEntitySpawn PacketInfo packetInfo = new PacketInfo(_owner, o, this);
|| o instanceof PacketPlayOutSpawnEntity
|| o instanceof PacketPlayOutSpawnEntityLiving
|| o instanceof PacketPlayOutUpdateAttributes
|| o instanceof PacketPlayOutAnimation
|| o instanceof PacketPlayOutEntityMetadata
|| o instanceof PacketPlayOutEntityEquipment
|| o instanceof PacketPlayOutEntityVelocity
|| o instanceof PacketPlayOutRelEntityMove
|| o instanceof PacketPlayOutRelEntityMoveLook
|| o instanceof PacketPlayOutPlayerInfo
|| o instanceof PacketPlayOutEntityDestroy
|| o instanceof PacketPlayOutAttachEntity)
{
PlayerPacketEvent event = new PlayerPacketEvent(_owner, o, this);
Bukkit.getServer().getPluginManager().callEvent(event); for (IPacketHandler handler : _packetHandlers)
{
handler.handle(packetInfo);
}
return !event.isCancelled(); return !packetInfo.isCancelled();
}
return true;
} }
public void bypassProcess(Packet packet) public void bypassProcess(Packet packet)
@ -71,4 +78,14 @@ public class PacketVerifier implements IPacketVerifier
{ {
((CraftPlayer)_owner).getHandle().playerConnection.sendPacket(packet); ((CraftPlayer)_owner).getHandle().playerConnection.sendPacket(packet);
} }
public void clearHandlers()
{
_packetHandlers.clear();
}
public void addPacketHandler(IPacketHandler packetHandler)
{
_packetHandlers.add(packetHandler);
}
} }

View File

@ -95,7 +95,8 @@ public class Hub extends JavaPlugin implements IRelation
PartyManager partyManager = new PartyManager(this, clientManager, preferenceManager); PartyManager partyManager = new PartyManager(this, clientManager, preferenceManager);
Portal portal = new Portal(this, serverStatusManager.getCurrentServerName()); Portal portal = new Portal(this, serverStatusManager.getCurrentServerName());
AntiHack.Initialize(this, punish, portal); AntiHack.Initialize(this, punish, portal);
DisguiseManager disguiseManager = new DisguiseManager(this); PacketHandler packetHandler = new PacketHandler(this);
DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler);
HubManager hubManager = new HubManager(this, new BlockRestore(this), clientManager, donationManager, new ConditionManager(this), disguiseManager, new TaskManager(this, webServerAddress), portal, partyManager, preferenceManager, petManager, pollManager); HubManager hubManager = new HubManager(this, new BlockRestore(this), clientManager, donationManager, new ConditionManager(this), disguiseManager, new TaskManager(this, webServerAddress), portal, partyManager, preferenceManager, petManager, pollManager);
new PlayerTracker(this, serverStatusManager.getCurrentServerName(), serverStatusManager.getUs()); new PlayerTracker(this, serverStatusManager.getCurrentServerName(), serverStatusManager.getUs());
@ -105,8 +106,7 @@ public class Hub extends JavaPlugin implements IRelation
new Chat(this, clientManager, preferenceManager, serverStatusManager.getCurrentServerName()); new Chat(this, clientManager, preferenceManager, serverStatusManager.getCurrentServerName());
new MemoryFix(this); new MemoryFix(this);
new FileUpdater(this, portal); new FileUpdater(this, portal);
new CustomTagFix(this); new CustomTagFix(this, packetHandler);
new PacketHandler(this);
CombatManager combatManager = new CombatManager(this); CombatManager combatManager = new CombatManager(this);
BlockRestore blockRestore = new BlockRestore(this); BlockRestore blockRestore = new BlockRestore(this);

View File

@ -71,6 +71,42 @@ public class ServerGroup
private boolean _tournament; private boolean _tournament;
public boolean getTournament() { return _tournament; } public boolean getTournament() { return _tournament; }
private boolean _teamRejoin;
public boolean getTeamRejoin() { return _teamRejoin; }
private boolean _teamAutoJoin;
public boolean getTeamAutoJoin() { return _teamAutoJoin; }
private boolean _teamForceBalance;
public boolean getTeamForceBalance() { return _teamForceBalance; }
private boolean _gameAutoStart;
public boolean getGameAutoStart() { return _gameAutoStart; }
private boolean _gameTimeout;
public boolean getGameTimeout() { return _gameTimeout; }
private boolean _rewardGems;
public boolean getRewardGems() { return _rewardGems; }
private boolean _rewardItems;
public boolean getRewardItems() { return _rewardItems; }
private boolean _rewardStats;
public boolean getRewardStats() { return _rewardStats; }
private boolean _rewardAchievements;
public boolean getRewardAchievements() { return _rewardAchievements; }
private boolean _hotbarInventory;
public boolean getHotbarInventory() { return _hotbarInventory; }
private boolean _hotbarHubClock;
public boolean getHotbarHubClock() { return _hotbarHubClock; }
private boolean _playerKickIdle;
public boolean getPlayerKickIdle() { return _playerKickIdle; }
private boolean _generateFreeVersions; private boolean _generateFreeVersions;
public boolean getGenerateFreeVersions() { return _generateFreeVersions; } public boolean getGenerateFreeVersions() { return _generateFreeVersions; }
@ -95,26 +131,38 @@ public class ServerGroup
*/ */
public ServerGroup(Map<String, String> data, Region region) public ServerGroup(Map<String, String> data, Region region)
{ {
this._name = data.get("name"); _name = data.get("name");
this._prefix = data.get("prefix"); _prefix = data.get("prefix");
this._scriptName = data.get("scriptName"); _scriptName = data.get("scriptName");
this._requiredRam = Integer.valueOf(data.get("ram")); _requiredRam = Integer.valueOf(data.get("ram"));
this._requiredCpu = Integer.valueOf(data.get("cpu")); _requiredCpu = Integer.valueOf(data.get("cpu"));
this._requiredTotalServers = Integer.valueOf(data.get("totalServers")); _requiredTotalServers = Integer.valueOf(data.get("totalServers"));
this._requiredJoinableServers = Integer.valueOf(data.get("joinableServers")); _requiredJoinableServers = Integer.valueOf(data.get("joinableServers"));
this._portSection = Integer.valueOf(data.get("portSection")); _portSection = Integer.valueOf(data.get("portSection"));
this._arcadeGroup = Boolean.valueOf(data.get("arcadeGroup")); _arcadeGroup = Boolean.valueOf(data.get("arcadeGroup"));
this._worldZip = data.get("worldZip"); _worldZip = data.get("worldZip");
this._plugin = data.get("plugin"); _plugin = data.get("plugin");
this._configPath = data.get("configPath"); _configPath = data.get("configPath");
this._minPlayers = Integer.valueOf(data.get("minPlayers")); _minPlayers = Integer.valueOf(data.get("minPlayers"));
this._maxPlayers = Integer.valueOf(data.get("maxPlayers")); _maxPlayers = Integer.valueOf(data.get("maxPlayers"));
this._pvp = Boolean.valueOf(data.get("pvp")); _pvp = Boolean.valueOf(data.get("pvp"));
this._tournament = Boolean.valueOf(data.get("tournament")); _tournament = Boolean.valueOf(data.get("tournament"));
this._generateFreeVersions = Boolean.valueOf(data.get("generateFreeVersions")); _generateFreeVersions = Boolean.valueOf(data.get("generateFreeVersions"));
this._games = data.get("games"); _games = data.get("games");
this._serverType = data.get("serverType"); _serverType = data.get("serverType");
this._addNoCheat = Boolean.valueOf(data.get("addNoCheat")); _addNoCheat = Boolean.valueOf(data.get("addNoCheat"));
_teamRejoin = Boolean.valueOf(data.get("teamRejoin"));
_teamAutoJoin = Boolean.valueOf(data.get("teamAutoJoin"));
_teamForceBalance = Boolean.valueOf(data.get("teamForceBalance"));
_gameAutoStart = Boolean.valueOf(data.get("gameAutoStart"));
_gameTimeout = Boolean.valueOf(data.get("gameTimeout"));
_rewardGems = Boolean.valueOf(data.get("rewardGems"));
_rewardItems = Boolean.valueOf(data.get("rewardItems"));
_rewardStats = Boolean.valueOf(data.get("rewardStats"));
_rewardAchievements = Boolean.valueOf(data.get("rewardAchievements"));
_hotbarInventory = Boolean.valueOf(data.get("hotbarInventory"));
_hotbarHubClock = Boolean.valueOf(data.get("hotbarHubClock"));
_playerKickIdle = Boolean.valueOf(data.get("playerKickIdle"));
fetchServers(region); fetchServers(region);
} }

View File

@ -380,12 +380,12 @@ public class ServerMonitor
private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final int serverNum, final boolean free) private static void startServer(final DedicatedServer serverSpace, final ServerGroup serverGroup, final int serverNum, final boolean free)
{ {
String cmd = "/home/mineplex/easyRemoteStartServerCustom.sh"; String cmd = "/home/mineplex/easyRemoteStartServer.sh";
final String groupPrefix = serverGroup.getPrefix(); final String groupPrefix = serverGroup.getPrefix();
final String serverName = serverSpace.getName(); final String serverName = serverSpace.getName();
final String serverAddress = serverSpace.getPublicAddress(); final String serverAddress = serverSpace.getPublicAddress();
ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, serverAddress, serverSpace.getPrivateAddress(), (serverGroup.getPortSection() + serverNum) + "", serverGroup.getRequiredRam() + "", serverGroup.getWorldZip(), serverGroup.getPlugin(), serverGroup.getConfigPath(), serverGroup.getName(), serverGroup.getPrefix() + "-" + serverNum, serverGroup.getMinPlayers() + "", serverGroup.getMaxPlayers() + "", serverGroup.getPvp() + "", serverGroup.getTournament() + "", free + "", serverSpace.isUsRegion() ? "true" : "false", serverGroup.getArcadeGroup() + "", serverGroup.getGames(), serverGroup.getServerType(), serverGroup.getAddNoCheat() + ""}); ProcessRunner pr = new ProcessRunner(new String[] {"/bin/sh", cmd, serverAddress, serverSpace.getPrivateAddress(), (serverGroup.getPortSection() + serverNum) + "", serverGroup.getRequiredRam() + "", serverGroup.getWorldZip(), serverGroup.getPlugin(), serverGroup.getConfigPath(), serverGroup.getName(), serverGroup.getPrefix() + "-" + serverNum, serverGroup.getMinPlayers() + "", serverGroup.getMaxPlayers() + "", serverGroup.getPvp() + "", serverGroup.getTournament() + "", free + "", serverSpace.isUsRegion() ? "true" : "false", serverGroup.getArcadeGroup() + "", serverGroup.getGames(), serverGroup.getServerType(), serverGroup.getAddNoCheat() + "", serverGroup.getTeamAutoJoin() + "", serverGroup.getTeamForceBalance() + "", serverGroup.getTeamRejoin() + "", serverGroup.getGameAutoStart() + "", serverGroup.getGameTimeout() + "", serverGroup.getHotbarHubClock() + "", serverGroup.getHotbarInventory() + "", serverGroup.getPlayerKickIdle() + "", serverGroup.getRewardGems() + "", serverGroup.getRewardItems() + "", serverGroup.getRewardAchievements() + "", serverGroup.getRewardStats() + ""});
pr.start(new GenericRunnable<Boolean>() pr.start(new GenericRunnable<Boolean>()
{ {
public void run(Boolean error) public void run(Boolean error)

View File

@ -96,8 +96,9 @@ public class Arcade extends JavaPlugin
ServerStatusManager serverStatusManager = new ServerStatusManager(this, new LagMeter(this, _clientManager)); ServerStatusManager serverStatusManager = new ServerStatusManager(this, new LagMeter(this, _clientManager));
Portal portal = new Portal(this, serverStatusManager.getCurrentServerName()); Portal portal = new Portal(this, serverStatusManager.getCurrentServerName());
new FileUpdater(this, portal); new FileUpdater(this, portal);
PacketHandler packetHandler = new PacketHandler(this);
DisguiseManager disguiseManager = new DisguiseManager(this); DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler);
_damageManager = new DamageManager(this, new CombatManager(this), new NpcManager(this, creature), disguiseManager); _damageManager = new DamageManager(this, new CombatManager(this), new NpcManager(this, creature), disguiseManager);
@ -115,11 +116,10 @@ public class Arcade extends JavaPlugin
GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager);
CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, true); CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, true);
cosmeticManager.setInterfaceSlot(7); cosmeticManager.setInterfaceSlot(7);
new CustomTagFix(this); new CustomTagFix(this, packetHandler);
new PacketHandler(this);
//Arcade Manager //Arcade Manager
_gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), antistack, portal, preferenceManager, inventoryManager, cosmeticManager, projectileManager, webServerAddress); _gameManager = new ArcadeManager(this, serverStatusManager, ReadServerConfig(), _clientManager, _donationManager, _damageManager, disguiseManager, creature, teleport, new Blood(this), antistack, portal, preferenceManager, inventoryManager, packetHandler, cosmeticManager, projectileManager, webServerAddress);
new PlayerTracker(this, serverStatusManager.getCurrentServerName(), serverStatusManager.getUs()); new PlayerTracker(this, serverStatusManager.getCurrentServerName(), serverStatusManager.getUs());
new MemoryFix(this); new MemoryFix(this);

View File

@ -72,6 +72,7 @@ import mineplex.core.movement.Movement;
import mineplex.core.elo.EloManager; import mineplex.core.elo.EloManager;
import mineplex.core.energy.Energy; import mineplex.core.energy.Energy;
import mineplex.core.explosion.Explosion; import mineplex.core.explosion.Explosion;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.portal.Portal; import mineplex.core.portal.Portal;
import mineplex.core.preferences.PreferencesManager; import mineplex.core.preferences.PreferencesManager;
import mineplex.core.projectile.ProjectileManager; import mineplex.core.projectile.ProjectileManager;
@ -139,7 +140,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
public ArcadeManager(Arcade plugin, ServerStatusManager serverStatusManager, GameServerConfig serverConfig, public ArcadeManager(Arcade plugin, ServerStatusManager serverStatusManager, GameServerConfig serverConfig,
CoreClientManager clientManager, DonationManager donationManager, DamageManager damageManager, CoreClientManager clientManager, DonationManager donationManager, DamageManager damageManager,
DisguiseManager disguiseManager, Creature creature, Teleport teleport, Blood blood, AntiStack antistack, DisguiseManager disguiseManager, Creature creature, Teleport teleport, Blood blood, AntiStack antistack,
Portal portal, PreferencesManager preferences, InventoryManager inventoryManager, Portal portal, PreferencesManager preferences, InventoryManager inventoryManager, PacketHandler packetHandler,
CosmeticManager cosmeticManager, ProjectileManager projectileManager, String webAddress) CosmeticManager cosmeticManager, ProjectileManager projectileManager, String webAddress)
{ {
super("Game Manager", plugin); super("Game Manager", plugin);
@ -227,7 +228,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
_gameCreationManager = new GameCreationManager(this); _gameCreationManager = new GameCreationManager(this);
_gameGemManager = new GameGemManager(this); _gameGemManager = new GameGemManager(this);
_gameManager = new GameManager(this); _gameManager = new GameManager(this);
_gameLobbyManager = new GameLobbyManager(this); _gameLobbyManager = new GameLobbyManager(this, packetHandler);
new GameFlagManager(this); new GameFlagManager(this);
_gamePlayerManager = new GamePlayerManager(this); _gamePlayerManager = new GamePlayerManager(this);
new GameAchievementManager(this); new GameAchievementManager(this);
@ -236,7 +237,6 @@ public class ArcadeManager extends MiniPlugin implements IRelation
new IdleManager(this); new IdleManager(this);
_leaderboardRepository = new LeaderboardRepository(plugin); _leaderboardRepository = new LeaderboardRepository(plugin);
// Game Addons // Game Addons
new CompassAddon(plugin, this); new CompassAddon(plugin, this);
new SoupAddon(plugin, this); new SoupAddon(plugin, this);

View File

@ -52,8 +52,10 @@ import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilWorld;
import mineplex.core.cosmetic.event.ActivateGemBoosterEvent; import mineplex.core.cosmetic.event.ActivateGemBoosterEvent;
import mineplex.core.donation.Donor; import mineplex.core.donation.Donor;
import mineplex.core.packethandler.IPacketHandler;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.packethandler.PacketVerifier; import mineplex.core.packethandler.PacketVerifier;
import mineplex.core.packethandler.PlayerPacketEvent; import mineplex.core.packethandler.PacketInfo;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent;
@ -66,13 +68,11 @@ import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.KitSorter; import nautilus.game.arcade.kit.KitSorter;
import net.minecraft.server.v1_7_R4.DataWatcher;
import net.minecraft.server.v1_7_R4.Packet; import net.minecraft.server.v1_7_R4.Packet;
import net.minecraft.server.v1_7_R4.PacketPlayOutEntityMetadata; import net.minecraft.server.v1_7_R4.PacketPlayOutEntityMetadata;
import net.minecraft.server.v1_7_R4.PacketPlayOutSpawnEntityLiving;
import net.minecraft.server.v1_7_R4.WatchableObject; import net.minecraft.server.v1_7_R4.WatchableObject;
public class GameLobbyManager implements Listener public class GameLobbyManager implements Listener, IPacketHandler
{ {
public ArcadeManager Manager; public ArcadeManager Manager;
@ -107,10 +107,12 @@ public class GameLobbyManager implements Listener
private boolean _handlingPacket = false; private boolean _handlingPacket = false;
public GameLobbyManager(ArcadeManager manager) public GameLobbyManager(ArcadeManager manager, PacketHandler packetHandler)
{ {
Manager = manager; Manager = manager;
packetHandler.addPacketHandler(this);
World world = UtilWorld.getWorld("world"); World world = UtilWorld.getWorld("world");
spawn = new Location(world, 0, 104, 0); spawn = new Location(world, 0, 104, 0);
@ -1031,15 +1033,14 @@ public class GameLobbyManager implements Listener
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@EventHandler public void handle(PacketInfo packetInfo)
public void handlePacket(PlayerPacketEvent event)
{ {
if (_handlingPacket) if (_handlingPacket)
return; return;
Packet packet = event.getPacket(); Packet packet = packetInfo.getPacket();
Player owner = event.getPlayer(); Player owner = packetInfo.getPlayer();
PacketVerifier packetVerifier = event.getVerifier(); PacketVerifier packetVerifier = packetInfo.getVerifier();
int entityId = -1; int entityId = -1;
@ -1090,7 +1091,7 @@ public class GameLobbyManager implements Listener
packetVerifier.process(newPacket); packetVerifier.process(newPacket);
_handlingPacket = false; _handlingPacket = false;
event.setCancelled(true); packetInfo.setCancelled(true);
} }
} }
catch (IllegalArgumentException e) catch (IllegalArgumentException e)

Binary file not shown.