Merge branch 'clans/beta' into develop

This commit is contained in:
Jonathan Williams 2016-04-15 12:41:14 -05:00
commit 2b2b251548
40 changed files with 867 additions and 691 deletions

View File

@ -216,6 +216,24 @@ public class UtilAlg
return true;
}
public static boolean inBoundingBox(Location loc, Vector cornerA, Vector cornerB)
{
if (loc.getX() <= Math.min(cornerA.getX(), cornerB.getX())) return false;
if (loc.getX() >= Math.max(cornerA.getX(), cornerB.getX())) return false;
if (cornerA.getY() != cornerB.getY())
{
if (loc.getY() <= Math.min(cornerA.getY(), cornerB.getY())) return false;
if (loc.getY() >= Math.max(cornerA.getY(), cornerB.getY())) return false;
}
if (loc.getZ() <= Math.min(cornerA.getZ(), cornerB.getZ())) return false;
if (loc.getZ() >= Math.max(cornerA.getZ(), cornerB.getZ())) return false;
return true;
}
public static Vector cross(Vector a, Vector b)
{
double x = a.getY()*b.getZ() - a.getZ()*b.getY();

View File

@ -1480,4 +1480,28 @@ public class UtilBlock
IBlockData ibd = net.minecraft.server.v1_8_R3.Block.getById(type).fromLegacyData(data);
chunk.a(pos, ibd);
}
/**
* @return true if all of the blocks within the specified radius of the specified origin block are boundless ({@link UtilItem#isBoundless}.)
*/
public static boolean boundless(Location origin, double radius)
{
for (Block block : getInRadius(origin, radius).keySet())
{
if (!UtilItem.isBoundless(block.getType()))
{
return false;
}
}
return true;
}
/**
* @return true if there are any non-boundless ({@link UtilItem#isBoundless}) blocks within the specified radius of the specified origin block.
*/
public static boolean boundless(Block origin, double radius)
{
return boundless(origin.getLocation(), radius);
}
}

View File

@ -2,18 +2,20 @@ package mineplex.core.common.util;
import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldBorder;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.util.Vector;
import com.google.common.collect.Lists;
import net.minecraft.server.v1_8_R3.AxisAlignedBB;
public class UtilWorld
{
public static World getWorld(String world)
@ -210,4 +212,81 @@ public class UtilWorld
origin.getBlock().getRelative(BlockFace.WEST));
}
/**
* This method will use the World provided by the given Location.<p>
* @return <b>true</b> if the specified location is within the bounds of the
* world's set border, or <b>false</b> if {@link World#getWorldBorder()} returns null.
*/
public static boolean inWorldBorder(Location location)
{
WorldBorder border = location.getWorld().getWorldBorder();
if (border == null)
{
return false;
}
double size = border.getSize() / 2;
double maxX = size;
double maxZ = size;
double minX = -size;
double minZ = -size;
return location.getX() >= minX && location.getX() <= maxX && location.getZ() >= minZ && location.getZ() <= maxZ;
}
/**
* This method will use the World specified by the second argument, and the
* x, y, and z provided by the given Location.<p>
* @return <b>true</b> if the specified location is within the bounds of the
* world's set border, or <b>false</b> if {@link World#getWorldBorder()} returns null.
*/
public static boolean inWorldBorder(World world, Location location)
{
WorldBorder border = world.getWorldBorder();
if (border == null)
{
return false;
}
double size = border.getSize() / 2;
double maxX = size;
double maxZ = size;
double minX = -size;
double minZ = -size;
return location.getX() >= minX && location.getX() <= maxX && location.getZ() >= minZ && location.getZ() <= maxZ;
}
/**
* @return <b>true</b> if the specified bounding box is within the bounds of the
* world's set border, or <b>false</b> if {@link World#getWorldBorder()} returns null.
*/
public static boolean isBoxInWorldBorder(World world, Location min, Location max)
{
WorldBorder border = world.getWorldBorder();
if (border == null)
{
return false;
}
double size = border.getSize() / 2;
double maxX = size;
double maxZ = size;
double minX = -size;
double minZ = -size;
double startX = Math.min(min.getX(), max.getX());
double startZ = Math.min(min.getZ(), max.getZ());
double endX = Math.max(min.getX(), max.getX());
double endZ = Math.max(min.getZ(), max.getZ());
return startX >= minX && startZ <= maxX && endX >= minZ && endZ <= maxZ;
}
}

View File

@ -2,8 +2,6 @@ package mineplex.core.incognito;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -13,8 +11,6 @@ import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import com.google.common.base.Function;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank;
@ -27,6 +23,7 @@ import mineplex.core.incognito.events.IncognitoStatusChangeEvent;
import mineplex.core.incognito.repository.IncognitoClient;
import mineplex.core.incognito.repository.IncognitoRepository;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.preferences.PreferencesManager;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
@ -34,11 +31,12 @@ public class IncognitoManager extends MiniDbClientPlugin<IncognitoClient>
{
private CoreClientManager _clientManager;
private IncognitoRepository _repository;
private PreferencesManager _preferencesManager;
public IncognitoManager(JavaPlugin plugin, CoreClientManager clientManager, PacketHandler packetHandler)
{
super("Incognito", plugin, clientManager);
_repository = new IncognitoRepository(this);
_clientManager = clientManager;
}
@ -131,6 +129,41 @@ public class IncognitoManager extends MiniDbClientPlugin<IncognitoClient>
}
}
}
@EventHandler
public void update(UpdateEvent event)
{
if (event.getType() != UpdateType.FAST)
{
return;
}
for (Player player : UtilServer.getPlayers())
{
for (Player other : UtilServer.getPlayers())
{
if (Get(player).Status)
{
IncognitoHidePlayerEvent customEvent = UtilServer.CallEvent(new IncognitoHidePlayerEvent(player));
if (!customEvent.isCancelled() && !_clientManager.hasRank(other, _clientManager.Get(player).GetRank()))
{
other.hidePlayer(player);
}
}
if (Get(other).Status)
{
IncognitoHidePlayerEvent customEvent = UtilServer.CallEvent(new IncognitoHidePlayerEvent(other));
if (!customEvent.isCancelled() && !_clientManager.hasRank(player, _clientManager.Get(other).GetRank()))
{
player.hidePlayer(other);
}
}
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void Quit(PlayerQuitEvent event)
@ -182,4 +215,14 @@ public class IncognitoManager extends MiniDbClientPlugin<IncognitoClient>
Get(playerName).Status = resultSet.getInt("status") == 1;
}
}
public PreferencesManager getPreferences()
{
return _preferencesManager;
}
public void setPreferencesManager(PreferencesManager preferencesManager)
{
_preferencesManager = preferencesManager;
}
}

View File

