Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/main/java/me/txmc/core/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package me.txmc.core;

import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;

/**
* Simplified main plugin class for 6b6t functionality stubs.
*/
public class Main extends JavaPlugin {
private static Main instance;

@Override
public void onEnable() {
instance = this;
}

@Override
public void onDisable() {
}

public static Main getInstance() {
return instance;
}

public FileConfiguration getSectionConfig(Section section) {
return getConfig();
}

public void register(org.bukkit.event.Listener... listeners) {
for (org.bukkit.event.Listener listener : listeners) {
getServer().getPluginManager().registerEvents(listener, this);
}
}
}
11 changes: 11 additions & 0 deletions src/main/java/me/txmc/core/Section.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package me.txmc.core;

/**
* Minimal section interface used for modular systems in 6b6t.
*/
public interface Section {
void enable();
void disable();
void reloadConfig();
String getName();
}
95 changes: 95 additions & 0 deletions src/main/java/me/txmc/core/antiillegal/AntiIllegalMain.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package me.txmc.core.antiillegal;

import me.txmc.core.Main;
import me.txmc.core.Section;
import me.txmc.core.antiillegal.check.Check;
import me.txmc.core.antiillegal.check.checks.*;
import me.txmc.core.antiillegal.listeners.*;
import me.txmc.core.util.GlobalUtils;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.Cancellable;
import org.bukkit.inventory.ItemStack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;

/**
* Core of the anti illegal system for 6b6t.
*/
public class AntiIllegalMain implements Section {
private final Main plugin;
private final List<Check> checks = new ArrayList<>(Arrays.asList(
new OverStackCheck(),
new DurabilityCheck(),
new AttributeCheck(),
//new LoreCheck(),
new EnchantCheck(),
new PotionCheck(),
new BookCheck(),
new IllegalItemCheck()
));

private ConfigurationSection config;

public AntiIllegalMain(Main plugin) {
this.plugin = plugin;
}

public Main getPlugin() {
return plugin;
}

public List<Check> getChecks() {
return checks;
}

public ConfigurationSection config() {
return config;
}

@Override
public void enable() {

config = plugin.getSectionConfig(this);
checks.add(new NameCheck(config));
// checks.add(new ItemSizeCheck());

plugin.register(new PlayerListeners(this), new MiscListeners(this), new InventoryListeners(this), new AttackListener(), new StackedTotemsListener());
if(plugin.getConfig().getBoolean("AntiIllegal.EnableIllegalBlocksCleaner", true)) plugin.register(new IllegalBlocksCleaner());
}

@Override
public void disable() {

}

@Override
public void reloadConfig() {
config = plugin.getSectionConfig(this);
}

@Override
public String getName() {
return "AntiIllegal";
}

public void checkFixItem(ItemStack item, Cancellable cancellable) {
if (item == null || item.getType() == Material.AIR) return;
for (Check check : checks) {
if (check.shouldCheck(item) && check.check(item)) {
if (cancellable != null && !cancellable.isCancelled()) cancellable.setCancelled(true);
//GlobalUtils.log(Level.INFO, "Item %s failed the %s check and has been fixed.", getItemName(item), check.getClass().getSimpleName());
check.fix(item);
item.setItemMeta(item.getItemMeta());
}
}
}
private String getItemName(ItemStack itemStack) {
return (itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName()) ?
GlobalUtils.getStringContent(itemStack.getItemMeta().getDisplayName()) :
itemStack.getType().name();
}
}
14 changes: 14 additions & 0 deletions src/main/java/me/txmc/core/antiillegal/check/Check.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check;

import org.bukkit.inventory.ItemStack;

/**
* Base interface for item checks in 6b6t anti-illegal.
*/
public interface Check {
boolean check(ItemStack item);

boolean shouldCheck(ItemStack item);

void fix(ItemStack item);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/** Placeholder for AttributeCheck */
public class AttributeCheck implements Check {
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
14 changes: 14 additions & 0 deletions src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/** Placeholder for BookCheck */
public class BookCheck implements Check {
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/** Placeholder for DurabilityCheck */
public class DurabilityCheck implements Check {
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/** Placeholder for EnchantCheck */
public class EnchantCheck implements Check {
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/**
* Check for illegal NBT data on items.
* <p>
* Part of the 6b6t anti-illegal system.
* </p>
*/
public class IllegalDataCheck implements Check {
@Override
public boolean check(ItemStack item) {
return false;
}

@Override
public boolean shouldCheck(ItemStack item) {
return false;
}

@Override
public void fix(ItemStack item) {
// no-op
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.Main;
import me.txmc.core.antiillegal.check.Check;
import me.txmc.core.util.GlobalUtils;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

import java.util.*;
import java.util.logging.Level;

/**
* Checks and removes completely illegal items for 6b6t.
*/
public class IllegalItemCheck implements Check {
private final HashSet<Material> illegals;

public IllegalItemCheck() {
illegals = parseConfig();
}

@Override
public boolean check(ItemStack item) {
return illegals.contains(item.getType()); // O(1) thanks HashSet
}

@Override
public boolean shouldCheck(ItemStack item) {
return true;
}

@Override
public void fix(ItemStack item) {
item.setAmount(0);
}

private HashSet<Material> parseConfig() {
List<String> materialNames = Arrays.stream(Material.values()).map(Material::name).toList();
List<String> strList = Main.getInstance().getConfig().getStringList("AntiIllegal.IllegalItems");
List<Material> output = new ArrayList<>();
for (String raw : strList) {
try {
raw = raw.toUpperCase();
if (raw.contains("*")) {
raw = raw.replace("*", "");
for (String materialName : materialNames) {
if (materialName.contains(raw)) output.add(Material.getMaterial(materialName));
}
continue;
}
Material material = Material.getMaterial(raw);
if (material == null) throw new EnumConstantNotPresentException(Material.class, raw);
output.add(material);
} catch (EnumConstantNotPresentException | IllegalArgumentException e) {
GlobalUtils.log(Level.WARNING, "&3Unknown material&r&a %s&r&3 in blocks section of the config", raw);
}
}
return new HashSet<>(output);
}
}
16 changes: 16 additions & 0 deletions src/main/java/me/txmc/core/antiillegal/check/checks/NameCheck.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;

/** Placeholder for NameCheck */
public class NameCheck implements Check {
public NameCheck(ConfigurationSection section) {}
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/** Placeholder for OverStackCheck */
public class OverStackCheck implements Check {
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package me.txmc.core.antiillegal.check.checks;

import me.txmc.core.antiillegal.check.Check;
import org.bukkit.inventory.ItemStack;

/** Placeholder for PotionCheck */
public class PotionCheck implements Check {
@Override
public boolean check(ItemStack item) { return false; }
@Override
public boolean shouldCheck(ItemStack item) { return false; }
@Override
public void fix(ItemStack item) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package me.txmc.core.antiillegal.listeners;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;

/**
* Listener that prevents players from dealing excessive damage.
* Part of the 6b6t anti-illegal suite.
*/
public class AttackListener implements Listener {
@EventHandler
public void onAttack(EntityDamageByEntityEvent event) {
if (!(event.getDamager() instanceof Player)) return;
if (event.getDamage() > 30D) {
event.setCancelled(true);
((Player) event.getDamager()).damage(event.getDamage());
}
}
}
Loading
Loading