Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc7d701913 |
No files matched your search
+21
-1
@@ -4,6 +4,8 @@ plugins {
|
||||
|
||||
idea
|
||||
eclipse
|
||||
|
||||
id("com.github.johnrengelman.shadow") version "7.1.0"
|
||||
}
|
||||
|
||||
repositories {
|
||||
@@ -20,6 +22,10 @@ repositories {
|
||||
name = "PaperMC"
|
||||
url = uri("https://repo.papermc.io/repository/maven-public/")
|
||||
}
|
||||
maven {
|
||||
name = "PacketEvents"
|
||||
url = uri("https://repo.codemc.io/repository/maven-releases/")
|
||||
}
|
||||
maven {
|
||||
name = "ProtocolLib"
|
||||
url = uri("https://repo.dmulloy2.net/nexus/repository/public/")
|
||||
@@ -52,6 +58,7 @@ dependencies {
|
||||
compileOnly("fr.minuskube.inv:smart-invs:1.2.7")
|
||||
//compileOnly("com.github.CraftingStore.MinecraftPlugin:core:master-e366d322f8-1")
|
||||
compileOnly("com.github.brcdev-minecraft:shopgui-api:3.0.0")
|
||||
implementation("com.github.retrooper:packetevents-spigot:2.4.0")
|
||||
}
|
||||
|
||||
the<JavaPluginExtension>().toolchain {
|
||||
@@ -66,10 +73,23 @@ tasks.compileJava.configure {
|
||||
options.release.set(8)
|
||||
}
|
||||
|
||||
version = "2.9.12-SNAPSHOT-01"
|
||||
version = "2.10.0-SNAPSHOT-01"
|
||||
|
||||
tasks.named<Copy>("processResources") {
|
||||
filesMatching("plugin.yml") {
|
||||
expand("version" to project.version)
|
||||
}
|
||||
}
|
||||
|
||||
// ShadowJar configuration
|
||||
tasks.shadowJar {
|
||||
// Optionally, relocate the PacketEvents package to avoid conflicts
|
||||
relocate("com.github.retrooper.packetevents", "me.dniym.packetevents.api")
|
||||
relocate("io.github.retrooper.packetevents", "me.dniym.packetevents.impl")
|
||||
minimize()
|
||||
}
|
||||
|
||||
// Build the ShadowJar
|
||||
tasks.build {
|
||||
dependsOn(tasks.shadowJar)
|
||||
}
|
||||
@@ -1,16 +1,20 @@
|
||||
package main.java.me.dniym;
|
||||
|
||||
import com.github.retrooper.packetevents.PacketEvents;
|
||||
import com.github.retrooper.packetevents.PacketEventsAPI;
|
||||
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
|
||||
import main.java.me.dniym.commands.IllegalStackCommand;
|
||||
import main.java.me.dniym.enums.Msg;
|
||||
import main.java.me.dniym.enums.Protections;
|
||||
import main.java.me.dniym.enums.ServerVersion;
|
||||
import main.java.me.dniym.listeners.CreativeInvPacketListeners;
|
||||
import main.java.me.dniym.listeners.Listener113;
|
||||
import main.java.me.dniym.listeners.Listener114;
|
||||
import main.java.me.dniym.listeners.Listener116;
|
||||
import main.java.me.dniym.listeners.ProtectionListener;
|
||||
import main.java.me.dniym.listeners.UseEntityPacketListener;
|
||||
import main.java.me.dniym.listeners.fListener;
|
||||
import main.java.me.dniym.listeners.mcMMOListener;
|
||||
import main.java.me.dniym.listeners.pLisbListener;
|
||||
import main.java.me.dniym.timers.fTimer;
|
||||
import main.java.me.dniym.timers.sTimer;
|
||||
import main.java.me.dniym.timers.syncTimer;
|
||||
@@ -23,6 +27,7 @@ import org.bukkit.World;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
@@ -112,6 +117,16 @@ public class IllegalStack extends JavaPlugin {
|
||||
CMI = cMI;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad() {
|
||||
// Load PacketEventsAPI
|
||||
PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this));
|
||||
PacketEvents.getAPI().getSettings()
|
||||
.checkForUpdates(false)
|
||||
.debug(false);
|
||||
PacketEvents.getAPI().load();
|
||||
}
|
||||
|
||||
public static void ReloadConfig(Boolean wasCommand) {
|
||||
if (!wasCommand) {
|
||||
IllegalStack.getPlugin().writeConfig();
|
||||
@@ -432,6 +447,13 @@ public class IllegalStack extends JavaPlugin {
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
// Register PacketEvents listeners
|
||||
LOGGER.info("Registering PacketEvents listeners...");
|
||||
PacketEvents.getAPI().getEventManager().registerListeners(new CreativeInvPacketListeners(this));
|
||||
PacketEvents.getAPI().getEventManager().registerListeners(new UseEntityPacketListener(this));
|
||||
PacketEventsAPI<?> packetEventsAPI = PacketEvents.getAPI();
|
||||
packetEventsAPI.init();
|
||||
LOGGER.info("PacketEvents API {} has been initialized!", PacketEvents.getAPI().getVersion());
|
||||
|
||||
// new EntityRegistry(this);
|
||||
this.setPlugin(this);
|
||||
@@ -542,25 +564,6 @@ public class IllegalStack extends JavaPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
if (this
|
||||
.getServer()
|
||||
.getPluginManager()
|
||||
.getPlugin("ProtocolLib") != null && Protections.BlockBadItemsFromCreativeTab.isEnabled()) {
|
||||
LOGGER.info(
|
||||
"ProtocolLib was detected, creative inventory exploit detection enabled. NOTE* This protection ONLY needs to be turned on if you have regular (non op) players with access to /gmc");
|
||||
new pLisbListener(this);
|
||||
}
|
||||
|
||||
if (this.getServer().getPluginManager().getPlugin("ProtocolLib") == null && Protections.DisableChestsOnMobs.isEnabled()) {
|
||||
|
||||
LOGGER.warn(
|
||||
"ProtocolLib NOT FOUND!!!! and DisableChestsOnMobs protection is turned on.. It may still be possible for players to dupe using horses/donkeys on your server using a hacked client. It is highly recommended that you install ProtocolLib for optimal protection!");
|
||||
|
||||
} else if (Protections.DisableChestsOnMobs.isEnabled()) {
|
||||
new pLisbListener(this);
|
||||
setHasProtocolLib(true);
|
||||
}
|
||||
|
||||
this.getServer().getPluginManager().registerEvents(new fListener(this), this);
|
||||
|
||||
if (!fListener.is18()) {
|
||||
@@ -1033,13 +1036,26 @@ public class IllegalStack extends JavaPlugin {
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
// Signal plugin is now disabled
|
||||
disable = true;
|
||||
|
||||
// Terminate PacketEvents
|
||||
PacketEvents.getAPI().getEventManager().unregisterAllListeners();
|
||||
PacketEvents.getAPI().terminate();
|
||||
LOGGER.info("PacketEvents has been terminated successfully!");
|
||||
|
||||
// Unregister listeners
|
||||
HandlerList.unregisterAll(this);
|
||||
LOGGER.info("Listeners have unregistered successfully!");
|
||||
|
||||
// Cancel all tasks
|
||||
if (hasAsyncScheduler) {
|
||||
getServer().getAsyncScheduler().cancelTasks(this);
|
||||
} else if (!isFoliaServer()){
|
||||
Bukkit.getScheduler().cancelTasks(this);
|
||||
}
|
||||
|
||||
// Save configuration
|
||||
writeConfig();
|
||||
}
|
||||
|
||||
|
||||
@@ -1676,8 +1676,7 @@ public enum Protections {
|
||||
public boolean isDisabledInWorld(World wld) {
|
||||
return Protections.DisableInWorlds.isWhitelisted(wld.getName());
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
|
||||
public boolean isEnabled() {
|
||||
if (this.getVersion().isEmpty()) //child node
|
||||
return this.enabled;
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package main.java.me.dniym.listeners;
|
||||
|
||||
import com.github.retrooper.packetevents.event.PacketListenerAbstract;
|
||||
import com.github.retrooper.packetevents.event.PacketListenerPriority;
|
||||
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
|
||||
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
|
||||
import com.github.retrooper.packetevents.protocol.player.User;
|
||||
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientCreativeInventoryAction;
|
||||
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
|
||||
import main.java.me.dniym.IllegalStack;
|
||||
import main.java.me.dniym.enums.Msg;
|
||||
import main.java.me.dniym.enums.Protections;
|
||||
import main.java.me.dniym.utils.Scheduler;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class CreativeInvPacketListeners extends PacketListenerAbstract {
|
||||
|
||||
private final IllegalStack plugin;
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger("IllegalStack/" + CreativeInvPacketListeners.class.getSimpleName());
|
||||
|
||||
public CreativeInvPacketListeners(IllegalStack plugin) {
|
||||
super(PacketListenerPriority.LOW);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketReceive(PacketReceiveEvent event) {
|
||||
|
||||
if (event.getPacketType() != PacketType.Play.Client.CREATIVE_INVENTORY_ACTION) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Protections.BlockBadItemsFromCreativeTab.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
User user = event.getUser();
|
||||
UUID uuid = user.getUUID();
|
||||
Player player = plugin.getServer().getPlayer(uuid);
|
||||
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.isOp() || player.hasPermission("illegalstack.admin")) {
|
||||
return;
|
||||
}
|
||||
|
||||
WrapperPlayClientCreativeInventoryAction packetWrapper = new WrapperPlayClientCreativeInventoryAction(event);
|
||||
|
||||
try {
|
||||
com.github.retrooper.packetevents.protocol.item.ItemStack wrapperItemStack = packetWrapper.getItemStack();
|
||||
ItemStack stack = SpigotConversionUtil.toBukkitItemStack(wrapperItemStack);
|
||||
if (stack != null && stack.hasItemMeta()) {
|
||||
stack = new ItemStack(Material.AIR);
|
||||
Scheduler.runTaskLater(plugin, player::updateInventory, 5L, player);
|
||||
event.setCancelled(true);
|
||||
Msg.StaffMsgCreativeBlock.getValue(player.getName());
|
||||
}
|
||||
} catch (IndexOutOfBoundsException ex) {
|
||||
LOGGER.error(
|
||||
"An error receiving a CREATIVE_INVENTORY_ACTION packet has occurred, you are probably using paper and have BlockBadItemsFromCreativeTab turned on. This setting is needed very rarely, and ONLY if you have regular non-op players with access to /gmc.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package main.java.me.dniym.listeners;
|
||||
|
||||
import com.github.retrooper.packetevents.event.PacketListenerAbstract;
|
||||
import com.github.retrooper.packetevents.event.PacketListenerPriority;
|
||||
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
|
||||
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
|
||||
import com.github.retrooper.packetevents.protocol.player.User;
|
||||
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientInteractEntity;
|
||||
import main.java.me.dniym.IllegalStack;
|
||||
import main.java.me.dniym.enums.Msg;
|
||||
import main.java.me.dniym.enums.Protections;
|
||||
import main.java.me.dniym.timers.fTimer;
|
||||
import main.java.me.dniym.utils.Scheduler;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.ChestedHorse;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public class UseEntityPacketListener extends PacketListenerAbstract {
|
||||
|
||||
private final IllegalStack plugin;
|
||||
private final HashMap<UUID, Long> messageDelay = new HashMap<>();
|
||||
|
||||
public UseEntityPacketListener(IllegalStack plugin) {
|
||||
super(PacketListenerPriority.LOW);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketReceive(PacketReceiveEvent event) {
|
||||
|
||||
if (event.getPacketType() != PacketType.Play.Client.INTERACT_ENTITY) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!IllegalStack.hasChestedAnimals()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!Protections.DisableChestsOnMobs.isEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
User user = event.getUser();
|
||||
UUID uuid = user.getUUID();
|
||||
Player player = plugin.getServer().getPlayer(uuid);
|
||||
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.isOp() || player.hasPermission("illegalstack.admin")) {
|
||||
return;
|
||||
}
|
||||
|
||||
WrapperPlayClientInteractEntity packetWrapper = new WrapperPlayClientInteractEntity(event);
|
||||
|
||||
World world = player.getWorld();
|
||||
int entityId = packetWrapper.getEntityId();
|
||||
|
||||
if (entityId <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
Scheduler.runTask(plugin, () -> {
|
||||
|
||||
Entity entity = world.getEntities().stream().filter(e -> e.getEntityId() == entityId).findFirst().orElse(null);
|
||||
|
||||
Scheduler.runTaskLater(plugin, () -> {
|
||||
|
||||
if (entity instanceof Horse && ((Horse) entity).isTamed()) {
|
||||
ItemStack is = player.getInventory().getItemInMainHand();
|
||||
if (!fListener.is18() && (is == null || is.getType() != Material.CHEST)) {
|
||||
is = player.getInventory().getItemInOffHand();
|
||||
}
|
||||
if (is == null || is.getType() != Material.CHEST) {
|
||||
return;
|
||||
}
|
||||
exploitMessage(player, entity);
|
||||
event.setCancelled(true);
|
||||
fTimer.getPunish().put(player, entity);
|
||||
return;
|
||||
}
|
||||
|
||||
if (entity instanceof ChestedHorse && ((ChestedHorse) entity).isTamed()) {
|
||||
ItemStack is = player.getInventory().getItemInMainHand();
|
||||
if (is == null || is.getType() != Material.CHEST) {
|
||||
is = player.getInventory().getItemInOffHand();
|
||||
}
|
||||
if (is == null || is.getType() != Material.CHEST) {
|
||||
return;
|
||||
}
|
||||
exploitMessage(player, entity);
|
||||
event.setCancelled(true);
|
||||
|
||||
((ChestedHorse) entity).setCarryingChest(true);
|
||||
((ChestedHorse) entity).setCarryingChest(false);
|
||||
fTimer.getPunish().put(player, entity);
|
||||
}
|
||||
|
||||
}, 1, entity);
|
||||
|
||||
}, player.getLocation());
|
||||
}
|
||||
|
||||
private void exploitMessage(Player p, Entity ent) {
|
||||
if (!messageDelay.containsKey(p.getUniqueId())) {
|
||||
messageDelay.put(p.getUniqueId(), 0L);
|
||||
}
|
||||
|
||||
if (System.currentTimeMillis() > messageDelay.get(p.getUniqueId())) {
|
||||
p.sendMessage(Msg.PlayerDisabledHorseChestMsg.getValue());
|
||||
fListener.getLog().append2(Msg.ChestPrevented.getValue(p, ent));
|
||||
messageDelay.put(p.getUniqueId(), System.currentTimeMillis() + 2000L);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -64,7 +64,6 @@ import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.entity.Tameable;
|
||||
import org.bukkit.entity.TraderLlama;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
import org.bukkit.entity.Vex;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.entity.minecart.HopperMinecart;
|
||||
@@ -85,6 +84,7 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntityMountEvent;
|
||||
import org.bukkit.event.entity.EntityPortalEvent;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import org.bukkit.event.entity.EntityTargetEvent;
|
||||
@@ -94,7 +94,6 @@ import org.bukkit.event.inventory.InventoryCreativeEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
@@ -120,7 +119,6 @@ import org.bukkit.inventory.meta.BlockStateMeta;
|
||||
import org.bukkit.inventory.meta.BookMeta;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.spigotmc.event.entity.EntityMountEvent;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -18,10 +18,13 @@ import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
@Deprecated
|
||||
@ApiStatus.ScheduledForRemoval
|
||||
public class pLisbListener {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger("IllegalStack/" + pLisbListener.class.getSimpleName());
|
||||
|
||||
@@ -7,7 +7,10 @@ import com.comphenix.protocol.reflect.StructureModifier;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
@Deprecated
|
||||
@ApiStatus.ScheduledForRemoval
|
||||
public class BookCrashExploitCheck extends PacketAdapter {
|
||||
|
||||
public BookCrashExploitCheck(final Plugin plugin) {
|
||||
|
||||
@@ -8,11 +8,14 @@ import com.comphenix.protocol.events.PacketEvent;
|
||||
import main.java.me.dniym.listeners.fListener;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.UUID;
|
||||
|
||||
@Deprecated
|
||||
@ApiStatus.ScheduledForRemoval
|
||||
public class PacketAttack {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger("IllegalStack/" + PacketAttack.class.getSimpleName());
|
||||
|
||||
@@ -11,6 +11,7 @@ import net.md_5.bungee.api.chat.hover.content.Text;
|
||||
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class SpigotMethods {
|
||||
|
||||
public static BaseComponent makeParentText(Protections protections, String status, boolean children, int catId) {
|
||||
|
||||
@@ -5,7 +5,23 @@ api-version: 1.13
|
||||
folia-supported: true
|
||||
description: Closes some dupe bugs still present in vanilla minecraft.
|
||||
authors: [ dNiym, Loving11ish ]
|
||||
softdepend: [Magic, Factions, NBTAPI, ProtocolLib, Slimefun, CraftingStore, DynamicShop, ClueScrolls, mcMMO, JetsMinions, SmartInvs, FactionsX]
|
||||
softdepend:
|
||||
- MagicFactions
|
||||
- NBTAPI
|
||||
- ProtocolLib
|
||||
- ProtocolSupport
|
||||
- ViaVersion
|
||||
- ViaBackwards
|
||||
- ViaRewind
|
||||
- Geyser-Spigot
|
||||
- Slimefun
|
||||
- CraftingStore
|
||||
- DynamicShop
|
||||
- ClueScrolls
|
||||
- mcMMO
|
||||
- JetsMinions
|
||||
- SmartInvs
|
||||
- FactionsX
|
||||
loadbefore: [MythicDrops]
|
||||
website: https://www.spigotmc.org/resources/44411/
|
||||
commands:
|
||||
|
||||
Reference in new issue
Block a user