Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d23dc10bc5 | ||
|
|
46c2e3f90a | ||
|
|
1776b668a4 | ||
|
|
10dccd0f38 | ||
|
|
f1918eb1ec | ||
|
|
436b33fde2 | ||
|
|
cfa5cab1fa | ||
|
|
a8ba4dd812 | ||
|
|
94bf383d23 | ||
|
|
096207de82 | ||
|
|
3cb654f5df | ||
|
|
5552cc4fb0 | ||
|
|
94aacf8cca |
@@ -69,6 +69,7 @@ allprojects {
|
|||||||
exclude group: "org.kitteh", module: "paste-gg-api"
|
exclude group: "org.kitteh", module: "paste-gg-api"
|
||||||
exclude group: "org.spongepowered", module: "configurate-hocon"
|
exclude group: "org.spongepowered", module: "configurate-hocon"
|
||||||
exclude group: "com.darkblade12", module: "particleeffect"
|
exclude group: "com.darkblade12", module: "particleeffect"
|
||||||
|
exclude group: "com.github.cryptomorin", module: "XSeries"
|
||||||
}
|
}
|
||||||
|
|
||||||
shadowJar {
|
shadowJar {
|
||||||
|
|||||||
@@ -9,16 +9,11 @@ import org.bukkit.inventory.MerchantRecipe;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
|
|
||||||
public final class VillagerTrade implements VillagerTradeProxy {
|
public final class VillagerTrade implements VillagerTradeProxy {
|
||||||
@Override
|
@Override
|
||||||
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
||||||
try {
|
try {
|
||||||
// Enables removing final modifier
|
|
||||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
|
||||||
modifiersField.setAccessible(true);
|
|
||||||
|
|
||||||
// Bukkit MerchantRecipe result
|
// Bukkit MerchantRecipe result
|
||||||
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
||||||
fResult.setAccessible(true);
|
fResult.setAccessible(true);
|
||||||
@@ -31,11 +26,9 @@ public final class VillagerTrade implements VillagerTradeProxy {
|
|||||||
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
||||||
fHandle.setAccessible(true);
|
fHandle.setAccessible(true);
|
||||||
net.minecraft.server.v1_15_R1.MerchantRecipe handle = (net.minecraft.server.v1_15_R1.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
net.minecraft.server.v1_15_R1.MerchantRecipe handle = (net.minecraft.server.v1_15_R1.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
||||||
modifiersField.setInt(fHandle, fHandle.getModifiers() & ~Modifier.FINAL); // Remove final
|
|
||||||
|
|
||||||
Field fSelling = net.minecraft.server.v1_15_R1.MerchantRecipe.class.getDeclaredField("sellingItem");
|
Field fSelling = net.minecraft.server.v1_15_R1.MerchantRecipe.class.getDeclaredField("sellingItem");
|
||||||
fSelling.setAccessible(true);
|
fSelling.setAccessible(true);
|
||||||
modifiersField.setInt(fSelling, fSelling.getModifiers() & ~Modifier.FINAL);
|
|
||||||
|
|
||||||
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
||||||
Display.displayAndFinalize(selling);
|
Display.displayAndFinalize(selling);
|
||||||
|
|||||||
@@ -9,16 +9,11 @@ import org.bukkit.inventory.MerchantRecipe;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
|
|
||||||
public final class VillagerTrade implements VillagerTradeProxy {
|
public final class VillagerTrade implements VillagerTradeProxy {
|
||||||
@Override
|
@Override
|
||||||
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
||||||
try {
|
try {
|
||||||
// Enables removing final modifier
|
|
||||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
|
||||||
modifiersField.setAccessible(true);
|
|
||||||
|
|
||||||
// Bukkit MerchantRecipe result
|
// Bukkit MerchantRecipe result
|
||||||
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
||||||
fResult.setAccessible(true);
|
fResult.setAccessible(true);
|
||||||
@@ -30,11 +25,9 @@ public final class VillagerTrade implements VillagerTradeProxy {
|
|||||||
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
||||||
fHandle.setAccessible(true);
|
fHandle.setAccessible(true);
|
||||||
net.minecraft.server.v1_16_R1.MerchantRecipe handle = (net.minecraft.server.v1_16_R1.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
net.minecraft.server.v1_16_R1.MerchantRecipe handle = (net.minecraft.server.v1_16_R1.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
||||||
modifiersField.setInt(fHandle, fHandle.getModifiers() & ~Modifier.FINAL); // Remove final
|
|
||||||
|
|
||||||
Field fSelling = net.minecraft.server.v1_16_R1.MerchantRecipe.class.getDeclaredField("sellingItem");
|
Field fSelling = net.minecraft.server.v1_16_R1.MerchantRecipe.class.getDeclaredField("sellingItem");
|
||||||
fSelling.setAccessible(true);
|
fSelling.setAccessible(true);
|
||||||
modifiersField.setInt(fSelling, fSelling.getModifiers() & ~Modifier.FINAL);
|
|
||||||
|
|
||||||
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
||||||
Display.displayAndFinalize(selling);
|
Display.displayAndFinalize(selling);
|
||||||
|
|||||||
@@ -9,16 +9,11 @@ import org.bukkit.inventory.MerchantRecipe;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
|
|
||||||
public final class VillagerTrade implements VillagerTradeProxy {
|
public final class VillagerTrade implements VillagerTradeProxy {
|
||||||
@Override
|
@Override
|
||||||
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
||||||
try {
|
try {
|
||||||
// Enables removing final modifier
|
|
||||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
|
||||||
modifiersField.setAccessible(true);
|
|
||||||
|
|
||||||
// Bukkit MerchantRecipe result
|
// Bukkit MerchantRecipe result
|
||||||
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
||||||
fResult.setAccessible(true);
|
fResult.setAccessible(true);
|
||||||
@@ -30,11 +25,9 @@ public final class VillagerTrade implements VillagerTradeProxy {
|
|||||||
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
||||||
fHandle.setAccessible(true);
|
fHandle.setAccessible(true);
|
||||||
net.minecraft.server.v1_16_R2.MerchantRecipe handle = (net.minecraft.server.v1_16_R2.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
net.minecraft.server.v1_16_R2.MerchantRecipe handle = (net.minecraft.server.v1_16_R2.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
||||||
modifiersField.setInt(fHandle, fHandle.getModifiers() & ~Modifier.FINAL); // Remove final
|
|
||||||
|
|
||||||
Field fSelling = net.minecraft.server.v1_16_R2.MerchantRecipe.class.getDeclaredField("sellingItem");
|
Field fSelling = net.minecraft.server.v1_16_R2.MerchantRecipe.class.getDeclaredField("sellingItem");
|
||||||
fSelling.setAccessible(true);
|
fSelling.setAccessible(true);
|
||||||
modifiersField.setInt(fSelling, fSelling.getModifiers() & ~Modifier.FINAL);
|
|
||||||
|
|
||||||
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
||||||
Display.displayAndFinalize(selling);
|
Display.displayAndFinalize(selling);
|
||||||
|
|||||||
@@ -9,16 +9,11 @@ import org.bukkit.inventory.MerchantRecipe;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
|
|
||||||
public final class VillagerTrade implements VillagerTradeProxy {
|
public final class VillagerTrade implements VillagerTradeProxy {
|
||||||
@Override
|
@Override
|
||||||
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
public void displayTrade(@NotNull final MerchantRecipe merchantRecipe) {
|
||||||
try {
|
try {
|
||||||
// Enables removing final modifier
|
|
||||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
|
||||||
modifiersField.setAccessible(true);
|
|
||||||
|
|
||||||
// Bukkit MerchantRecipe result
|
// Bukkit MerchantRecipe result
|
||||||
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
Field fResult = MerchantRecipe.class.getDeclaredField("result");
|
||||||
fResult.setAccessible(true);
|
fResult.setAccessible(true);
|
||||||
@@ -29,12 +24,10 @@ public final class VillagerTrade implements VillagerTradeProxy {
|
|||||||
// Get NMS MerchantRecipe from CraftMerchantRecipe
|
// Get NMS MerchantRecipe from CraftMerchantRecipe
|
||||||
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
Field fHandle = CraftMerchantRecipe.class.getDeclaredField("handle");
|
||||||
fHandle.setAccessible(true);
|
fHandle.setAccessible(true);
|
||||||
net.minecraft.server.v1_16_R3.MerchantRecipe handle = (net.minecraft.server.v1_16_R3.MerchantRecipe) fHandle.get(merchantRecipe); // NMS Recipe
|
net.minecraft.server.v1_16_R3.MerchantRecipe handle = (net.minecraft.server.v1_16_R3.MerchantRecipe) fHandle.get(merchantRecipe); // NMS RecipeR
|
||||||
modifiersField.setInt(fHandle, fHandle.getModifiers() & ~Modifier.FINAL); // Remove final
|
|
||||||
|
|
||||||
Field fSelling = net.minecraft.server.v1_16_R3.MerchantRecipe.class.getDeclaredField("sellingItem");
|
Field fSelling = net.minecraft.server.v1_16_R3.MerchantRecipe.class.getDeclaredField("sellingItem");
|
||||||
fSelling.setAccessible(true);
|
fSelling.setAccessible(true);
|
||||||
modifiersField.setInt(fSelling, fSelling.getModifiers() & ~Modifier.FINAL);
|
|
||||||
|
|
||||||
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
ItemStack selling = CraftItemStack.asBukkitCopy(handle.sellingItem);
|
||||||
Display.displayAndFinalize(selling);
|
Display.displayAndFinalize(selling);
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ dependencies {
|
|||||||
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.4-SNAPSHOT'
|
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.4-SNAPSHOT'
|
||||||
compileOnly 'com.github.TechFortress:GriefPrevention:16.14.0'
|
compileOnly 'com.github.TechFortress:GriefPrevention:16.14.0'
|
||||||
compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10'
|
compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10'
|
||||||
compileOnly 'com.github.cryptomorin:kingdoms:1.10.3.1'
|
compileOnly 'com.github.cryptomorin:kingdoms:1.10.14'
|
||||||
compileOnly 'com.github.TownyAdvanced:Towny:0.96.2.0'
|
compileOnly 'com.github.TownyAdvanced:Towny:0.96.2.0'
|
||||||
compileOnly 'com.github.angeschossen:LandsAPI:4.7.3'
|
compileOnly 'com.github.angeschossen:LandsAPI:4.7.3'
|
||||||
compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT'
|
compileOnly 'fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT'
|
||||||
|
|||||||
@@ -6,17 +6,18 @@ import com.willfp.eco.spigot.display.packets.PacketOpenWindowMerchant;
|
|||||||
import com.willfp.eco.spigot.display.packets.PacketSetCreativeSlot;
|
import com.willfp.eco.spigot.display.packets.PacketSetCreativeSlot;
|
||||||
import com.willfp.eco.spigot.display.packets.PacketSetSlot;
|
import com.willfp.eco.spigot.display.packets.PacketSetSlot;
|
||||||
import com.willfp.eco.spigot.display.packets.PacketWindowItems;
|
import com.willfp.eco.spigot.display.packets.PacketWindowItems;
|
||||||
import com.willfp.eco.spigot.integrations.anticheat.plugins.AnticheatAAC;
|
import com.willfp.eco.spigot.integrations.anticheat.AnticheatAAC;
|
||||||
import com.willfp.eco.spigot.integrations.anticheat.plugins.AnticheatMatrix;
|
import com.willfp.eco.spigot.integrations.anticheat.AnticheatMatrix;
|
||||||
import com.willfp.eco.spigot.integrations.anticheat.plugins.AnticheatNCP;
|
import com.willfp.eco.spigot.integrations.anticheat.AnticheatNCP;
|
||||||
import com.willfp.eco.spigot.integrations.antigrief.plugins.AntigriefFactionsUUID;
|
import com.willfp.eco.spigot.integrations.antigrief.AntigriefFactionsUUID;
|
||||||
import com.willfp.eco.spigot.integrations.antigrief.plugins.AntigriefGriefPrevention;
|
import com.willfp.eco.spigot.integrations.antigrief.AntigriefGriefPrevention;
|
||||||
import com.willfp.eco.spigot.integrations.antigrief.plugins.AntigriefKingdoms;
|
import com.willfp.eco.spigot.integrations.antigrief.AntigriefKingdoms;
|
||||||
import com.willfp.eco.spigot.integrations.antigrief.plugins.AntigriefLands;
|
import com.willfp.eco.spigot.integrations.antigrief.AntigriefLands;
|
||||||
import com.willfp.eco.spigot.integrations.antigrief.plugins.AntigriefTowny;
|
import com.willfp.eco.spigot.integrations.antigrief.AntigriefTowny;
|
||||||
import com.willfp.eco.spigot.integrations.antigrief.plugins.AntigriefWorldGuard;
|
import com.willfp.eco.spigot.integrations.antigrief.AntigriefWorldGuard;
|
||||||
import com.willfp.eco.spigot.integrations.mcmmo.plugins.McmmoIntegrationImpl;
|
import com.willfp.eco.spigot.integrations.mcmmo.McmmoIntegrationImpl;
|
||||||
import com.willfp.eco.util.command.AbstractCommand;
|
import com.willfp.eco.util.command.AbstractCommand;
|
||||||
|
import com.willfp.eco.util.display.Display;
|
||||||
import com.willfp.eco.util.drops.internal.FastCollatedDropQueue;
|
import com.willfp.eco.util.drops.internal.FastCollatedDropQueue;
|
||||||
import com.willfp.eco.util.events.armorequip.ArmorListener;
|
import com.willfp.eco.util.events.armorequip.ArmorListener;
|
||||||
import com.willfp.eco.util.events.armorequip.DispenserArmorListener;
|
import com.willfp.eco.util.events.armorequip.DispenserArmorListener;
|
||||||
@@ -48,6 +49,7 @@ public class EcoPlugin extends AbstractEcoPlugin {
|
|||||||
public EcoPlugin() {
|
public EcoPlugin() {
|
||||||
super("eco", 87955, 10043, "com.willfp.eco.proxy", "&a");
|
super("eco", 87955, 10043, "com.willfp.eco.proxy", "&a");
|
||||||
instance = this;
|
instance = this;
|
||||||
|
Display.setFinalizeKey(this.getNamespacedKeyFactory().create("finalized"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.anticheat.plugins;
|
package com.willfp.eco.spigot.integrations.anticheat;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
||||||
import me.konsolas.aac.api.AACAPI;
|
import me.konsolas.aac.api.AACAPI;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.anticheat.plugins;
|
package com.willfp.eco.spigot.integrations.anticheat;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
||||||
import me.rerere.matrix.api.events.PlayerViolationEvent;
|
import me.rerere.matrix.api.events.PlayerViolationEvent;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.anticheat.plugins;
|
package com.willfp.eco.spigot.integrations.anticheat;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
||||||
import fr.neatmonster.nocheatplus.checks.CheckType;
|
import fr.neatmonster.nocheatplus.checks.CheckType;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.anticheat.plugins;
|
package com.willfp.eco.spigot.integrations.anticheat;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
import com.willfp.eco.util.integrations.anticheat.AnticheatWrapper;
|
||||||
import me.vagdedes.spartan.api.PlayerViolationEvent;
|
import me.vagdedes.spartan.api.PlayerViolationEvent;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.antigrief.plugins;
|
package com.willfp.eco.spigot.integrations.antigrief;
|
||||||
|
|
||||||
import com.massivecraft.factions.Board;
|
import com.massivecraft.factions.Board;
|
||||||
import com.massivecraft.factions.FLocation;
|
import com.massivecraft.factions.FLocation;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.antigrief.plugins;
|
package com.willfp.eco.spigot.integrations.antigrief;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.antigrief.AntigriefWrapper;
|
import com.willfp.eco.util.integrations.antigrief.AntigriefWrapper;
|
||||||
import me.ryanhamshire.GriefPrevention.Claim;
|
import me.ryanhamshire.GriefPrevention.Claim;
|
||||||
@@ -1,26 +1,43 @@
|
|||||||
package com.willfp.eco.spigot.integrations.antigrief.plugins;
|
package com.willfp.eco.spigot.integrations.antigrief;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.antigrief.AntigriefWrapper;
|
import com.willfp.eco.util.integrations.antigrief.AntigriefWrapper;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.kingdoms.constants.kingdom.Kingdom;
|
import org.kingdoms.constants.kingdom.Kingdom;
|
||||||
|
import org.kingdoms.constants.kingdom.model.KingdomRelation;
|
||||||
import org.kingdoms.constants.land.Land;
|
import org.kingdoms.constants.land.Land;
|
||||||
|
import org.kingdoms.constants.player.DefaultKingdomPermission;
|
||||||
|
import org.kingdoms.constants.player.KingdomPlayer;
|
||||||
import org.kingdoms.managers.PvPManager;
|
import org.kingdoms.managers.PvPManager;
|
||||||
import org.kingdoms.managers.land.LandManager;
|
|
||||||
|
|
||||||
public class AntigriefKingdoms implements AntigriefWrapper {
|
public class AntigriefKingdoms implements AntigriefWrapper {
|
||||||
@Override
|
@Override
|
||||||
public boolean canBreakBlock(@NotNull final Player player,
|
public boolean canBreakBlock(@NotNull final Player player,
|
||||||
@NotNull final Block block) {
|
@NotNull final Block block) {
|
||||||
BlockBreakEvent event = new BlockBreakEvent(block, player);
|
KingdomPlayer kp = KingdomPlayer.getKingdomPlayer(player);
|
||||||
LandManager.onBreak(event);
|
if (kp.isAdmin()) {
|
||||||
return !event.isCancelled();
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Kingdom kingdom = kp.getKingdom();
|
||||||
|
if (kingdom == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Land land = Land.getLand(block);
|
||||||
|
|
||||||
|
if (land == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
DefaultKingdomPermission permission = land.isNexusLand() ? DefaultKingdomPermission.NEXUS_BUILD : DefaultKingdomPermission.BUILD;
|
||||||
|
if (!kp.hasPermission(permission)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return kingdom.hasAttribute(land.getKingdom(), KingdomRelation.Attribute.BUILD);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -41,10 +58,7 @@ public class AntigriefKingdoms implements AntigriefWrapper {
|
|||||||
@Override
|
@Override
|
||||||
public boolean canPlaceBlock(@NotNull final Player player,
|
public boolean canPlaceBlock(@NotNull final Player player,
|
||||||
@NotNull final Block block) {
|
@NotNull final Block block) {
|
||||||
Block placedOn = block.getRelative(0, -1, 0);
|
return canBreakBlock(player, block);
|
||||||
BlockPlaceEvent event = new BlockPlaceEvent(block, block.getState(), placedOn, player.getInventory().getItemInMainHand(), player, true, EquipmentSlot.HAND);
|
|
||||||
LandManager.onPlace(event);
|
|
||||||
return !event.isCancelled();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.antigrief.plugins;
|
package com.willfp.eco.spigot.integrations.antigrief;
|
||||||
|
|
||||||
import com.willfp.eco.util.integrations.antigrief.AntigriefWrapper;
|
import com.willfp.eco.util.integrations.antigrief.AntigriefWrapper;
|
||||||
import com.willfp.eco.util.internal.PluginDependent;
|
import com.willfp.eco.util.internal.PluginDependent;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.antigrief.plugins;
|
package com.willfp.eco.spigot.integrations.antigrief;
|
||||||
|
|
||||||
import com.palmergames.bukkit.towny.object.Town;
|
import com.palmergames.bukkit.towny.object.Town;
|
||||||
import com.palmergames.bukkit.towny.object.TownyPermission;
|
import com.palmergames.bukkit.towny.object.TownyPermission;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.antigrief.plugins;
|
package com.willfp.eco.spigot.integrations.antigrief;
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.willfp.eco.spigot.integrations.mcmmo.plugins;
|
package com.willfp.eco.spigot.integrations.mcmmo;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.meta.BonusDropMeta;
|
import com.gmail.nossr50.datatypes.meta.BonusDropMeta;
|
||||||
import com.gmail.nossr50.events.fake.FakeEvent;
|
import com.gmail.nossr50.events.fake.FakeEvent;
|
||||||
@@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
public class EcoEventManager extends PluginDependent implements EventManager {
|
public class EcoEventManager extends PluginDependent implements EventManager {
|
||||||
/**
|
/**
|
||||||
* Manager class for event management.
|
* Manager class for event management.
|
||||||
* <p>
|
|
||||||
* Prevents calls to {@link AbstractEcoPlugin#getInstance()}.
|
|
||||||
*
|
*
|
||||||
* @param plugin The {@link AbstractEcoPlugin} that this manages the events of.
|
* @param plugin The {@link AbstractEcoPlugin} that this manages the events of.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
package com.willfp.eco.util.display;
|
package com.willfp.eco.util.display;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
|
import org.apache.commons.lang.Validate;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -24,15 +30,9 @@ public class Display {
|
|||||||
private static final List<Function<ItemStack, ItemStack>> REVERT_FUNCTIONS = new ArrayList<>();
|
private static final List<Function<ItemStack, ItemStack>> REVERT_FUNCTIONS = new ArrayList<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registered finalize functions.
|
* NamespacedKey for finalizing.
|
||||||
*/
|
*/
|
||||||
public static final List<Function<ItemStack, ItemStack>> FINALIZE_FUNCTIONS = new ArrayList<>();
|
private static NamespacedKey finalizeKey;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registered finalize test functions.
|
|
||||||
*/
|
|
||||||
public static final List<Predicate<ItemStack>> FINALIZE_TEST_FUNCTIONS = new ArrayList<>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register display module.
|
* Register display module.
|
||||||
@@ -66,24 +66,6 @@ public class Display {
|
|||||||
REVERT_FUNCTIONS.add(function);
|
REVERT_FUNCTIONS.add(function);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Register finalize function.
|
|
||||||
*
|
|
||||||
* @param function The function.
|
|
||||||
*/
|
|
||||||
public void registerFinalizeModule(@NotNull final Function<ItemStack, ItemStack> function) {
|
|
||||||
FINALIZE_FUNCTIONS.add(function);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register finalize test function.
|
|
||||||
*
|
|
||||||
* @param function The function.
|
|
||||||
*/
|
|
||||||
public void registerFinalizeTestModule(@NotNull final Predicate<ItemStack> function) {
|
|
||||||
FINALIZE_TEST_FUNCTIONS.add(function);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display on ItemStacks.
|
* Display on ItemStacks.
|
||||||
*
|
*
|
||||||
@@ -91,6 +73,13 @@ public class Display {
|
|||||||
* @return The itemstack.
|
* @return The itemstack.
|
||||||
*/
|
*/
|
||||||
public ItemStack display(@NotNull final ItemStack itemStack) {
|
public ItemStack display(@NotNull final ItemStack itemStack) {
|
||||||
|
if (isFinalized(itemStack)) {
|
||||||
|
unfinalize(itemStack);
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
revert(itemStack);
|
||||||
|
|
||||||
for (Map<String, Function<ItemStack, ItemStack>> displayFunctions : DISPLAY_FUNCTIONS) {
|
for (Map<String, Function<ItemStack, ItemStack>> displayFunctions : DISPLAY_FUNCTIONS) {
|
||||||
if (displayFunctions == null) {
|
if (displayFunctions == null) {
|
||||||
continue;
|
continue;
|
||||||
@@ -121,9 +110,15 @@ public class Display {
|
|||||||
* @return The itemstack.
|
* @return The itemstack.
|
||||||
*/
|
*/
|
||||||
public ItemStack revert(@NotNull final ItemStack itemStack) {
|
public ItemStack revert(@NotNull final ItemStack itemStack) {
|
||||||
|
if (isFinalized(itemStack)) {
|
||||||
|
unfinalize(itemStack);
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
|
||||||
for (Function<ItemStack, ItemStack> displayFunction : REVERT_FUNCTIONS) {
|
for (Function<ItemStack, ItemStack> displayFunction : REVERT_FUNCTIONS) {
|
||||||
displayFunction.apply(itemStack);
|
displayFunction.apply(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
return itemStack;
|
return itemStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,26 +129,82 @@ public class Display {
|
|||||||
* @return The itemstack.
|
* @return The itemstack.
|
||||||
*/
|
*/
|
||||||
public ItemStack finalize(@NotNull final ItemStack itemStack) {
|
public ItemStack finalize(@NotNull final ItemStack itemStack) {
|
||||||
for (Function<ItemStack, ItemStack> function : FINALIZE_FUNCTIONS) {
|
Validate.notNull(finalizeKey, "Key cannot be null!");
|
||||||
function.apply(itemStack);
|
ItemMeta meta = itemStack.getItemMeta();
|
||||||
|
if (meta == null) {
|
||||||
|
return itemStack;
|
||||||
}
|
}
|
||||||
|
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||||
|
container.set(finalizeKey, PersistentDataType.INTEGER, 1);
|
||||||
|
itemStack.setItemMeta(meta);
|
||||||
return itemStack;
|
return itemStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finalize an ItemStacks.
|
* Unfinalize an ItemStacks.
|
||||||
|
*
|
||||||
|
* @param itemStack The item.
|
||||||
|
* @return The itemstack.
|
||||||
|
*/
|
||||||
|
public ItemStack unfinalize(@NotNull final ItemStack itemStack) {
|
||||||
|
Validate.notNull(finalizeKey, "Key cannot be null!");
|
||||||
|
ItemMeta meta = itemStack.getItemMeta();
|
||||||
|
if (meta == null) {
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||||
|
container.remove(finalizeKey);
|
||||||
|
itemStack.setItemMeta(meta);
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If an item is finalized.
|
||||||
*
|
*
|
||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return If finalized.
|
* @return If finalized.
|
||||||
*/
|
*/
|
||||||
public boolean isFinalized(@NotNull final ItemStack itemStack) {
|
public boolean isFinalized(@NotNull final ItemStack itemStack) {
|
||||||
for (Predicate<ItemStack> function : FINALIZE_TEST_FUNCTIONS) {
|
Validate.notNull(finalizeKey, "Key cannot be null!");
|
||||||
if (function.test(itemStack)) {
|
ItemMeta meta = itemStack.getItemMeta();
|
||||||
return true;
|
if (meta == null) {
|
||||||
}
|
return false;
|
||||||
}
|
}
|
||||||
|
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||||
|
return container.has(finalizeKey, PersistentDataType.INTEGER);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
|
/**
|
||||||
|
* Register finalize function.
|
||||||
|
*
|
||||||
|
* @param function The function.
|
||||||
|
* @deprecated Not needed.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void registerFinalizeModule(@NotNull final Function<ItemStack, ItemStack> function) {
|
||||||
|
// This function is not needed.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register finalize test function.
|
||||||
|
*
|
||||||
|
* @param function The function.
|
||||||
|
* @deprecated Not needed.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void registerFinalizeTestModule(@NotNull final Predicate<ItemStack> function) {
|
||||||
|
// This isn't needed.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set key to be used for finalization.
|
||||||
|
*
|
||||||
|
* @param finalizeKey The key.
|
||||||
|
*/
|
||||||
|
@ApiStatus.Internal
|
||||||
|
public static void setFinalizeKey(@NotNull final NamespacedKey finalizeKey) {
|
||||||
|
Display.finalizeKey = finalizeKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|||||||
@@ -2,14 +2,24 @@ package com.willfp.eco.util.drops.internal;
|
|||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@UtilityClass
|
@UtilityClass
|
||||||
public final class DropManager {
|
public final class DropManager {
|
||||||
/**
|
/**
|
||||||
* The currently used type, or implementation, of {@link AbstractDropQueue}.
|
* The currently used type, or implementation, of {@link AbstractDropQueue}.
|
||||||
* <p>
|
* <p>
|
||||||
* Standard by default, used if drops.collate key is not present in config.
|
* Default is {@link DropQueueType#COLLATED}, however this can be changed.
|
||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
private DropQueueType type = DropQueueType.COLLATED;
|
private DropQueueType type = DropQueueType.COLLATED;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the type of Drop Queue to be used.
|
||||||
|
*
|
||||||
|
* @param type The type.
|
||||||
|
*/
|
||||||
|
public static void setType(@NotNull final DropQueueType type) {
|
||||||
|
DropManager.type = type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
version = 3.3.0
|
version = 3.4.0
|
||||||
plugin-name = eco
|
plugin-name = eco
|
||||||
Reference in New Issue
Block a user