Skip to content

Commit

Permalink
Merge pull request #254 from Atilt/1.6.x
Browse files Browse the repository at this point in the history
optimize speed & memory of some xcore features. fix enemy-spawner min…
  • Loading branch information
Driftay authored Jul 11, 2023
2 parents 0fc2de7 + 9d4b3e6 commit 3e999ff
Show file tree
Hide file tree
Showing 13 changed files with 98 additions and 51 deletions.
2 changes: 2 additions & 0 deletions src/main/java/com/massivecraft/factions/FPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ public interface FPlayer extends EconomyParticipator {
*/
void login();

void logout(int kills, int deaths);

/**
* Caches the kills and deaths of a player.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -439,16 +439,16 @@ public void onPlayerQuit(PlayerQuitEvent event) {
// and update their last login time to point to when the logged off, for auto-remove routine
me.setLastLoginTime(System.currentTimeMillis());

me.logout(); // cache kills / deaths
me.logout(player.getStatistic(Statistic.PLAYER_KILLS), player.getStatistic(Statistic.DEATHS)); // cache kills / deaths

CmdSeeChunk.seeChunkMap.remove(me.getPlayer().getName());

// if player is waiting for fstuck teleport but leaves, remove
Integer stuck = FactionsPlugin.getInstance().getStuckMap().remove(player.getUniqueId());

if (stuck != null) {
FPlayers.getInstance().getByPlayer(me.getPlayer()).msg(TL.COMMAND_STUCK_CANCELLED);
FactionsPlugin.instance.getTimers().remove(me.getPlayer().getUniqueId());
FPlayers.getInstance().getByPlayer(player).msg(TL.COMMAND_STUCK_CANCELLED);
FactionsPlugin.instance.getTimers().remove(player.getUniqueId());
}

Faction myFaction = me.getFaction();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,16 @@ public void login() {
this.deaths = getPlayer().getStatistic(Statistic.DEATHS);
}

@Override
public void logout(int kills, int deaths) {
this.kills = kills;
this.deaths = deaths;
}

@Override
public void logout() {
this.kills = getPlayer().getStatistic(Statistic.PLAYER_KILLS);
this.deaths = getPlayer().getStatistic(Statistic.DEATHS);
Player player = getPlayer();
logout(player.getStatistic(Statistic.PLAYER_KILLS), player.getStatistic(Statistic.DEATHS));
}

public int getCooldown(String cmd) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -927,8 +927,9 @@ public boolean isNormal() {
return !(this.isWilderness() || this.isSafeZone() || this.isWarZone());
}

@Deprecated
public boolean isNone() {
return this.getId().equals("0");
return isWilderness();
}

public boolean isWilderness() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class AntiDeathClip implements Listener {

@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onDeathClipDamage(EntityDamageByEntityEvent e) {
if (e.getDamager().isDead() && e.getDamager() instanceof Player) {
if (e.getDamager() instanceof Player && e.getDamager().isDead()) {
e.setCancelled(true);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package org.saberdev.corex.listeners;

import com.cryptomorin.xseries.XMaterial;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;

public class AntiMinecartPlacement implements Listener {



@EventHandler
public void onBoatPlace(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getPlayer().getItemInHand().getType() == XMaterial.MINECART.parseMaterial()) {
event.setCancelled(true);
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
ItemStack itemInHand = event.getPlayer().getItemInHand();
if (itemInHand != null && itemInHand.getType() == Material.MINECART) {
event.setCancelled(true);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,4 @@ public void onCreatureSpawn(CreatureSpawnEvent e) {
e.setCancelled(true);
}
}

}
48 changes: 30 additions & 18 deletions src/main/java/org/saberdev/corex/listeners/AntiPistonGlitch.java
Original file line number Diff line number Diff line change
@@ -1,39 +1,51 @@
package org.saberdev.corex.listeners;

import com.cryptomorin.xseries.XMaterial;
import com.massivecraft.factions.util.Lazy;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPistonExtendEvent;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class AntiPistonGlitch implements Listener {

private final Lazy<Set<Material>> materials = Lazy.of(() -> Collections.unmodifiableSet(new HashSet<Material>(){{
add(XMaterial.SUGAR_CANE.parseMaterial());
add(XMaterial.MELON.parseMaterial());
add(XMaterial.MELON_STEM.parseMaterial());
add(XMaterial.GLISTERING_MELON_SLICE.parseMaterial());
}}));

@EventHandler
public void onRetract(BlockPistonExtendEvent event) {
Block to = event.getBlock().getRelative(event.getDirection());
Block nextBlock = to.getRelative(event.getDirection());
if (nextBlock.getType() == XMaterial.SUGAR_CANE.parseMaterial()
|| nextBlock.getType() == XMaterial.MELON.parseMaterial()
|| nextBlock.getType() == XMaterial.MELON_STEM.parseMaterial() || nextBlock.getType() == XMaterial.GLISTERING_MELON_SLICE.parseMaterial()) {
event.setCancelled(true);
}
if (to.getType() == XMaterial.SUGAR_CANE.parseMaterial()
|| (to.getType() == XMaterial.MELON.parseMaterial())
|| to.getType() == XMaterial.MELON_STEM.parseMaterial() || to.getType() == XMaterial.GLISTERING_MELON_SLICE.parseMaterial()) {
BlockFace direction = event.getDirection();
Block to = event.getBlock().getRelative(direction);
Block nextBlock = to.getRelative(direction);

Set<Material> against = this.materials.get();
if (against.contains(nextBlock.getType()) || against.contains(to.getType())) {
event.setCancelled(true);
}
}

@EventHandler
public void onFluxPatch(BlockPistonExtendEvent event) {
Block to = event.getBlock().getRelative(event.getDirection());
Block nextBlock = to.getRelative(event.getDirection());
if ((to.getType().toString().endsWith("_GATE") || to.getType().toString().endsWith("_FENCE"))
|| (nextBlock.getType().toString().endsWith("_GATE")
|| nextBlock.getType().toString().endsWith("_FENCE"))) {
BlockFace direction = event.getDirection();
Block to = event.getBlock().getRelative(direction);

String toBlockName = to.getType().toString();
String nextBlockName = to.getRelative(direction).getType().toString();

if ((toBlockName.endsWith("_GATE") || toBlockName.endsWith("_FENCE"))
|| (nextBlockName.endsWith("_GATE")
|| nextBlockName.endsWith("_FENCE"))) {
event.setCancelled(true);
}
}
}


}
8 changes: 6 additions & 2 deletions src/main/java/org/saberdev/corex/listeners/AutoRespawn.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public class AutoRespawn implements Listener {
@EventHandler
private void onPlayerDeath(PlayerDeathEvent event) {
Player player = event.getEntity();
Bukkit.getScheduler().runTaskLater(FactionsPlugin.getInstance(), () -> player.spigot().respawn(), 2L);
Bukkit.getScheduler().runTaskLater(FactionsPlugin.getInstance(), () -> {
if (player.isOnline()) {
player.spigot().respawn();
}
}, 2L);
}
}
}
29 changes: 17 additions & 12 deletions src/main/java/org/saberdev/corex/listeners/EnemySpawnerMine.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,47 @@
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.util.Lazy;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Material;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.saberdev.corex.CoreX;

public class EnemySpawnerMine implements Listener {

private final Lazy<Material> spawner = Lazy.of(XMaterial.SPAWNER::parseMaterial);

@EventHandler
public void onSpawnerMine(BlockBreakEvent e) {
if (!e.getBlock().getType().equals(XMaterial.SPAWNER.parseMaterial())) return;

if (hasEnemiesNear(e.getPlayer(), CoreX.getConfig().fetchDouble("AntiSpawnerMine.Radius")) && !e.getPlayer().hasPermission("sabercore.spawnermine,bypass")) {
e.setCancelled(true);
}
if (e.isCancelled()) {
e.getPlayer().sendMessage(String.valueOf(TL.ANTI_SPAWNER_MINE_PLAYERS_NEAR));
if (e.getBlock().getType() == this.spawner.get()) {
if (!e.getPlayer().hasPermission("sabercore.spawnermine.bypass") && hasEnemiesNear(e.getPlayer(), CoreX.getConfig().fetchDouble("AntiSpawnerMine.Radius"))) {
e.setCancelled(true);
}
if (e.isCancelled()) {
e.getPlayer().sendMessage(String.valueOf(TL.ANTI_SPAWNER_MINE_PLAYERS_NEAR));
}
}
}

public boolean hasEnemiesNear(Player player, double d) {
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
for (Entity e : player.getNearbyEntities(d, d, d)) {
if (e instanceof Player) {
Player eplayer = (((Player) e).getPlayer());
if (eplayer == null) continue;
if (e.getType() == EntityType.PLAYER) {
Player eplayer = (Player) e;
if (eplayer.hasMetadata("NPC")) continue;
FPlayer efplayer = FPlayers.getInstance().getByPlayer(eplayer);
if (efplayer == null) continue;
if (!player.canSee(eplayer) || efplayer.isVanished()) continue;
if (efplayer.isVanished() || !player.canSee(eplayer)) continue;
if (fPlayer.getRelationTo(efplayer).equals(Relation.ENEMY)) {
return true;
}
}
}
return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@
import com.cryptomorin.xseries.XMaterial;
import com.massivecraft.factions.util.CC;
import com.massivecraft.factions.util.Cooldown;
import com.massivecraft.factions.util.Lazy;
import com.massivecraft.factions.util.TimeUtil;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.saberdev.corex.CoreX;

public class GappleCooldown implements Listener {

private final Lazy<Material> enchantedGoldenApple = Lazy.of(XMaterial.ENCHANTED_GOLDEN_APPLE::parseMaterial);

@EventHandler
public void onEatGapple(PlayerItemConsumeEvent e){
if(e.getItem().getType() == XMaterial.ENCHANTED_GOLDEN_APPLE.parseMaterial()) {
if(e.getItem().getType() == this.enchantedGoldenApple.get()) {
if(Cooldown.isOnCooldown(e.getPlayer(), "godAppleCooldown")) {
e.setCancelled(true);
long remaining = e.getPlayer().getMetadata("godAppleCooldown").get(0).asLong() - System.currentTimeMillis();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ public void onPlayerTeleport(PlayerTeleportEvent e) {
final Player p = e.getPlayer();
if (gm == GameMode.CREATIVE) {
Bukkit.getScheduler().runTaskLater(FactionsPlugin.getInstance(), () -> {
if (p.getGameMode() != gm)
p.setGameMode(gm);
if (p.isOnline()) {
if (p.getGameMode() != gm) {
p.setGameMode(gm);
}
}
}, 2L);
}
}
}
}
}
12 changes: 8 additions & 4 deletions src/main/java/org/saberdev/corex/listeners/InstaSpongeBreak.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.cryptomorin.xseries.XMaterial;
import com.massivecraft.factions.*;
import com.massivecraft.factions.util.Lazy;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand All @@ -11,6 +13,7 @@

public class InstaSpongeBreak implements Listener {

private final Lazy<Material> sponge = Lazy.of(XMaterial.SPONGE::parseMaterial);

@EventHandler
public void onClick(PlayerInteractEvent event) {
Expand All @@ -19,14 +22,15 @@ public void onClick(PlayerInteractEvent event) {
return;
}
Block block = event.getClickedBlock();
if (block != null && block.getType() == XMaterial.SPONGE.parseMaterial()) {
if (block != null && block.getType() == this.sponge.get()) {
FPlayer fPlayer = FPlayers.getInstance().getByPlayer(player);
Faction faction = fPlayer.getFaction();

Faction location = Board.getInstance().getFactionAt(FLocation.wrap(block.getLocation()));
if (faction.getId().equals(location.getId()) || (location.isNone())) {
Faction faction = fPlayer.getFaction();
if (location.isWilderness() || faction.getId().equals(location.getId())) {
block.breakNaturally();
event.setCancelled(true);
}
}
}
}
}

0 comments on commit 3e999ff

Please sign in to comment.