@ -18,6 +18,12 @@ public class IncognitoToggleCommand extends CommandBase<IncognitoManager>
@Override
public void Execute(Player caller, String[] args)
{
if (Plugin.getPreferences().Get(caller).Invisibility)
{
UtilPlayer.message(caller, F.main("Incognito", "You are not allowed to toggle incognito on while Hub Invisibility is enabled."));
return;
}
if (Plugin.toggle(caller))
{
UtilPlayer.message(caller, F.main("Incognito", "You are now incognito. Your status will only change when you run " + F.elem(AliasUsed) + " again."));

View File

@ -4,20 +4,6 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map.Entry;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.C;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.donation.DonationManager;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.preferences.command.PreferencesCommand;
import mineplex.core.preferences.ui.ExclusivePreferencesShop;
import mineplex.core.preferences.ui.PreferencesShop;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
@ -29,17 +15,35 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniDbClientPlugin;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.util.C;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilInv;
import mineplex.core.donation.DonationManager;
import mineplex.core.incognito.IncognitoManager;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.packethandler.PacketHandler;
import mineplex.core.preferences.command.PreferencesCommand;
import mineplex.core.preferences.ui.ExclusivePreferencesShop;
import mineplex.core.preferences.ui.PreferencesShop;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
public class PreferencesManager extends MiniDbClientPlugin<UserPreferences>
{
private PreferencesRepository _repository;
private PreferencesShop _shop;
private ExclusivePreferencesShop _exclusiveShop;
private IncognitoManager _incognitoManager;
private NautHashMap<String, UserPreferences> _saveBuffer = new NautHashMap<String, UserPreferences>();
public boolean GiveItem;
public PreferencesManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager)
public PreferencesManager(JavaPlugin plugin, IncognitoManager incognito, CoreClientManager clientManager, DonationManager donationManager)
{
super("Preferences", plugin, clientManager);
@ -47,6 +51,8 @@ public class PreferencesManager extends MiniDbClientPlugin<UserPreferences>
_exclusiveShop = new ExclusivePreferencesShop(this, clientManager, donationManager);
_shop = new PreferencesShop(this, clientManager, donationManager, _exclusiveShop);
_incognitoManager = incognito;
_exclusiveShop.setPreferencesShop(_shop);
addCommand(new PreferencesCommand(this));
@ -138,4 +144,9 @@ public class PreferencesManager extends MiniDbClientPlugin<UserPreferences>
{
return "SELECT games, visibility, showChat, friendChat, privateMessaging, partyRequests, invisibility, forcefield, showMacReports, ignoreVelocity, pendingFriendRequests, friendDisplayInventoryUI, clanTips, hubMusic, disableAds FROM accountPreferences WHERE accountPreferences.uuid = '" + uuid + "' LIMIT 1;";
}
public IncognitoManager getIncognitoManager()
{
return _incognitoManager;
}
}

View File

@ -8,6 +8,8 @@ import org.bukkit.event.inventory.ClickType;
import mineplex.core.account.CoreClientManager;
import mineplex.core.common.Rank;
import mineplex.core.common.util.C;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilUI;
import mineplex.core.donation.DonationManager;
import mineplex.core.preferences.PreferencesManager;
@ -149,6 +151,12 @@ public class ExclusivePreferencesPage extends ShopPageBase<PreferencesManager, E
private void toggleHubInvisibility(org.bukkit.entity.Player player)
{
if (getPlugin().getIncognitoManager() != null && getPlugin().getIncognitoManager().Get(player).Status)
{
UtilPlayer.message(player, F.main("Incognito", "You are not allowed to use Hub Visibility whilst in incognito mode."));
return;
}
getPlugin().Get(player).Invisibility = !getPlugin().Get(player).Invisibility;
// Dont save for Mod/SnrMod - prevents them just being invis 24/7

View File

@ -97,8 +97,12 @@ public class Clans extends JavaPlugin
new ServerConfiguration(this, _clientManager);
PreferencesManager preferenceManager = new PreferencesManager(this, _clientManager, _donationManager);
PacketHandler packetHandler = new PacketHandler(this);
IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler);
PreferencesManager preferenceManager = new PreferencesManager(this, incognito, _clientManager, _donationManager);
incognito.setPreferencesManager(preferenceManager);
ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager));
// TODO: Add spawn locations to a configuration file of some sort?
@ -111,7 +115,6 @@ public class Clans extends JavaPlugin
// ClansBanManager clansBans = new ClansBanManager(this, _clientManager, _donationManager);
PacketHandler packetHandler = new PacketHandler(this);
Punish punish = new Punish(this, webServerAddress, _clientManager);
AntiHack.Initialize(this, punish, portal, preferenceManager, _clientManager);
AntiHack.Instance.setKick(false);
@ -120,8 +123,6 @@ public class Clans extends JavaPlugin
IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal);
IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler);
StatsManager statsManager = new StatsManager(this, _clientManager);
AchievementManager achievementManager = new AchievementManager(statsManager, _clientManager, _donationManager);
Chat chat = new Chat(this, incognito, _clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName());
@ -143,7 +144,7 @@ public class Clans extends JavaPlugin
GearManager customGear = new GearManager(this, packetHandler, _clientManager, _donationManager);
HologramManager hologram = new HologramManager(this, packetHandler);
_clansManager = new ClansManager(this, /*clansBans,*/ serverStatusManager.getCurrentServerName(), packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, webServerAddress);
_clansManager = new ClansManager(this, /*clansBans,*/ serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, webServerAddress);
new Recipes(this);
new Farming(this);
new BuildingShop(_clansManager, _clientManager, _donationManager);

View File

@ -806,7 +806,7 @@ public class ClansDataAccessLayer
public void run()
{
ClanToken clan = _repository.retrieveClan(clanName);
callback.run(clan);
runSync(() -> callback.run(clan));
}
});
}

View File

@ -522,8 +522,7 @@ public class ClansGame extends MiniPlugin
ClanInfo clan = _clans.getClanUtility().getClanByPlayer(event.getPlayer());
if (clan == null) return;
if(!clan.isOnline()) clan.setLastOnline(new Timestamp(System.currentTimeMillis())); //Noone else on
else clan.setLastOnline(new Timestamp(0));
clan.setLastOnline(new Timestamp(System.currentTimeMillis()));
}
@EventHandler(priority = EventPriority.LOWEST)

View File

@ -9,15 +9,19 @@ import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import mineplex.core.recharge.Recharge;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Player;
import org.bukkit.entity.Vehicle;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
@ -28,6 +32,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
@ -57,7 +62,6 @@ import mineplex.core.explosion.Explosion;
import mineplex.core.hologram.Hologram;
import mineplex.core.hologram.HologramManager;
import mineplex.core.incognito.IncognitoManager;
import mineplex.core.incognito.events.IncognitoHidePlayerEvent;
import mineplex.core.incognito.events.IncognitoStatusChangeEvent;
import mineplex.core.movement.Movement;
import mineplex.core.npc.NpcManager;
@ -99,7 +103,6 @@ import mineplex.game.clans.clans.redis.ClanLoadCommandHandler;
import mineplex.game.clans.clans.regions.ClansRegions;
import mineplex.game.clans.clans.scoreboard.ClansScoreboardManager;
import mineplex.game.clans.clans.siege.SiegeManager;
import mineplex.game.clans.clans.staff.SilentChestOpen;
import mineplex.game.clans.clans.supplyDrop.SupplyDropManager;
import mineplex.game.clans.clans.tntGenerator.TntGeneratorManager;
import mineplex.game.clans.clans.war.WarManager;
@ -227,7 +230,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
// Spawn area
public ClansManager(JavaPlugin plugin/*, ClansBanManager clansBans*/, String serverName, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, String webServerAddress)
public ClansManager(JavaPlugin plugin/*, ClansBanManager clansBans*/, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, String webServerAddress)
{
super("Clans Manager", plugin);
@ -236,7 +239,7 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
/*_clansBans = clansBans;*/
_punish = punish;
_incognitoManager = new IncognitoManager(plugin, clientManager, packetHandler);
_incognitoManager = incognitoManager;
_serverName = serverName;
_clientManager = clientManager;
_combatManager = new CombatManager(plugin);
@ -296,8 +299,6 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
new Field(plugin, creature, _condition, this, energy, serverName);
new SilentChestOpen(this);
// Required managers to be initialized
new Spawn(plugin, this);
new NPCManager(this, _hologramManager);
@ -1339,6 +1340,41 @@ public class ClansManager extends MiniClientPlugin<ClientClan>implements IRelati
}
@EventHandler
public void disableHorses(VehicleEnterEvent event)
{
if (event.getEntered() instanceof Player && event.getVehicle() instanceof Horse)
{
if(!Recharge.Instance.use((Player) event.getEntered(), "Ride Horse", 2 * 20L, true, false))
{
event.setCancelled(true);
}
}
}
@EventHandler
public void damageHorse(EntityDamageEvent event)
{
if (event.getEntity() instanceof Horse)
{
if (event.getEntity().getPassenger() != null && event.getEntity().getPassenger() instanceof Player)
{
event.getEntity().getPassenger().eject();
Recharge.Instance.use((Player) event.getEntity().getPassenger(), "Ride Horse", 2 * 20L, false, false);
}
event.getEntity().eject();
}
else if(event.getEntity() instanceof Player)
{
if(event.getEntity().getVehicle() != null && event.getEntity().getVehicle() instanceof Horse)
{
Recharge.Instance.use((Player) event.getEntity(), "Ride Horse", 2 * 20L, false, false);
event.getEntity().getVehicle().eject();
}
}
}
public Pair<ClanInfo, Long> leftRecently(UUID uniqueId, long time)
{
if (_clanMemberLeftMap.containsKey(uniqueId) && (System.currentTimeMillis() - _clanMemberLeftMap.get(uniqueId).getRight()) <= time)

View File

@ -1,5 +1,6 @@
package mineplex.game.clans.clans.commands;
import mineplex.game.clans.clans.ClansManager;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
@ -23,6 +24,11 @@ public class KillCommand extends CommandBase<DamageManager>
UtilPlayer.message(caller, F.main("Clans", "You cannot use this command whilst in combat."));
return;
}
if(ClansManager.getInstance().getTutorial().inTutorial(caller))
{
UtilPlayer.message(caller, F.main("Clans", "You cannot use this command whilst in the tutorial."));
return;
}
UtilPlayer.message(caller, F.main("Clans", "You have imploded."));

View File

