mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-07-01 20:46:41 +00:00
Compare commits
25 Commits
proper-res
...
feat/build
Author | SHA1 | Date | |
---|---|---|---|
0333a0988c | |||
2faceac61f | |||
7faf719555 | |||
3bcf0f5082 | |||
c5f24b46d5 | |||
3016c57e3e | |||
00351f1163 | |||
40d22fa2e3 | |||
41923b29d7 | |||
0e7a2d9bce | |||
dcebf7bbe7 | |||
d30e335f57 | |||
cca95dc3f1 | |||
42b68011ea | |||
87d7ba19de | |||
16c00e3ed6 | |||
79e7f6904b | |||
1c096b97e3 | |||
cc48f93556 | |||
dd373fc9aa | |||
41331e719d | |||
72c83ba84a | |||
3deaaafb88 | |||
520bd97176 | |||
654f5900ba |
56
pom.xml
56
pom.xml
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>me.totalfreedom</groupId>
|
<groupId>me.totalfreedom</groupId>
|
||||||
<artifactId>TotalFreedomMod</artifactId>
|
<artifactId>TotalFreedomMod</artifactId>
|
||||||
<version>2022.06</version>
|
<version>2022.06.1</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@ -39,68 +39,30 @@
|
|||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>atlas-nexus-01-totalfreedom-development</id>
|
<id>atlas-nexus-01-totalfreedom-development</id>
|
||||||
<url>https://nexus-01.core.atlas-media.co.uk/repository/totalfreedom-development/</url>
|
<url>https://nexus-01.core.atlas-media.co.uk/repository/totalfreedom-development/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>CodeMC</id>
|
|
||||||
<url>https://repo.codemc.org/repository/maven-public/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>spigot-repo</id>
|
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>enginehub</id>
|
<id>enginehub</id>
|
||||||
<url>https://maven.enginehub.org/repo/</url>
|
<url>https://maven.enginehub.org/repo/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>elmakers-repo</id>
|
|
||||||
<url>https://maven.elmakers.com/repository/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>sk89q-snapshots</id>
|
|
||||||
<url>https://maven.sk89q.com/artifactory/repo</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>dv8tion</id>
|
|
||||||
<name>m2-dv8tion</name>
|
|
||||||
<url>https://m2.dv8tion.net/releases/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>playpro</id>
|
<id>playpro</id>
|
||||||
<url>https://maven.playpro.com/</url>
|
<url>https://maven.playpro.com/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>md_5-public</id>
|
<id>essentialsx-repo</id>
|
||||||
<url>https://repo.md-5.net/content/groups/public/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>dmulloy2-repo</id>
|
|
||||||
<url>https://repo.dmulloy2.net/nexus/repository/public/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>sk89q-repo</id>
|
|
||||||
<url>https://maven.sk89q.com/repo/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>esentialsx-repo</id>
|
|
||||||
<url>https://repo.essentialsx.net/releases/</url>
|
<url>https://repo.essentialsx.net/releases/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<id>jitpack</id>
|
||||||
|
<url>https://jitpack.io/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@ -128,8 +90,8 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.totalfreedom.scissors</groupId>
|
<groupId>me.totalfreedom.scissors</groupId>
|
||||||
<artifactId>scissors-api</artifactId>
|
<artifactId>Scissors-API</artifactId>
|
||||||
<version>1.17.1-R0.1-SNAPSHOT</version>
|
<version>1.19.4-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@ -150,7 +112,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sk89q.worldedit</groupId>
|
<groupId>com.sk89q.worldedit</groupId>
|
||||||
<artifactId>worldedit-bukkit</artifactId>
|
<artifactId>worldedit-bukkit</artifactId>
|
||||||
<version>7.2.12</version>
|
<version>7.2.15</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
@ -1,25 +1,17 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import com.google.common.collect.Multimap;
|
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
|
|
||||||
import java.util.Collection;
|
import net.kyori.adventure.text.Component;
|
||||||
import java.util.Map;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import java.util.Objects;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.attribute.Attribute;
|
|
||||||
import org.bukkit.attribute.AttributeModifier;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.player.PlayerItemHeldEvent;
|
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.spigotmc.event.player.PlayerSpawnLocationEvent;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
public class MovementValidator extends FreedomService
|
public class MovementValidator extends FreedomService
|
||||||
{
|
{
|
||||||
@ -41,67 +33,36 @@ public class MovementValidator extends FreedomService
|
|||||||
public void onPlayerTeleport(PlayerTeleportEvent event)
|
public void onPlayerTeleport(PlayerTeleportEvent event)
|
||||||
{
|
{
|
||||||
// Check absolute value to account for negatives
|
// Check absolute value to account for negatives
|
||||||
if (Math.abs(Objects.requireNonNull(event.getTo()).getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
|
if (isOutOfBounds(event.getTo()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true); // illegal position, cancel it
|
event.setCancelled(true); // illegal position, cancel it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isOutOfBounds(final Location position)
|
||||||
|
{
|
||||||
|
return Math.abs(position.getX()) >= MAX_XYZ_COORD || Math.abs(position.getY()) >= MAX_XYZ_COORD || Math.abs(position.getZ()) >= MAX_XYZ_COORD;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerMove(PlayerMoveEvent event)
|
public void onPlayerMove(PlayerMoveEvent event)
|
||||||
{
|
{
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
Location to = event.getTo();
|
Location to = event.getTo();
|
||||||
assert to != null;
|
double distance = from.distanceSquared(to);
|
||||||
if (to.getX() >= from.getX() + MAX_DISTANCE_TRAVELED || to.getY() >= from.getY() + MAX_DISTANCE_TRAVELED || to.getZ() >= from.getZ() + MAX_DISTANCE_TRAVELED)
|
|
||||||
|
if (distance >= MAX_DISTANCE_TRAVELED)
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
player.kickPlayer(ChatColor.RED + "You were moving too quickly!");
|
player.kick(Component.text("You were moving too quickly!", NamedTextColor.RED));
|
||||||
}
|
}
|
||||||
// Check absolute value to account for negatives
|
// Check absolute value to account for negatives
|
||||||
if (Math.abs(event.getTo().getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
|
if (isOutOfBounds(event.getTo()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation());
|
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getHelmet()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setHelmet(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your helmet slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getBoots()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setBoots(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your boots slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getLeggings()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setLeggings(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your leggings slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getChestplate()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setChestplate(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your chestplate slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInMainHand()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your hand.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInOffHand()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setItemInOffHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your offhand.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
@ -110,72 +71,28 @@ public class MovementValidator extends FreedomService
|
|||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
|
||||||
// Validate position
|
// Validate position
|
||||||
if (Math.abs(player.getLocation().getX()) >= MAX_XYZ_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XYZ_COORD || Math.abs(player.getLocation().getY()) >= MAX_XYZ_COORD)
|
if (isOutOfBounds(player.getLocation()))
|
||||||
{
|
{
|
||||||
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn
|
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerHoldItem(PlayerItemHeldEvent event)
|
public void onPlayerSpawn(PlayerSpawnLocationEvent event)
|
||||||
{
|
{
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInMainHand()))
|
final Location playerSpawn = event.getSpawnLocation();
|
||||||
|
final Location worldSpawn = event.getPlayer().getWorld().getSpawnLocation();
|
||||||
|
|
||||||
|
// If the player's spawn is equal to the world's spawn, there is no need to check.
|
||||||
|
// This will also prevent any possible feedback loops pertaining to setting an out of bounds world spawn to the same world spawn.
|
||||||
|
if (playerSpawn == worldSpawn)
|
||||||
{
|
{
|
||||||
event.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR));
|
return;
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your hand.");
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInOffHand()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setItemInOffHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your offhand.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Boolean exploitItem(ItemStack item)
|
if (isOutOfBounds(worldSpawn))
|
||||||
{
|
{
|
||||||
if (item == null)
|
event.setSpawnLocation(worldSpawn);
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemMeta meta = item.getItemMeta();
|
|
||||||
if (meta != null)
|
|
||||||
{
|
|
||||||
Multimap<Attribute, AttributeModifier> attributes = meta.getAttributeModifiers();
|
|
||||||
if (attributes != null)
|
|
||||||
{
|
|
||||||
Map<Attribute, Collection<AttributeModifier>> attrMap = attributes.asMap();
|
|
||||||
|
|
||||||
// For every attribute...
|
|
||||||
for (Attribute attr : attributes.keySet())
|
|
||||||
{
|
|
||||||
// Default values
|
|
||||||
boolean posInf = false;
|
|
||||||
boolean negInf = false;
|
|
||||||
|
|
||||||
// For every AttributeModifier...
|
|
||||||
for (AttributeModifier modifier : attrMap.get(attr))
|
|
||||||
{
|
|
||||||
// Are they ∞ or -∞?
|
|
||||||
if (modifier.getAmount() == Double.POSITIVE_INFINITY)
|
|
||||||
{
|
|
||||||
posInf = true;
|
|
||||||
}
|
|
||||||
else if (modifier.getAmount() == Double.NEGATIVE_INFINITY)
|
|
||||||
{
|
|
||||||
negInf = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Are both values set as true?
|
|
||||||
if (posInf && negInf)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -156,7 +156,7 @@ public class Admin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ensure admins don't have admin functionality when removed (FS-222)
|
// Ensure admins don't have admin functionality when removed (FS-222)
|
||||||
AdminList.vanished.remove(getName());
|
AdminList.vanished.remove(getUuid());
|
||||||
|
|
||||||
if (plugin.esb != null)
|
if (plugin.esb != null)
|
||||||
{
|
{
|
||||||
|
@ -4,8 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
/* TODO This will have to be changed from com.github.atlasmediagroup.scissors to me.totalfreedom.scissors when we migrate to 1.19 */
|
import me.totalfreedom.scissors.event.block.MasterBlockFireEvent;
|
||||||
import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
|
|
||||||
import io.papermc.paper.event.player.PlayerSignCommandPreprocessEvent;
|
import io.papermc.paper.event.player.PlayerSignCommandPreprocessEvent;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
|
@ -24,7 +24,7 @@ import org.bukkit.plugin.SimplePluginManager;
|
|||||||
|
|
||||||
public class CommandBlocker extends FreedomService
|
public class CommandBlocker extends FreedomService
|
||||||
{
|
{
|
||||||
|
private final Pattern whitespacePattern = Pattern.compile("^/?( +)(.*)?");
|
||||||
private final Pattern flagPattern = Pattern.compile("(:([0-9]){5,})");
|
private final Pattern flagPattern = Pattern.compile("(:([0-9]){5,})");
|
||||||
//
|
//
|
||||||
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
|
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
|
||||||
@ -156,6 +156,14 @@ public class CommandBlocker extends FreedomService
|
|||||||
|
|
||||||
// Format
|
// Format
|
||||||
command = command.toLowerCase().trim();
|
command = command.toLowerCase().trim();
|
||||||
|
|
||||||
|
// Whitespaces
|
||||||
|
Matcher whitespaceMatcher = whitespacePattern.matcher(command);
|
||||||
|
if (whitespaceMatcher.matches() && whitespaceMatcher.groupCount() == 2)
|
||||||
|
{
|
||||||
|
command = whitespaceMatcher.group(2);
|
||||||
|
}
|
||||||
|
|
||||||
command = command.startsWith("/") ? command.substring(1) : command;
|
command = command.startsWith("/") ? command.substring(1) : command;
|
||||||
|
|
||||||
// Check for plugin specific commands
|
// Check for plugin specific commands
|
||||||
|
@ -13,7 +13,7 @@ softdepend:
|
|||||||
- JDA
|
- JDA
|
||||||
- Votifier
|
- Votifier
|
||||||
authors: [Madgeek1450, Prozza]
|
authors: [Madgeek1450, Prozza]
|
||||||
api-version: "1.17"
|
api-version: "1.19"
|
||||||
libraries:
|
libraries:
|
||||||
- org.apache.commons:commons-lang3:3.12.0
|
- org.apache.commons:commons-lang3:3.12.0
|
||||||
- commons-io:commons-io:2.11.0
|
- commons-io:commons-io:2.11.0
|
||||||
|
Reference in New Issue
Block a user