Skip to content

Commit

Permalink
initial itemcheck rewrite commit
Browse files Browse the repository at this point in the history
  • Loading branch information
xGinko committed Mar 6, 2024
1 parent 81438bd commit d3d92d0
Show file tree
Hide file tree
Showing 13 changed files with 674 additions and 621 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import me.moomoo.anarchyexploitfixes.config.LanguageCache;
import me.moomoo.anarchyexploitfixes.modules.AnarchyExploitFixesModule;
import me.moomoo.anarchyexploitfixes.utils.models.CachedTickData;
import me.moomoo.anarchyexploitfixes.utils.models.HumanPermHelper;
import net.kyori.adventure.text.logger.slf4j.ComponentLogger;
import org.bstats.bukkit.Metrics;
import org.bukkit.command.CommandSender;
Expand All @@ -32,6 +33,7 @@ public class AnarchyExploitFixes extends JavaPlugin {
private static HashMap<String, LanguageCache> languageCacheMap;
private static Config config;
private static CachedTickData cachedTickData;
private static HumanPermHelper humanPermHelper;
private static ComponentLogger prefixedLogger, unPrefixedLogger;
private static Metrics metrics;
private static boolean isServerFolia, foundProtocolLib;
Expand All @@ -41,6 +43,7 @@ public void onEnable() {
instance = this;
prefixedLogger = ComponentLogger.logger(getLogger().getName());
unPrefixedLogger = ComponentLogger.logger("");
humanPermHelper = HumanPermHelper.create(this);

// Fancy enable
prefixedLogger.info(" ");
Expand Down Expand Up @@ -103,6 +106,10 @@ public void onDisable() {
metrics.shutdown();
metrics = null;
}
if (humanPermHelper != null) {
humanPermHelper.shutdown();
humanPermHelper = null;
}
instance = null;
config = null;
languageCacheMap = null;
Expand Down Expand Up @@ -151,7 +158,7 @@ public void reloadPlugin() {
private void reloadConfiguration() {
try {
config = new Config();
cachedTickData = CachedTickData.create(Duration.ofMillis(config.max_tps_check_interval_millis));
cachedTickData = CachedTickData.create(Duration.ofMillis(config.tickData_cache_millis));
AnarchyExploitFixesModule.reloadModules();
config.saveConfig();
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class Config {
public final Locale default_lang;
public final Sound elytra_too_fast_sound;
public final Component cmd_say_format;
public final long max_tps_check_interval_millis;
public final long tickData_cache_millis;
public final int nether_ceiling_max_y, elytra_spawn_radius;
public final boolean auto_lang, protocolLib_IsDisabled, connectionMsgsAreOnByDefault,
cmd_say_enabled, cmd_help_enabled, cmd_toggleConMsgs_enabled,
Expand All @@ -46,7 +46,7 @@ public Config() throws Exception {
"If set to true, will display messages based on client language");

// General Settings
this.max_tps_check_interval_millis = getInt("general.max-tps-check-interval-in-ticks", 20,
this.tickData_cache_millis = getInt("general.max-tps-check-interval-in-ticks", 20,
"How long a checked tps is cached to save resources in ticks (1 sec = 20 ticks)") * 50L;
this.protocolLib_IsDisabled = getBoolean("general.disable-all-ProtocolLib", false,
"Use only if you are having problems with ProtocolLib when starting the plugin.");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
package me.moomoo.anarchyexploitfixes.enums;

import org.bukkit.permissions.Permissible;

public enum AEFPermission {

BYPASS_ELYTRA("bypass.elytra"),
BYPASS_NETHER_ROOF("bypass.netherroof"),
BYPASS_CMD_WHITELIST("bypass.commandwhitelist"),
BYPASS_CHAT("bypass.chat"),
BYPASS_ILLEGAL_ITEMS("bypass.illegalitems"),
BYPASS_ILLEGAL_OVERSTACKED("bypass.illegal.overstacked"),
BYPASS_ILLEGAL_BANNEDMATERIAL("bypass.illegal.bannedmaterial"),
BYPASS_ILLEGAL_BANNEDNAME("bypass.illegal.bannedname"),
BYPASS_ILLEGAL_UNBREAKABLE("bypass.illegal.unbreakable"),
SILENT_JOIN("silentJoin"),
SILENT_LEAVE("silentLeave");

Expand All @@ -19,4 +24,11 @@ public enum AEFPermission {
public String get() {
return permission;
}

public static boolean hasPermission(Iterable<? extends Permissible> toCheck, AEFPermission aefPerm) {
for (Permissible permissible : toCheck) {
if (permissible.hasPermission(aefPerm.get())) return true;
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@
import me.moomoo.anarchyexploitfixes.modules.combat.*;
import me.moomoo.anarchyexploitfixes.modules.dupepreventions.*;
import me.moomoo.anarchyexploitfixes.modules.elytra.*;
import me.moomoo.anarchyexploitfixes.modules.elytra.ElytraHelper;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.RemoveSpecificItemNames;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.RevertOverstacked;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.RevertUnbreakables;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.BannedMaterial;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.BannedItemNames;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.OverstackedItems;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.RevertUnbreakables;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.enchantments.HigherEnchants;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.enchantments.InapplicableEnchants;
import me.moomoo.anarchyexploitfixes.modules.illegals.items.enchantments.IncompatibleEnchants;
Expand Down Expand Up @@ -114,8 +113,8 @@ static void reloadModules() {
modules.add(new PeriodicallyRemoveIllegalBlocks());
modules.add(new RemoveUnnaturalSpawners());
// Items
modules.add(new RemoveSpecificItemNames());
modules.add(new RevertOverstacked());
modules.add(new BannedItemNames());
modules.add(new OverstackedItems());
modules.add(new RevertUnbreakables());
// Banned Blocks
modules.add(new BannedMaterial());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package me.moomoo.anarchyexploitfixes.modules.combat;

import io.papermc.paper.event.player.PrePlayerAttackEntityEvent;
import me.moomoo.anarchyexploitfixes.AnarchyExploitFixes;
import me.moomoo.anarchyexploitfixes.config.Config;
import me.moomoo.anarchyexploitfixes.utils.models.ExpiringSet;
import me.moomoo.anarchyexploitfixes.modules.AnarchyExploitFixesModule;
import me.moomoo.anarchyexploitfixes.utils.models.ExpiringSet;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;

Expand Down Expand Up @@ -64,18 +63,15 @@ public void disable() {
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onCrystalBreak(EntityDamageByEntityEvent event) {
if (breakDelayMillis <= 0) return;
private void onCrystalBreak(PrePlayerAttackEntityEvent event) {
if (breakDelayMillis <= 0 || !event.willAttack()) return;

if (
event.getEntityType() == EntityType.ENDER_CRYSTAL
&& event.getDamager().getType() == EntityType.PLAYER
) {
if (breakCooldowns.contains(event.getDamager().getUniqueId())) {
if (event.getAttacked().getType() == EntityType.ENDER_CRYSTAL) {
if (breakCooldowns.contains(event.getPlayer().getUniqueId())) {
event.setCancelled(true);
if (updateInv) ((Player) event.getDamager()).updateInventory();
if (updateInv) event.getPlayer().updateInventory();
} else {
breakCooldowns.add(event.getDamager().getUniqueId());
breakCooldowns.add(event.getPlayer().getUniqueId());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
package me.moomoo.anarchyexploitfixes.modules.illegals.items;

import com.destroystokyo.paper.event.inventory.PrepareResultEvent;
import io.papermc.paper.event.player.PrePlayerAttackEntityEvent;
import me.moomoo.anarchyexploitfixes.AnarchyExploitFixes;
import me.moomoo.anarchyexploitfixes.config.Config;
import me.moomoo.anarchyexploitfixes.enums.AEFPermission;
import me.moomoo.anarchyexploitfixes.utils.models.HumanPermHelper;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class BannedItemNames implements IllegalItemModule {

private final AnarchyExploitFixes plugin;
private final Set<Component> colorSensitiveNames;
private final Set<String> colorInsensitiveNames;

public BannedItemNames() {
shouldEnable();
this.plugin = AnarchyExploitFixes.getInstance();
Config config = AnarchyExploitFixes.getConfiguration();
config.addComment("illegals.remove-specific-item-names.enable", "Resets an item's name if configured in the config.");
this.colorInsensitiveNames = new HashSet<>(config.getList("illegals.remove-specific-item-names.color-insensitive-item-names",
List.of("Super Insane Mega Sussy Item")));
this.colorSensitiveNames = config.getList("illegals.remove-specific-item-names.color-sensitive-item-names",
List.of("<bold><aqua>PvP KIT V2"))
.stream()
.map(serialized -> MiniMessage.miniMessage().deserialize(serialized))
.collect(Collectors.toCollection(HashSet::new));
}

@Override
public String name() {
return "remove-items-with-specific-names";
}

@Override
public String category() {
return "illegals";
}

@Override
public void enable() {
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@Override
public boolean shouldEnable() {
return AnarchyExploitFixes.getConfiguration().getBoolean("illegals.remove-specific-item-names.enable", false);
}

@Override
public void disable() {
HandlerList.unregisterAll(this);
}

@Override
public ItemCheckResult checkItem(ItemStack itemStack) {
if (itemStack == null || itemStack.getType().isAir() || !itemStack.hasItemMeta()) {
return ItemCheckResult.FINE;
}

final Component displayName = itemStack.displayName();
if (colorSensitiveNames.contains(displayName)
|| colorInsensitiveNames.contains(PlainTextComponentSerializer.plainText().serialize(displayName))) {
return ItemCheckResult.IS_ILLEGAL;
}

return ItemCheckResult.FINE;
}

@Override
public void takeAction(ItemStack itemStack, ItemCheckResult result) {
itemStack.editMeta(meta -> meta.displayName(null));
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onPrepareResult(PrepareResultEvent event) {
if (HumanPermHelper.hasPermission(AEFPermission.BYPASS_ILLEGAL_BANNEDNAME, event.getView().getPlayer())) return;

ItemStack resultItem = event.getResult();
if (checkItem(resultItem) == ItemCheckResult.IS_ILLEGAL) {
takeAction(resultItem, ItemCheckResult.IS_ILLEGAL);
event.setResult(resultItem);
}
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onInventoryClick(InventoryClickEvent event) {
if (HumanPermHelper.hasPermission(AEFPermission.BYPASS_ILLEGAL_BANNEDNAME, event.getWhoClicked())) return;

takeAction(event.getCurrentItem(), checkItem(event.getCurrentItem()));
takeAction(event.getCursor(), checkItem(event.getCursor()));
for (ItemStack itemStack : event.getInventory()) {
takeAction(itemStack, checkItem(itemStack));
}
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onAttack(PrePlayerAttackEntityEvent event) {
if (!event.willAttack()) return;
ItemStack attackItem = event.getPlayer().getActiveItem();
final ItemCheckResult result = checkItem(attackItem);
if (result != ItemCheckResult.FINE) {
if (HumanPermHelper.hasPermission(AEFPermission.BYPASS_ILLEGAL_BANNEDNAME, event.getPlayer())) return;

event.setCancelled(true);
takeAction(attackItem, result);
}
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onPlayerDropItem(PlayerDropItemEvent event) {
ItemStack droppedItem = event.getItemDrop().getItemStack();
final ItemCheckResult result = checkItem(droppedItem);
if (result != ItemCheckResult.FINE) {
if (HumanPermHelper.hasPermission(AEFPermission.BYPASS_ILLEGAL_BANNEDNAME, event.getPlayer())) return;

takeAction(droppedItem, result);
event.getItemDrop().setItemStack(droppedItem);
}
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = false)
private void onInteract(PlayerInteractEvent event) {
final ItemCheckResult result = checkItem(event.getItem());
if (result != ItemCheckResult.FINE) {
if (HumanPermHelper.hasPermission(AEFPermission.BYPASS_ILLEGAL_BANNEDNAME, event.getPlayer())) return;

event.setCancelled(true);
takeAction(event.getItem(), result);
}
}

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onInteractEntity(PlayerInteractEntityEvent event) {
ItemStack handItem = event.getPlayer().getInventory().getItem(event.getHand());
final ItemCheckResult result = checkItem(handItem);
if (result != ItemCheckResult.FINE) {
if (HumanPermHelper.hasPermission(AEFPermission.BYPASS_ILLEGAL_BANNEDNAME, event.getPlayer())) return;

event.setCancelled(true);
takeAction(handItem, result);
}
}
}
Loading

0 comments on commit d3d92d0

Please sign in to comment.