@ -112,6 +112,7 @@ public class SiegeManager extends MiniPlugin
if (!part)
{
System.out.println("Removing slime...");
slime.remove();
}
else
@ -162,11 +163,13 @@ public class SiegeManager extends MiniPlugin
{
if (((ArmorStand) entity).getHelmet() != null && ((ArmorStand) entity).getHelmet().getType().equals(Material.SPONGE))
{
System.out.println("Removing armor stand");
entity.remove();
}
if (entity.getPassenger() != null && entity.getPassenger() instanceof Slime && entity.getPassenger().getPassenger() instanceof Slime)
{
System.out.println("Removing armostand + children");
entity.getPassenger().getPassenger().remove();
entity.getPassenger().remove();
entity.remove();

View File

@ -24,185 +24,151 @@ import mineplex.serverdata.database.column.ColumnVarChar;
public class SiegeWeaponRepository extends MinecraftRepository
{
private static final String CREATE = "CREATE TABLE IF NOT EXISTS clansSiegeWeapons (uniqueId INT NOT NULL,"
+ "serverId INT NOT NULL,"
+ "location VARCHAR(30),"
+ "ownerClan INT NOT NULL,"
+ "weaponType TINYINT NOT NULL,"
+ "health INT NOT NULL,"
+ "yaw INT NOT NULL,"
+ "lastFired LONG,"
+ "entities VARCHAR(200),"
+ "PRIMARY KEY (uniqueId));";
private static final String GET_WEAPON_BY_ID = "SELECT * FROM clansSiegeWeapons WHERE uniqueId=?;";
private static final String GET_WEAPONS_BY_CLAN = "SELECT * FROM clansSiegeWeapons WHERE ownerClan=?;";
private static final String GET_WEAPONS_BY_SERVER = "SELECT * FROM clansSiegeWeapons WHERE serverId=?;";
private static final String UPDATE_WEAPON = "UPDATE clansSiegeWeapons SET health=?,yaw=?,lastFired=? WHERE uniqueId=?;";
private static final String INSERT_WEAPON = "INSERT INTO clansSiegeWeapons VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
private static final String DELETE_WEAPON = "DELETE FROM clansSiegeWeapons WHERE uniqueId=?;";
private SiegeManager _siegeManager;
public SiegeWeaponRepository(JavaPlugin plugin, SiegeManager siegeManager)
{
super(plugin, DBPool.getAccount());
_siegeManager = siegeManager;
}
public void deleteWeapon(final int uniqueId)
{
System.out.println("Siege Repo> Deleting weapon " + uniqueId);
_siegeManager.runAsync(() ->
executeUpdate(DELETE_WEAPON, new ColumnInt("uniqueId", uniqueId))
);
}
public void getWeaponById(final int uniqueId, final Callback<SiegeWeaponToken> callback)
{
_siegeManager.runAsync(() ->
executeQuery(GET_WEAPON_BY_ID, resultSet -> {
SiegeWeaponToken token = new SiegeWeaponToken();
resultSet.next();
load(token, resultSet);
callback.run(token);
}, new ColumnInt("uniqueId", uniqueId))
);
}
public void getWeaponsByServer(final int serverId, final Callback<List<SiegeWeaponToken>> callback)
{
_siegeManager.runAsync(() ->
executeQuery(GET_WEAPONS_BY_SERVER, resultSet -> {
List<SiegeWeaponToken> tokens = Lists.newArrayList();
while (resultSet.next())
{
SiegeWeaponToken token = new SiegeWeaponToken();
load(token, resultSet);
tokens.add(token);
}
callback.run(tokens);
}, new ColumnInt("serverId", serverId))
);
}
private static final String CREATE = "CREATE TABLE IF NOT EXISTS clansSiegeWeapons (uniqueId INT NOT NULL,"
+ "serverId INT NOT NULL,"
+ "location VARCHAR(30),"
+ "ownerClan INT NOT NULL,"
+ "weaponType TINYINT NOT NULL,"
+ "health INT NOT NULL,"
+ "yaw INT NOT NULL,"
+ "lastFired LONG,"
+ "entities VARCHAR(200),"
+ "PRIMARY KEY (uniqueId));";
public void getWeaponsByClan(final ClanInfo clan, final Callback<List<SiegeWeaponToken>> callback)
{
_siegeManager.runAsync(() ->
executeQuery(GET_WEAPONS_BY_CLAN, resultSet -> {
List<SiegeWeaponToken> tokens = Lists.newArrayList();
while (resultSet.next())
{
SiegeWeaponToken token = new SiegeWeaponToken();
load(token, resultSet);
tokens.add(token);
}
callback.run(tokens);
}, new ColumnInt("ownerClan", clan.getId()))
);
}
private void load(SiegeWeaponToken token, ResultSet columns) throws SQLException
{
token.UniqueId = columns.getInt("uniqueId");
token.Location = UtilWorld.strToLoc(columns.getString("location"));
token.OwnerClan = _siegeManager.getClansManager().getClanUtility().getClanById(columns.getInt("ownerClan"));
token.WeaponType = columns.getByte("weaponType");
token.Health = columns.getShort("health");
token.Yaw = columns.getShort("yaw");
token.LastFired = columns.getTimestamp("lastFired").getTime();
token.Entities = decodeEntities(columns.getString("entities"));
System.out.println("Siege Repo> Loaded weapon " + token.UniqueId);
}
private static final String GET_WEAPON_BY_ID = "SELECT * FROM clansSiegeWeapons WHERE uniqueId=?;";
private static final String GET_WEAPONS_BY_CLAN = "SELECT * FROM clansSiegeWeapons WHERE ownerClan=?;";
private static final String GET_WEAPONS_BY_SERVER = "SELECT * FROM clansSiegeWeapons WHERE serverId=?;";
public void updateWeapon(SiegeWeaponToken token)
{
System.out.println("Siege Repo> Updating weapon " + token.UniqueId);
_siegeManager.runAsync(() ->
executeUpdate(UPDATE_WEAPON,
new ColumnInt("health", token.Health),
new ColumnInt("yaw", token.Yaw),
new ColumnTimestamp("lastFired", new Timestamp(token.LastFired)),
new ColumnInt("uniqueId", token.UniqueId))
);
}
private static final String UPDATE_WEAPON = "UPDATE clansSiegeWeapons SET health=?,yaw=?,lastFired=? WHERE uniqueId=?;";
private static final String INSERT_WEAPON = "INSERT INTO clansSiegeWeapons VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);";
public void insertWeapon(SiegeWeaponToken token)
{
System.out.println("Siege Repo> Inserting new weapon " + token.UniqueId);
_siegeManager.runAsync(() ->
executeUpdate(INSERT_WEAPON,
new ColumnInt("uniqueId", token.UniqueId),
new ColumnInt("serverId", _siegeManager.getClansManager().getServerId()),
new ColumnVarChar("location", 30, UtilWorld.locToStr(token.Location)),
new ColumnInt("ownerClan", token.OwnerClan.getId()),
new ColumnInt("weaponType", token.WeaponType),
new ColumnInt("health", token.Health),
new ColumnInt("yaw", token.Yaw),
new ColumnTimestamp("lastFired", new Timestamp(token.LastFired)),
new ColumnVarChar("entities", 100, encodeEntities(token.Entities)))
);
}
private String encodeEntities(Map<String, String> entities)
{
StringBuilder builder = new StringBuilder();
int l = 0;
for (String name : entities.keySet())
{
if (l != 0)
{
builder.append(",");
}
builder.append(name + ":" + entities.get(name));
l++;
}
return builder.toString();
}
private Map<String, String> decodeEntities(String data)
{
Map<String, String> map = new HashMap<>();
for (String entries : data.split(","))
{
map.put(entries.split(":")[0], entries.split(":")[1]);
}
return map;
}
private static final String DELETE_WEAPON = "DELETE FROM clansSiegeWeapons WHERE uniqueId=?;";
@Override
protected void initialize()
{
_siegeManager.runAsync(() ->
executeUpdate(CREATE)
);
}
private SiegeManager _siegeManager;
@Override
protected void update()
{
}
public SiegeWeaponRepository(JavaPlugin plugin, SiegeManager siegeManager)
{
super(plugin, DBPool.getAccount());
_siegeManager = siegeManager;
}
public void deleteWeapon(final int uniqueId)
{
System.out.println("Siege Repo> Deleting weapon " + uniqueId);
_siegeManager.runAsync(() ->
executeUpdate(DELETE_WEAPON, new ColumnInt("uniqueId", uniqueId))
);
}
public void getWeaponById(final int uniqueId, final Callback<SiegeWeaponToken> callback)
{
_siegeManager.runAsync(() ->
executeQuery(GET_WEAPON_BY_ID, resultSet -> {
SiegeWeaponToken token = new SiegeWeaponToken();
resultSet.next();
load(token, resultSet);
callback.run(token);
}, new ColumnInt("uniqueId", uniqueId))
);
}
public void getWeaponsByServer(final int serverId, final Callback<List<SiegeWeaponToken>> callback)
{
_siegeManager.runAsync(() ->
executeQuery(GET_WEAPONS_BY_SERVER, resultSet -> {
List<SiegeWeaponToken> tokens = Lists.newArrayList();
while (resultSet.next())
{
SiegeWeaponToken token = new SiegeWeaponToken();
load(token, resultSet);
tokens.add(token);
}
callback.run(tokens);
}, new ColumnInt("serverId", serverId))
);
}
public void getWeaponsByClan(final ClanInfo clan, final Callback<List<SiegeWeaponToken>> callback)
{
_siegeManager.runAsync(() ->
executeQuery(GET_WEAPONS_BY_CLAN, resultSet -> {
List<SiegeWeaponToken> tokens = Lists.newArrayList();
while (resultSet.next())
{
SiegeWeaponToken token = new SiegeWeaponToken();
load(token, resultSet);
tokens.add(token);
}
callback.run(tokens);
}, new ColumnInt("ownerClan", clan.getId()))
);
}
private void load(SiegeWeaponToken token, ResultSet columns) throws SQLException
{
token.UniqueId = columns.getInt("uniqueId");
token.Location = UtilWorld.strToLoc(columns.getString("location"));
token.OwnerClan = _siegeManager.getClansManager().getClanUtility().getClanById(columns.getInt("ownerClan"));
token.WeaponType = columns.getByte("weaponType");
token.Health = columns.getShort("health");
token.Yaw = columns.getShort("yaw");
token.LastFired = columns.getTimestamp("lastFired").getTime();
System.out.println("Siege Repo> Loaded weapon " + token.UniqueId);
}
public void updateWeapon(SiegeWeaponToken token)
{
System.out.println("Siege Repo> Updating weapon " + token.UniqueId);
_siegeManager.runAsync(() ->
executeUpdate(UPDATE_WEAPON,
new ColumnInt("health", token.Health),
new ColumnInt("yaw", token.Yaw),
new ColumnTimestamp("lastFired", new Timestamp(token.LastFired)),
new ColumnInt("uniqueId", token.UniqueId))
);
}
public void insertWeapon(SiegeWeaponToken token)
{
System.out.println("Siege Repo> Inserting new weapon " + token.UniqueId);
_siegeManager.runAsync(() ->
executeUpdate(INSERT_WEAPON,
new ColumnInt("uniqueId", token.UniqueId),
new ColumnInt("serverId", _siegeManager.getClansManager().getServerId()),
new ColumnVarChar("location", 30, UtilWorld.locToStr(token.Location)),
new ColumnInt("ownerClan", token.OwnerClan.getId()),
new ColumnInt("weaponType", token.WeaponType),
new ColumnInt("health", token.Health),
new ColumnInt("yaw", token.Yaw),
new ColumnTimestamp("lastFired", new Timestamp(token.LastFired)),
new ColumnVarChar("entities", 100, ""))
);
}
@Override
protected void initialize()
{
executeUpdate(CREATE);
}
@Override
protected void update()
{
}
}

View File

@ -16,6 +16,5 @@ public class SiegeWeaponToken
public int Health;
public int Yaw;
public long LastFired;
public Map<String, String> Entities;
}

View File

@ -1,8 +1,6 @@
package mineplex.game.clans.clans.siege.weapon;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map.Entry;
import org.bukkit.Location;
import org.bukkit.Material;
@ -39,7 +37,6 @@ import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.siege.SiegeManager;
import mineplex.game.clans.clans.siege.events.SiegeWeaponExplodeEvent;
import mineplex.game.clans.clans.siege.repository.tokens.SiegeWeaponToken;
import mineplex.game.clans.clans.siege.weapon.projectile.ProjectileAttributes;
import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile;
import mineplex.game.clans.clans.siege.weapon.util.AccessRule;
import mineplex.game.clans.clans.siege.weapon.util.AccessType;
@ -55,6 +52,13 @@ public class Cannon extends SiegeWeapon
{
super(300, "Cannon", token, siegeManager.getClansManager(), siegeManager);
if (_ownerClan == null)
{
System.out.println("[cannon] owner clan null, killing");
kill();
return;
}
System.out.println("Siege> Loading Cannon from token " + token.UniqueId);
setBoundingBox(1);
@ -69,8 +73,6 @@ public class Cannon extends SiegeWeapon
_baseDamage = 650;
setProjectileAttributes(new ProjectileAttributes().setPrimedTnt().setDoCrater().craterSize(3).craterChanceOfAir(2.d));
setFireRule(new AccessRule(AccessType.LCLICK_BB, player -> {
if (!isRiding(player))
{
@ -107,11 +109,11 @@ public class Cannon extends SiegeWeapon
enableInventory(UtilServer.getServer().createInventory(null, InventoryType.DISPENSER, C.cDAquaB + _name), new AccessRule(AccessType.RCLICK_BB, player -> player.equals(getRider())));
setRideable(new AccessRule(AccessType.RCLICK_BB, player -> {
// if (!_ownerClan.isMember(player))
// {
// UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan."));
// return false;
// }
if (!_ownerClan.isMember(player))
{
UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan."));
return false;
}
if (getRider() != null && !getRider().equals(player))
{
@ -140,7 +142,7 @@ public class Cannon extends SiegeWeapon
setStateInfo("Unloaded", new WeaponStateInfo(Material.SPONGE, (byte) 1));
setStateInfo("Loaded", new WeaponStateInfo(Material.SPONGE, (byte) 0));
loadEntities();
loadEntities(true);
setFirepowerType(Material.SULPHUR);
setAmmunitionType(Material.TNT);
@ -153,8 +155,6 @@ public class Cannon extends SiegeWeapon
_baseDamage = 650;
setProjectileAttributes(new ProjectileAttributes().setPrimedTnt().setDoCrater().craterSize(3).craterChanceOfAir(2.d));
setFireRule(new AccessRule(AccessType.LCLICK_BB, player -> {
if (!isRiding(player))
{
@ -179,9 +179,9 @@ public class Cannon extends SiegeWeapon
return false;
}
if (System.currentTimeMillis() - _lastFired < 20000)
if (System.currentTimeMillis() - _lastFired < 30000)
{
UtilPlayer.message(player, F.main("Clans", "Cannon is cooling down (" + F.time(UtilTime.MakeStr(20000 - (System.currentTimeMillis() - _lastFired))) + ")"));
UtilPlayer.message(player, F.main("Clans", "Cannon is cooling down (" + F.time(UtilTime.MakeStr(30000 - (System.currentTimeMillis() - _lastFired))) + ")"));
return false;
}
@ -191,11 +191,11 @@ public class Cannon extends SiegeWeapon
enableInventory(UtilServer.getServer().createInventory(null, InventoryType.DISPENSER, C.cDAquaB + _name), new AccessRule(AccessType.RCLICK_BB, player -> player.equals(getRider())));
setRideable(new AccessRule(AccessType.RCLICK_BB, player -> {
// if (!_ownerClan.isMember(player))
// {
// UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan."));
// return false;
// }
if (!_ownerClan.isMember(player))
{
UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan."));
return false;
}
if (getRider() != null && !getRider().equals(player))
{
@ -298,7 +298,7 @@ public class Cannon extends SiegeWeapon
return true; // all slots are now filled; slot == 0 || slot == 1 || slot == 2;
}
private void loadEntities()
private void loadEntities(boolean insert)
{
Slime filler = _location.getWorld().spawn(_location.clone(), Slime.class);
@ -332,8 +332,10 @@ public class Cannon extends SiegeWeapon
addEntity(weapon, "WEAPON");
insert();
if (insert)
{
insert();
}
}
@Override
@ -341,29 +343,24 @@ public class Cannon extends SiegeWeapon
{
Lists.newArrayList(_location.getWorld().getEntities())
.forEach(entity -> {
for (Entry<String, String> entry : _loadedToken.Entities.entrySet())
if (Integer.toString(_uniqueId).equals(entity.getCustomName()))
{
if (entity.getUniqueId().toString().equals(entry.getValue()))
{
addEntity(entity, entry.getKey());
}
entity.remove();
}
});
if (getEntity("WEAPON") == null || getEntity("Filler_1") == null || getEntity("PLAYERMOUNT") == null)
{
System.out.println("[Cannon] Could not find all entities, killing.");
kill();
}
loadEntities(false);
}
@Override
public void CustomFire(WeaponProjectile projectile)
protected WeaponProjectile CustomFire(double yawRot, double verticalVel, double horizontalVel)
{
projectile.setLocation(projectile.getLocation().add(.0, .2, .0));
Location location = UtilAlg.moveForward(new Location(_location.getWorld(), _location.getX(), _location.getY() + .2, _location.getZ(), (float) yawRot, (float) 0), 0.35, (float) yawRot, false);
UtilParticle.PlayParticleToAll(ParticleType.LARGE_EXPLODE, projectile.getLocation(), new Vector(0, 0, 0), .1f, 2, ViewDist.MAX);
UtilServer.getServer().getOnlinePlayers().forEach(player -> player.playSound(projectile.getLocation(), Sound.EXPLODE, 1.f, 1.f));
UtilParticle.PlayParticleToAll(ParticleType.LARGE_EXPLODE, location, new Vector(0, 0, 0), .1f, 2, ViewDist.MAX);
UtilServer.getServer().getOnlinePlayers().forEach(player -> player.playSound(location, Sound.EXPLODE, 1.f, 1.f));
return new TntProjectile(this, location, yawRot, verticalVel, horizontalVel);
}
@Override
@ -428,12 +425,12 @@ public class Cannon extends SiegeWeapon
@EventHandler
public void explosionEffects(SiegeWeaponExplodeEvent event)
{
for (int i = 0; i < 8; i++)
{
// Explosion particle effects.
Location point = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 5);
UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, point, 0, 0, 0, 1, 2, ViewDist.MAX);
}
// for (int i = 0; i < 8; i++)
// {
// // Explosion particle effects.
// Location point = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 5);
// UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, point, 0, 0, 0, 1, 2, ViewDist.MAX);
// }
// Block explosion.
ArrayList<Block> blocks = new ArrayList<>();
@ -441,6 +438,12 @@ public class Cannon extends SiegeWeapon
while (blocks.size() < 10 && (attempts < 30))
{
Block block = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), (4 * getPowerLevel())).getBlock();
if (_siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()) != null && !_siegeManager.getClansManager().getBlacklist().allowed(_siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()).Owner))
{
continue;
}
if ((block.getType() != Material.AIR) && (!blocks.contains(block)))
{
blocks.add(block);
@ -449,9 +452,10 @@ public class Cannon extends SiegeWeapon
attempts++;
}
_siegeManager.getClansManager().getExplosion().BlockExplosion(
_clans.getExplosion().BlockExplosion(
blocks,
event.getProjectile().getLocation(),
false,
false
);
}

View File

@ -1,6 +1,5 @@
package mineplex.game.clans.clans.siege.weapon;
import java.util.HashMap;
import java.util.UUID;
import org.apache.commons.lang.Validate;
@ -49,12 +48,12 @@ import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.event.ClanDeleteEvent;
import mineplex.game.clans.clans.siege.SiegeManager;
import mineplex.game.clans.clans.siege.events.LoadSiegeWeaponEvent;
import mineplex.game.clans.clans.siege.events.MountSiegeWeaponEvent;
import mineplex.game.clans.clans.siege.events.SiegeWeaponExplodeEvent;
import mineplex.game.clans.clans.siege.repository.tokens.SiegeWeaponToken;
import mineplex.game.clans.clans.siege.weapon.projectile.ProjectileAttributes;
import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile;
import mineplex.game.clans.clans.siege.weapon.util.AccessRule;
import mineplex.game.clans.clans.siege.weapon.util.AccessType;
@ -138,7 +137,6 @@ public abstract class SiegeWeapon implements Listener
protected int _baseDamage;
protected ProjectileAttributes _projectileAttributes;
protected WeaponProjectile _projectile;
public SiegeWeapon(int maxHealth, String name, SiegeWeaponToken token, ClansManager clansManager, SiegeManager siegeManager)
@ -328,7 +326,7 @@ public abstract class SiegeWeapon implements Listener
_inventory.clear();
CustomFire(_projectile = new WeaponProjectile(this, _location.clone().add(.5, 0, .5), _projectileAttributes, ((ArmorStand) getEntity("WEAPON")).getHeadPose().getY(), vel[0], vel[1]));
_projectile = CustomFire(((ArmorStand) getEntity("WEAPON")).getHeadPose().getY(), vel[0], vel[1]);
}
protected void setFireRule(AccessRule rule)
@ -366,11 +364,6 @@ public abstract class SiegeWeapon implements Listener
_maxAmmunition = maxAmmunition;
}
protected void setProjectileAttributes(ProjectileAttributes projectileAttributes)
{
_projectileAttributes = projectileAttributes;
}
protected boolean isRiding(Player player)
{
return player.equals(getRider());
@ -523,19 +516,22 @@ public abstract class SiegeWeapon implements Listener
protected abstract double[] GetProjectileVelocity();
protected abstract String GetNextState();
protected abstract void FindEntities();
protected abstract WeaponProjectile CustomFire(double yawRot, double verticalVel, double horizontalVel);
protected void CustomTick() { return; }
protected void CustomOnMount(Player player) { return; }
protected void CustomLeftClick(Player player) { return; }
protected void CustomRightClick(Player player) { return; }
protected void CustomCleanup() { return; }
protected void CustomUpdateState(String state) { return; }
protected void CustomFire(WeaponProjectile projectile) { return; }
protected double CustomRotate(double yaw) { return yaw; }
protected boolean CustomDismount(Player player, Entity entity) { return false; }
protected boolean CustomMount(Player player) { return false; }
protected final void addEntity(Entity entity, String uniqueName)
{
entity.setCustomName(Integer.toString(_uniqueId));
entity.setCustomNameVisible(false);
_comprisedOf.add(entity);
_entityMapping.put(uniqueName, entity);
@ -691,6 +687,16 @@ public abstract class SiegeWeapon implements Listener
}
}
@EventHandler
public void clanDelete(ClanDeleteEvent event)
{
if (event.getClanInfo().getName().equals(_ownerClan.getName()))
{
System.out.println("Killing Siege weapon " + _uniqueId + " because owner clan has been deleted.");
kill();
}
}
@EventHandler
public void onSiegeWeaponExplode(SiegeWeaponExplodeEvent event)
{
@ -942,29 +948,19 @@ public abstract class SiegeWeapon implements Listener
token.Location = _location;
token.Health = _health;
token.Yaw = (int) _yaw;
token.Entities = new HashMap<>();
_entityMapping.entrySet().forEach(entry ->
token.Entities.put(entry.getKey(), entry.getValue().getUniqueId().toString())
);
return token;
}
public boolean isPartOf(UUID uniqueId)
{
if (_loadedToken == null)
for (Entity entity : _comprisedOf)
{
for (Entity entity : _comprisedOf)
{
if (entity.getUniqueId().equals(uniqueId))
return true;
}
return false;
if (entity.getUniqueId().equals(uniqueId))
return true;
}
return _loadedToken.Entities.values().contains(uniqueId.toString());
return false;
}
public void setInvincible(boolean invincible)

View File

@ -0,0 +1,63 @@
package mineplex.game.clans.clans.siege.weapon;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.util.Vector;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile;
public class TntProjectile extends WeaponProjectile
{
public TntProjectile(SiegeWeapon weapon, Location origin, double yawRot, double yVel, double xMulti)
{
super(weapon, origin, yawRot, yVel, xMulti);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onTntExplode(EntityExplodeEvent event)
{
if (event.getEntity().equals(_projectileEntity))
{
((TNTPrimed) event.getEntity()).setFuseTicks(60);
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onTntExplode(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
{
return;
}
((TNTPrimed) _projectileEntity).setFuseTicks(60);
}
@Override
public Entity spawn()
{
TNTPrimed tnt = _origin.getWorld().spawn(_origin, TNTPrimed.class);
Vector velocity = UtilAlg.getTrajectory(
_origin,
UtilAlg.moveForward(
_origin,
2.,
(float) Math.toDegrees(_yawRot), false))
.multiply(_xMulti)
.setY(_yVel);
tnt.setVelocity(velocity);
return tnt;
}
}

View File

@ -26,9 +26,9 @@ import mineplex.core.common.util.UtilServer;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.nameblacklist.ClansBlacklist;
import mineplex.game.clans.clans.siege.weapon.SiegeWeapon;
import mineplex.game.clans.core.repository.ClanTerritory;
import net.minecraft.server.v1_8_R3.Explosion;
public class Crater implements Listener
{
@ -39,14 +39,9 @@ public class Crater implements Listener
private final long _birthTime;
private final int _size;
private final double _airChance;
private final boolean _fire;
private final List<CraterBlock> _blocks;
public Crater(SiegeWeapon weapon, WeaponProjectile projectile, Location origin, int size, double airChance, boolean doFire)
public Crater(SiegeWeapon weapon, WeaponProjectile projectile, Location origin)
{
_weapon = weapon;
_origin = origin;
@ -54,10 +49,6 @@ public class Crater implements Listener
_birthTime = System.currentTimeMillis();
_blocks = new ArrayList<>();
_size = size;
_airChance = airChance;
_fire = doFire;
UtilServer.getPluginManager().registerEvents(this, _weapon.getClans().getPlugin());
createExplosion();
@ -108,124 +99,57 @@ public class Crater implements Listener
return;
}
_blocks.add(new CraterBlock(_origin, 0, Material.AIR));
boolean explosion = _origin.getWorld().createExplosion(_origin, 2.6f);
HashMap<Block, Double> blockList = new HashMap<Block, Double>();
int iR = (int) _size + 1;
boolean floating = _origin.distance(UtilBlock.nearestFloor(_origin)) > 0.6;
for (int x = -iR; x <= iR; x++)
if (explosion)
{
for (int z = -iR; z <= iR; z++)
for (Block block : UtilBlock.getInRadius(_origin.getBlock(), 2.6f).keySet())
{
for (int y = -iR; y <= iR; y++)
boolean charred = false;
double dist = block.getLocation().distance(_origin);
if (floating)
{
Block curBlock = _origin.getBlock().getRelative(x, y, z);
double offset = UtilMath.offset(_origin, curBlock.getLocation());
if (offset <= _size)
if (!block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE)
&& !block.getRelative(BlockFace.DOWN).getType().equals(Material.AIR)
&& Math.random() > 0.79)
{
blockList.put(curBlock, Double.valueOf(offset));
charred = true;
}
}
else
{
if (block.getRelative(BlockFace.UP).getType().equals(Material.AIR)
&& !block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE)
&& !block.getRelative(BlockFace.DOWN).getType().equals(Material.AIR)
&& Math.random() > 0.79)
{
charred = true;
}
}
if (block.getType().equals(Material.SMOOTH_BRICK))
{
charred = false;
}
if (block.getType().equals(Material.BEDROCK))
{
charred = false;
}
if (charred)
{
CraterBlock charredBlock = new CraterBlock(block.getLocation(), dist, CHARRED_TYPE, (byte) 0);
charredBlock.set();
_blocks.add(charredBlock);
}
}
}
for (Entry<Block, Double> entry : blockList.entrySet())
{
Block block = entry.getKey();
ClanTerritory territory = _weapon.getClans().getClanUtility().getClaim(block.getLocation());
if (territory != null && !ClansManager.getInstance().getBlacklist().allowed(territory.Owner))
{
continue;
}
double distance = entry.getValue().doubleValue();
boolean air = distance <= _airChance || (Math.random() > (distance) / 3.65d);
if (block.getState() instanceof Chest) continue;
if (block.getType() == Material.AIR) continue;
if (air)
{
_blocks.add(new CraterBlock(block.getLocation(), distance, Material.AIR));
Block above = block;
while (!UtilItem.isBoundless((above = above.getRelative(BlockFace.UP)).getType()))
{
_blocks.add(new CraterBlock(above.getLocation(), distance, Material.AIR));
}
if (!UtilItem.isBoundless(block.getRelative(BlockFace.DOWN).getType()))
{
if (_fire && Math.random() >= .5)
{
_blocks.add(new CraterBlock(block.getLocation(), distance, Material.FIRE));
}
}
}
}
_blocks.forEach(CraterBlock::set);
for (Entry<Block, Double> entry : blockList.entrySet())
{
Block block = entry.getKey();
ClanTerritory territory = _weapon.getClans().getClanUtility().getClaim(block.getLocation());
if (territory != null && !ClansManager.getInstance().getBlacklist().allowed(territory.Owner))
{
continue;
}
double distance = entry.getValue().doubleValue();
if (block.getType() == Material.AIR) continue;
if (block.getState() instanceof Chest)
{
Chest chest = (Chest) block.getState();
for (ItemStack item : chest.getBlockInventory().getContents())
{
if (item == null)
{
continue;
}
if (item.getType() == Material.AIR)
{
continue;
}
_origin.getWorld().dropItemNaturally(_origin, item);
}
}
if (
distance > _airChance &&
Math.random() > .75 &&
UtilItem.isBoundless(block.getRelative(BlockFace.UP).getType()) &&
!UtilItem.isBoundless(block.getRelative(BlockFace.DOWN).getType()) &&
!block.getRelative(BlockFace.UP).getType().equals(CHARRED_TYPE) &&
!block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE))
{
_blocks.add(new CraterBlock(block.getLocation(), distance, CHARRED_TYPE));
if (_fire)
{
_blocks.add(new CraterBlock(block.getRelative(BlockFace.UP).getLocation(), distance, Material.FIRE));
}
}
}
_blocks.forEach(CraterBlock::set);
}
}

View File

@ -1,75 +0,0 @@
package mineplex.game.clans.clans.siege.weapon.projectile;
import org.bukkit.Material;
public class ProjectileAttributes
{
protected boolean _isFallingBlock;
protected Material _fallingBlockType;
protected byte _fallingBlockData;
protected boolean _isPrimedTnt;
protected boolean _doCrater;
protected int _craterSize;
protected double _craterChanceOfAir;
protected boolean _craterDoFire;
public ProjectileAttributes setFallingBlock()
{
_isFallingBlock = true;
return this;
}
public ProjectileAttributes setFallingBlockType(Material type)
{
_fallingBlockType = type;
return this;
}
public ProjectileAttributes setFallingBlockData(byte data)
{
_fallingBlockData = data;
return this;
}
public ProjectileAttributes setPrimedTnt()
{
_isPrimedTnt = true;
return this;
}
public ProjectileAttributes setDoCrater()
{
_doCrater = true;
return this;
}
public ProjectileAttributes craterSize(int size)
{
_craterSize = size;
return this;
}
public ProjectileAttributes craterDoFire(boolean doFire)
{
_craterDoFire = doFire;
return this;
}
public ProjectileAttributes craterChanceOfAir(double chance)
{
_craterChanceOfAir = chance;
return this;
}
}

View File

@ -23,55 +23,33 @@ import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.siege.events.SiegeWeaponExplodeEvent;
import mineplex.game.clans.clans.siege.weapon.SiegeWeapon;
public class WeaponProjectile implements Listener
public abstract class WeaponProjectile implements Listener
{
private ProjectileAttributes _attributes;
private Location _origin;
private Entity _projectileEntity;
protected Location _origin;
protected Entity _projectileEntity;
private SiegeWeapon _weapon;
protected SiegeWeapon _weapon;
private double _yRot;
private double _xMulti;
private double _yVel;
protected double _yawRot;
protected double _xMulti;
protected double _yVel;
private boolean _dead;
protected boolean _dead;
private Player _shooter;
protected Player _shooter;
public WeaponProjectile(SiegeWeapon weapon, Location origin, ProjectileAttributes attributes, double yRot, double yVel, double xMulti)
public WeaponProjectile(SiegeWeapon weapon, Location origin, double yawRot, double yVel, double xMulti)
{
_shooter = weapon.getRider();
_weapon = weapon;
_origin = origin;
_attributes = attributes;
_yRot = yRot;
_yawRot = yawRot;
_yVel = yVel;
_xMulti = xMulti;
UtilServer.getPluginManager().registerEvents(this, weapon.getClans().getPlugin());
spawn();
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onTntExplode(EntityExplodeEvent event)
{
if (event.getEntity().equals(_projectileEntity))
{
((TNTPrimed) event.getEntity()).setFuseTicks(60);
event.setCancelled(true);
}
}
@EventHandler
public void onBlockFall(EntityChangeBlockEvent event)
{
if (!_dead && event.getEntity().equals(_projectileEntity))
{
die();
event.setCancelled(true);
}
_projectileEntity = spawn();
}
@EventHandler
@ -82,39 +60,30 @@ public class WeaponProjectile implements Listener
return;
}
if (_projectileEntity.isDead())
if (_projectileEntity == null || _projectileEntity.isDead())
{
die();
return;
}
if (_dead || _projectileEntity == null)
if (_projectileEntity.getTicksLived() <= 10)
{
die();
return;
}
((TNTPrimed) _projectileEntity).setFuseTicks(60);
boolean moving = Math.abs(_projectileEntity.getVelocity().getX()) > 0.01 || Math.abs(_projectileEntity.getVelocity().getZ()) > 0.01;
if ((Math.abs(_projectileEntity.getVelocity().getX()) < 0.01
|| Math.abs(_projectileEntity.getVelocity().getZ()) < 0.01)
&& UtilBlock.getInRadius(_projectileEntity.getLocation(), 2)
.keySet()
.stream()
.filter(block -> !UtilItem.isBoundless(block.getType()))
.iterator().hasNext() && _projectileEntity.getTicksLived() >= 10)
// Some rough collision detection. Not perfect, but the best I could conjure up myself.
if (!moving && !UtilBlock.boundless(_projectileEntity.getLocation(), 2))
{
SiegeWeaponExplodeEvent newEvent = new SiegeWeaponExplodeEvent(_weapon, this);
UtilServer.CallEvent(newEvent);
SiegeWeaponExplodeEvent newEvent = UtilServer.CallEvent(new SiegeWeaponExplodeEvent(_weapon, this));
if (!newEvent.isCancelled())
{
new Crater(_weapon, this, _projectileEntity.getLocation(), _attributes._craterSize, _attributes._craterChanceOfAir, _attributes._craterDoFire);
new Crater(_weapon, this, _projectileEntity.getLocation());
UtilServer.getServer().getOnlinePlayers().forEach(player -> player.playSound(_projectileEntity.getLocation(), Sound.EXPLODE, 1.f, 1.f));
}
UtilServer.getServer().getOnlinePlayers().forEach(player -> player.playSound(_projectileEntity.getLocation(), Sound.EXPLODE, 1.f, 1.f));
die();
}
}
@ -147,48 +116,7 @@ public class WeaponProjectile implements Listener
_dead = true;
}
private void spawn()
{
if (_attributes._isFallingBlock)
{
FallingBlock fallingBlock = _origin.getWorld().spawnFallingBlock(_origin, _attributes._fallingBlockType, _attributes._fallingBlockData);
_projectileEntity = fallingBlock;
Vector velocity = UtilAlg.getTrajectory(
_origin,
UtilAlg.moveForward(
_origin,
2.,
(float) Math.toDegrees(_yRot), false))
.multiply(_xMulti)
.setY(_yVel);
fallingBlock.setVelocity(velocity);
}
else if (_attributes._isPrimedTnt)
{
TNTPrimed tnt = _origin.getWorld().spawn(_origin, TNTPrimed.class);
_projectileEntity = tnt;
Vector velocity = UtilAlg.getTrajectory(
_origin,
UtilAlg.moveForward(
_origin,
2.,
(float) Math.toDegrees(_yRot), false))
.multiply(_xMulti)
.setY(_yVel);
tnt.setVelocity(velocity);
}
}
public int getCraterSize()
{
return _attributes._craterSize;
}
public abstract Entity spawn();
public Player getShooter()
{

View File

@ -1,37 +0,0 @@
package mineplex.game.clans.clans.staff;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory;
import mineplex.core.common.util.UtilServer;
public class SilentChestInventory implements Listener
{
private Chest _chest;
private Inventory _inventory;
private Player _viewer;
public SilentChestInventory(Chest chest, Player viewer)
{
_chest = chest;
viewer.openInventory(_chest.getBlockInventory());
UtilServer.RegisterEvents(this);
}
@EventHandler
public void closeInventory(InventoryCloseEvent event)
{
if (event.getInventory().equals(_inventory) && event.getPlayer().equals(_viewer))
{
UtilServer.Unregister(this);
}
}
}

View File

@ -1,49 +0,0 @@
package mineplex.game.clans.clans.staff;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerInteractEvent;
import mineplex.core.MiniPlugin;
import mineplex.core.common.Rank;
import mineplex.core.common.util.UtilServer;
import mineplex.core.incognito.IncognitoManager;
import mineplex.game.clans.clans.ClansManager;
public class SilentChestOpen extends MiniPlugin
{
private ClansManager _clansManager;
public SilentChestOpen(ClansManager clansManager)
{
super("Silent Chest", clansManager.getPlugin());
_clansManager = clansManager;
}
@EventHandler
public void onInteract(PlayerInteractEvent event)
{
if (!_clansManager.getIncognitoManager().Get(event.getPlayer()).Status)
return;
if (!ClansManager.getInstance().getClientManager().hasRank(event.getPlayer(), Rank.CMOD))
return;
if (event.getClickedBlock() == null)
return;
BlockState block = event.getClickedBlock().getState();
if (!(block instanceof Chest))
return;
Chest chest = (Chest) block;
UtilServer.RegisterEvents(new SilentChestInventory(chest, event.getPlayer()));
event.setCancelled(true);
}
}

View File

@ -52,9 +52,15 @@ public class EventTerrainFinder
loc.Set(UtilBlock.getHighest(chunk.getWorld(), chunk.getBlock(0, 0, 0)).getLocation());
});
if (!UtilWorld.isBoxInWorldBorder(world, loc.Get().clone().subtract(size * 2, vert, size * 2), loc.Get().clone().add(size * 2, vert, size * 2)))
{
continue;
}
if (loc.Get() == null)
{
continue;
}
System.out.println("Done finding area... [success]");
@ -62,7 +68,7 @@ public class EventTerrainFinder
return loc.Get();
}
System.out.println("Done finding area...");
System.out.println("Failed to find area...");
return null;
}

View File

@ -77,6 +77,19 @@ public class WorldEventManager extends MiniPlugin implements ScoreboardElement
}
}
public boolean isInEvent(Location location)
{
for (WorldEvent event : _runningEvents)
{
if (event.isInBounds(location))
{
return true;
}
}
return false;
}
@EventHandler
public void update(UpdateEvent event)
{
@ -124,6 +137,17 @@ public class WorldEventManager extends MiniPlugin implements ScoreboardElement
}
}
public void randomEvent()
{
if (_runningEvents.size() == 0)
{
if (UtilServer.getPlayers().length > 0)
{
tryStartEvent();
}
}
}
private void tryStartEvent()
{
WorldEventType[] types = WorldEventType.values();

View File

@ -0,0 +1,28 @@
package mineplex.game.clans.clans.worldevent.command;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.clans.worldevent.WorldEventManager;
import mineplex.game.clans.clans.worldevent.WorldEventType;
import mineplex.minecraft.game.core.boss.WorldEvent;
/**
* Command for spawning a random world event in the world.
*/
public class RandomCommand extends CommandBase<WorldEventManager>
{
public RandomCommand(WorldEventManager plugin)
{
super(plugin, Rank.JNR_DEV, "random", "rand");
}
@Override
public void Execute(Player caller, String[] args)
{
Plugin.randomEvent();
}
}

View File

@ -14,6 +14,7 @@ public class WorldEventCommand extends MultiCommandBase<WorldEventManager>
AddCommand(new StartCommand(Plugin));
AddCommand(new ClearCommand(Plugin));
AddCommand(new RandomCommand(Plugin));
}
@Override

View File

@ -41,7 +41,7 @@ import mineplex.game.clans.shop.bank.BankShop;
public class GoldManager extends MiniPlugin
{
public static final double GEM_CONVERSION_RATE = 32; // The number of gold coins when converted from a single gem
public static final double GEM_CONVERSION_RATE = 16; // The number of gold coins when converted from a single gem
public static final double DEATH_TAX = 0.04d; // Percentage of gold lost on death
public static final String META_STRING = "clans.goldAmount";

View File

@ -59,6 +59,7 @@ import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilWorld;
import mineplex.core.common.weight.Weight;
import mineplex.core.common.weight.WeightSet;
import mineplex.core.itemstack.ItemStackFactory;
@ -304,6 +305,61 @@ public class Gameplay extends MiniPlugin
event.setCancelled(true);
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
public void disableEnderChest(PlayerInteractEvent event)
{
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
{
return;
}
if (event.getClickedBlock() == null)
{
return;
}
if (_clansManager.getWorldEvent().isInEvent(event.getClickedBlock().getLocation()))
{
return;
}
if (event.getClickedBlock().getType().equals(Material.ENDER_CHEST))
{
UtilPlayer.message(event.getPlayer(), F.main("Clans", "You are not permitted to use Ender Chests."));
event.setCancelled(true);
return;
}
}
@EventHandler
public void onInteract(PlayerInteractEvent event)
{
if (!_clansManager.getIncognitoManager().Get(event.getPlayer()).Status)
{
return;
}
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
{
return;
}
if (event.getClickedBlock() == null)
{
return;
}
if (!event.getClickedBlock().getType().equals(Material.CHEST)
&& !event.getClickedBlock().getType().equals(Material.TRAPPED_CHEST))
{
return;
}
UtilPlayer.message(event.getPlayer(), F.main("Clans", "You are not allowed to use this whilst incognito."));
event.setCancelled(true);
}
/**
* Disable all Piston related events in Clans
*
@ -818,12 +874,18 @@ public class Gameplay extends MiniPlugin
UtilInv.Update(player);
// Break
if (Math.random() > 0.85) event.getClickedBlock().setData((byte) (event.getClickedBlock().getData() + 4));
if (event.getClickedBlock().getData() >= 12)
if (Math.random() > 0.85)
{
player.getWorld().playEffect(event.getClickedBlock().getLocation(), Effect.STEP_SOUND, 145);
event.getClickedBlock().setTypeIdAndData(0, (byte) 0, true);
byte data = event.getClickedBlock().getData();
if (data >= 8) // Anvil has already been damaged twice
{
player.getWorld().playEffect(event.getClickedBlock().getLocation(), Effect.STEP_SOUND, 145);
event.getClickedBlock().setType(Material.AIR);
}
else
{
event.getClickedBlock().setData((byte)(data + 4));
}
}
// Record

View File

@ -1,11 +1,10 @@
package mineplex.game.clans.items.attributes.armor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import mineplex.game.clans.items.attributes.AttributeType;
import mineplex.game.clans.items.attributes.ItemAttribute;
import mineplex.game.clans.items.generation.ValueDistribution;
// A.K.A Conquering for Armor
@ -34,6 +33,6 @@ public class ConqueringArmorAttribute extends FlatReductionAttribute
@Override
public boolean reducesDamage(DamageCause cause, Entity attacker)
{
return attacker != null; // Reduces damage from all entities
return !(attacker instanceof Player); // Reduces damage from all entities
}
}

View File

@ -60,6 +60,6 @@ public class GiantsBroadsword extends LegendaryItem
private void buffPlayer(Player player)
{
grantPotionEffect(player, PotionEffectType.SLOW, 40, SLOW_AMPLIFIER);
grantPotionEffect(player, PotionEffectType.REGENERATION, 40, REGEN_AMPLIFIER); //Regen
grantPotionEffect(player, PotionEffectType.REGENERATION, 2, REGEN_AMPLIFIER); //Regen
}
}

View File

@ -20,6 +20,7 @@ import mineplex.core.common.util.RGBData;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilCollections;
import mineplex.core.common.util.UtilColor;
import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilParticle;
import mineplex.core.common.util.UtilParticle.ParticleType;
import mineplex.core.common.util.UtilParticle.ViewDist;
@ -38,6 +39,8 @@ public class MeridianScepter extends LegendaryItem
private RGBData[] colors = { UtilColor.RgbPurple, UtilColor.RgbPurple.Lighten(), UtilColor.RgbPurple.Darken() };
private int _witherDamageTimes = 5;
public MeridianScepter()
{
super("Meridian Scepter", UtilText.splitLinesToArray(new String[] {
@ -80,7 +83,6 @@ public class MeridianScepter extends LegendaryItem
final Vector direction = shooter.getEyeLocation().getDirection().normalize().multiply(0.25);
final int maxRange = 50;
final int maxDings = maxRange * 4;
final int damage = 6;
UtilServer.repeat(new BukkitRunnable()
{
@ -96,16 +98,21 @@ public class MeridianScepter extends LegendaryItem
Player player = (Player) cur;
Location eLoc = player.getLocation();
// If they are less than 0.5 blocks away
if (eLoc.clone().add(0, player.getEyeHeight() / 2, 0).distance(projectile) <= 0.7)
if (player.getEyeLocation().subtract(0, .3, 0).distance(projectile) <= 2)
{
ClansManager.getInstance().getDamageManager().NewDamageEvent(player, player, null,
DamageCause.CUSTOM, damage, true, true, false,
player.getName(), "Meridian Scepter");
player.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 20 * _witherDamageTimes, 0));
player.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 20 * 4, 0));
int time = 0;
for (int i = 0; i < _witherDamageTimes; i++)
{
UtilServer.getServer().getScheduler().scheduleSyncDelayedTask(UtilServer.getPlugin(), () -> {
ClansManager.getInstance().getDamageManager().NewDamageEvent(player, shooter, null,
DamageCause.CUSTOM, 1.75, false, true, true,
shooter.getName(), "Meridian Scepter");
}, ++time * 20);
}
UtilPlayer.message(player, F.main("Clans", F.elem(player.getName()) + " hit you with a " + F.elem("Meridian Scepter") + C.mBody + "."));
UtilPlayer.message(shooter, F.main("Clans", "You hit " + F.elem(player.getName()) + " with your " + F.elem("Meridian Scepter") + C.mBody + "."));
@ -142,7 +149,7 @@ public class MeridianScepter extends LegendaryItem
continue;
}
if (ClansManager.getInstance().getClan(shooter) == ClansManager.getInstance().getClan(closest))
if (ClansManager.getInstance().isInClan(shooter) && ClansManager.getInstance().getClan(shooter).isMember(closest))
{
continue;
}
@ -152,12 +159,17 @@ public class MeridianScepter extends LegendaryItem
continue;
}
if (closest.getGameMode().equals(GameMode.CREATIVE) || closest.getGameMode().equals(GameMode.SPECTATOR))
{
continue;
}
if (ClansManager.getInstance().getIncognitoManager().Get(closest).Status)
{
continue;
}
if (ClansManager.getInstance().getClan(shooter) != null && ClansManager.getInstance().getClan(shooter).isAlly(ClansManager.getInstance().getClan(closest)))
if (ClansManager.getInstance().isInClan(shooter) && ClansManager.getInstance().getClan(shooter).isAlly(ClansManager.getInstance().getClan(closest)))
{
continue;
}

View File

@ -277,6 +277,11 @@ public abstract class Objective<Plugin extends Tutorial, Data extends ObjectiveD
public void displayChatMessages(Player player)
{
if (getPlugin().getTutorialSession(player) == null)
{
return;
}
for (int i = 0; i < 1; i++)
{
UtilPlayer.message(player, "");

View File

@ -107,7 +107,11 @@ public class Hub extends JavaPlugin implements IRelation
//Other Modules
PacketHandler packetHandler = new PacketHandler(this);
DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler);
PreferencesManager preferenceManager = new PreferencesManager(this, clientManager, donationManager);
IncognitoManager incognito = new IncognitoManager(this, clientManager, packetHandler);
PreferencesManager preferenceManager = new PreferencesManager(this, incognito, clientManager, donationManager);
incognito.setPreferencesManager(preferenceManager);
preferenceManager.GiveItem = true;
Creature creature = new Creature(this);
NpcManager npcManager = new NpcManager(this, creature);
@ -142,7 +146,6 @@ public class Hub extends JavaPlugin implements IRelation
QueueManager queueManager = new QueueManager(this, clientManager, donationManager, new EloManager(this, clientManager), partyManager);
IncognitoManager incognito = new IncognitoManager(this, clientManager, packetHandler);
new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, new StackerManager(hubManager), queueManager);
Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName());

View File

@ -6,6 +6,7 @@ import java.util.LinkedList;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCrafting;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.inventory.InventoryCloseEvent;
@ -27,6 +28,7 @@ import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.classcombat.Skill.Skill;
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import net.minecraft.server.v1_8_R3.Material;
public class Recall extends Skill
{
@ -57,9 +59,14 @@ public class Recall extends Skill
public void use(PlayerDropItemEvent event)
{
Player player = event.getPlayer();
if (!(player.getOpenInventory().getTopInventory() instanceof CraftInventoryCrafting))
{
return;
}
int level = getLevel(player);
if (level == 0)
if (level == 0)
return;
if (!UtilGear.isWeapon(event.getItemDrop().getItemStack()))
@ -153,7 +160,7 @@ public class Recall extends Skill
_healthMap.get(cur).removeLast();
}
}
@Override
public void Reset(Player player)
{

View File

@ -2,6 +2,7 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin;
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
import net.minecraft.server.v1_8_R3.Material;
import mineplex.core.common.util.F;
import mineplex.core.recharge.Recharge;
import mineplex.core.updater.event.UpdateEvent;
@ -21,9 +22,11 @@ import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Sound;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCrafting;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
@ -55,7 +58,12 @@ public class SmokeBomb extends Skill
public void Use(PlayerDropItemEvent event)
{
Player player = event.getPlayer();
if (!(player.getOpenInventory().getTopInventory() instanceof CraftInventoryCrafting))
{
return;
}
int level = getLevel(player);
if (level == 0) return;
@ -140,7 +148,19 @@ public class SmokeBomb extends Skill
Factory.Condition().EndCondition(event.getPlayer(), null, GetName());
}
@EventHandler
public void closeInv(InventoryCloseEvent event)
{
if (getLevel(event.getPlayer()) == 0)
{
return;
}
event.getPlayer().getInventory().addItem(event.getPlayer().getItemOnCursor());
event.getPlayer().setItemOnCursor(null);
}
@EventHandler
public void Smoke(UpdateEvent event)
{

View File

@ -126,6 +126,6 @@ public class HoldPosition extends SkillActive
@Override
public void Reset(Player player)
{
player.setFoodLevel(20);
}
}

View File

@ -5,8 +5,8 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -15,6 +15,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;
import mineplex.core.blockrestore.BlockRestore;
import mineplex.core.blockrestore.BlockRestoreMap;
@ -25,7 +26,7 @@ import mineplex.core.common.block.schematic.UtilSchematic;
import mineplex.core.common.util.C;
import mineplex.core.common.util.Callback;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilBlock;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTextMiddle;
@ -65,6 +66,14 @@ public abstract class WorldEvent implements Listener, ScoreboardElement
private boolean _isArcade;
private double _difficulty = 1;
private double _minX;
private double _minY;
private double _minZ;
private double _maxX;
private double _maxY;
private double _maxZ;
public WorldEvent(DisguiseManager disguiseManager, ProjectileManager projectileManager, DamageManager damageManager, BlockRestore blockRestore, ConditionManager conditionManager, String name, Location cornerLocation)
{
this(disguiseManager, projectileManager, damageManager, blockRestore, conditionManager, name, cornerLocation, null);
@ -328,7 +337,6 @@ public abstract class WorldEvent implements Listener, ScoreboardElement
{
onComplete.run();
}
}
});
@ -407,4 +415,50 @@ public abstract class WorldEvent implements Listener, ScoreboardElement
}
}
public boolean isInBounds(Location location)
{
if (_minX == 0)
{
// Calculate bounds
Set<Block> blocks = _blocks.getChangedBlocks();
for (Block block : blocks)
{
if (_minX > block.getX())
{
_minX = block.getX();
}
if (_minY > block.getY())
{
_minY = block.getY();
}
if (_minZ > block.getZ())
{
_minZ = block.getZ();
}
if (_maxX < block.getX())
{
_maxX = block.getX();
}
if (_maxY < block.getY())
{
_maxY = block.getY();
}
if (_maxZ < block.getZ())
{
_maxZ = block.getZ();
}
}
_maxY++;
}
return UtilAlg.inBoundingBox(location, new Vector(_minX, _minY, _minZ), new Vector(_maxX, _maxY, _maxZ));
}
}

View File

@ -57,7 +57,7 @@ public class StaffServer extends JavaPlugin
Punish punish = new Punish(this, webServerAddress, clientManager);
new NpcManager(this, new Creature(this));
ServerStatusManager serverStatusManager = new ServerStatusManager(this, clientManager, new LagMeter(this, clientManager));
PreferencesManager preferenceManager = new PreferencesManager(this, clientManager, donationManager);
PreferencesManager preferenceManager = new PreferencesManager(this, null, clientManager, donationManager);
preferenceManager.GiveItem = false;
Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName());

View File

@ -109,15 +109,19 @@ public class Arcade extends JavaPlugin
_serverConfiguration = new ServerConfiguration(this, _clientManager);
PreferencesManager preferenceManager = new PreferencesManager(this, _clientManager, _donationManager);
PacketHandler packetHandler = new PacketHandler(this);
IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler);
PreferencesManager preferenceManager = new PreferencesManager(this, incognito, _clientManager, _donationManager);
incognito.setPreferencesManager(preferenceManager);
Creature creature = new Creature(this);
ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager));
LeaderboardManager leaderboardManager = new LeaderboardManager(this, _clientManager);
Teleport teleport = new Teleport(this, _clientManager);
Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName());
new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion());
PacketHandler packetHandler = new PacketHandler(this);
DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler);
@ -128,8 +132,6 @@ public class Arcade extends JavaPlugin
AntiHack.Initialize(this, punish, portal, preferenceManager, _clientManager);
AntiHack.Instance.setKick(false);
IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler);
IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal);
StatsManager statsManager = new StatsManager(this, _clientManager);
AchievementManager achievementManager = new AchievementManager(statsManager, _clientManager, _donationManager);