mirror of
https://github.com/JamesPeters98/ChestsPlusPlus.git
synced 2024-11-14 22:56:27 +01:00
Fixed Floating Items Remaining
1.17+ introduced a different method to load entities which caused issues. Paper/Spigot now correctly handle bugged armour stands on chunk load.
This commit is contained in:
parent
e1532d4116
commit
32757fd506
@ -8,9 +8,11 @@ import java.lang.reflect.InvocationTargetException;
|
||||
public class Api {
|
||||
|
||||
private static Plugin plugin;
|
||||
private static NMSProvider nmsProvider;
|
||||
|
||||
public static void register(Plugin plugin) {
|
||||
Api.plugin = plugin;
|
||||
Values.init(plugin);
|
||||
}
|
||||
|
||||
public static Plugin getPlugin() {
|
||||
@ -30,4 +32,8 @@ public class Api {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected static NMSProvider getNmsProvider() {
|
||||
return nmsProvider;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,56 @@
|
||||
package com.jamesdpeters.minecraft.chests;
|
||||
|
||||
import org.bukkit.Chunk;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Hopper;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public abstract class EntityEventListener implements Listener {
|
||||
|
||||
protected void fixEntities(Chunk chunk) {
|
||||
removeEntities(chunk);
|
||||
setItemFrames(chunk);
|
||||
}
|
||||
|
||||
public void fixEntities(World world) {
|
||||
removeEntities(world);
|
||||
setItemFrames(world);
|
||||
}
|
||||
|
||||
private void removeEntities(World world) {
|
||||
world.getEntities().forEach(this::removeEntity);
|
||||
}
|
||||
|
||||
private void removeEntities(Chunk chunk) {
|
||||
for (Entity entity : chunk.getEntities()) {
|
||||
removeEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
protected void removeEntity(Entity entity) {
|
||||
Integer val = entity.getPersistentDataContainer().get(Values.Instance().PluginKey, PersistentDataType.INTEGER);
|
||||
if (val != null && val == 1)
|
||||
entity.remove();
|
||||
}
|
||||
|
||||
private void setItemFrames(World world) {
|
||||
setItemFrames(world.getEntities().stream());
|
||||
}
|
||||
|
||||
private void setItemFrames(Chunk chunk) {
|
||||
setItemFrames(Arrays.stream(chunk.getEntities()));
|
||||
}
|
||||
|
||||
private void setItemFrames(Stream<Entity> entityStream) {
|
||||
entityStream.filter(entity ->
|
||||
(entity instanceof ItemFrame
|
||||
&& entity.getLocation().getBlock().getRelative(((ItemFrame) entity).getAttachedFace()).getState() instanceof Hopper))
|
||||
.forEach(entity -> Api.getNmsProvider().setItemFrameVisible((ItemFrame) entity, !PluginConfig.INVISIBLE_FILTER_ITEM_FRAMES.get()));
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@ public interface NMSProvider {
|
||||
ChestOpener getChestOpener();
|
||||
MaterialChecker getMaterialChecker();
|
||||
CraftingProvider getCraftingProvider();
|
||||
EntityEventListener getEntityEventListener();
|
||||
|
||||
void setItemFrameVisible(ItemFrame itemFrame, boolean visible);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.jamesdpeters.minecraft.chests.serialize;
|
||||
package com.jamesdpeters.minecraft.chests;
|
||||
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
@ -0,0 +1,35 @@
|
||||
package com.jamesdpeters.minecraft.chests;
|
||||
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public class Values {
|
||||
public final static String ChestLinkTag = "[ChestLink]";
|
||||
public final static String AutoCraftTag = "[AutoCraft]";
|
||||
|
||||
public static String identifier(String identifier) {
|
||||
return "[" + identifier + "]";
|
||||
}
|
||||
|
||||
public final NamespacedKey playerUUID;
|
||||
public final NamespacedKey PluginKey;
|
||||
public final NamespacedKey storageID;
|
||||
public final NamespacedKey hopperTicked;
|
||||
|
||||
private static Values Instance;
|
||||
|
||||
public Values(Plugin plugin) {
|
||||
playerUUID = new NamespacedKey(plugin, "playerUUID");
|
||||
PluginKey = new NamespacedKey(plugin, "ChestsPlusPlus");
|
||||
storageID = new NamespacedKey(plugin, "storageID");
|
||||
hopperTicked = new NamespacedKey(plugin, "hopperTicked");
|
||||
}
|
||||
|
||||
public static void init(Plugin plugin) {
|
||||
Instance = new Values(plugin);
|
||||
}
|
||||
|
||||
public static Values Instance() {
|
||||
return Instance;
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.jamesdpeters.minecraft.chests.v1_14_R1;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.EntityEventListener;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.world.ChunkLoadEvent;
|
||||
|
||||
public class EntityEventListener_1_14 extends EntityEventListener {
|
||||
|
||||
@EventHandler
|
||||
public void onChunkLoad(ChunkLoadEvent event) {
|
||||
fixEntities(event.getChunk());
|
||||
}
|
||||
|
||||
}
|
@ -19,6 +19,11 @@ public class NMSProviderImpl implements NMSProvider {
|
||||
return new Crafting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return new EntityEventListener_1_14();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
//Not support in 1.14
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jamesdpeters.minecraft.chests.v1_15_R1;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.*;
|
||||
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
|
||||
public class NMSProviderImpl implements NMSProvider {
|
||||
@ -19,6 +20,11 @@ public class NMSProviderImpl implements NMSProvider {
|
||||
return new Crafting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return new EntityEventListener_1_14();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
//Not supported in 1.15
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jamesdpeters.minecraft.chests.v1_16_R1;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.*;
|
||||
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
|
||||
import org.bukkit.block.Lidded;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
|
||||
@ -32,6 +33,11 @@ public class NMSProviderImpl implements NMSProvider {
|
||||
return new Crafting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return new EntityEventListener_1_14();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
itemFrame.setVisible(visible);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jamesdpeters.minecraft.chests.v1_16_R2;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.*;
|
||||
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
|
||||
import org.bukkit.block.Lidded;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
|
||||
@ -32,6 +33,11 @@ public class NMSProviderImpl implements NMSProvider {
|
||||
return new Crafting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return new EntityEventListener_1_14();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
itemFrame.setVisible(visible);
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jamesdpeters.minecraft.chests.v1_16_R3;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.*;
|
||||
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
|
||||
import org.bukkit.block.Lidded;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
|
||||
@ -32,6 +33,11 @@ public class NMSProviderImpl implements NMSProvider {
|
||||
return new Crafting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return new EntityEventListener_1_14();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
itemFrame.setVisible(visible);
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.jamesdpeters.minecraft.chests.latest;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.EntityEventListener;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.world.EntitiesLoadEvent;
|
||||
|
||||
public class EntityEventListener_1_17 extends EntityEventListener {
|
||||
|
||||
@EventHandler
|
||||
public void onEntityLoad(EntitiesLoadEvent event) {
|
||||
event.getEntities().forEach(this::removeEntity);
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ package com.jamesdpeters.minecraft.chests.latest;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
||||
import com.jamesdpeters.minecraft.chests.EntityEventListener;
|
||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
||||
import org.bukkit.block.Lidded;
|
||||
@ -33,6 +34,11 @@ public class NMSProviderImpl implements NMSProvider {
|
||||
return new Crafting();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return new EntityEventListener_1_17();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
itemFrame.setVisible(visible);
|
||||
|
@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
||||
<artifactId>ChestsPlusPlus-Master</artifactId>
|
||||
<version>2.5-Release</version>
|
||||
<version>2.5.1-Release</version>
|
||||
<scm>
|
||||
<connection>scm:git:git@github.com:JamesPeters98/ChestsPlusPlus.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:JamesPeters98/ChestsPlusPlus.git</developerConnection>
|
||||
|
@ -21,7 +21,6 @@ import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.ConfigStorage;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.MaterialSerializer;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.RecipeSerializable;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorage;
|
||||
@ -83,7 +82,6 @@ public class ChestsPlusPlus extends JavaPlugin {
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Override
|
||||
public void onEnable() {
|
||||
int pluginId = 7166;
|
||||
@ -128,8 +126,10 @@ public class ChestsPlusPlus extends JavaPlugin {
|
||||
}), 0, PluginConfig.UPDATE_CHECKER_PERIOD.get() * 20);
|
||||
}
|
||||
|
||||
// Remove armour stands if disabled
|
||||
Utils.fixEntities();
|
||||
getServer().getPluginManager().registerEvents(ApiSpecific.getNmsProvider().getEntityEventListener(), this);
|
||||
Bukkit.getWorlds().forEach(world -> {
|
||||
ApiSpecific.getNmsProvider().getEntityEventListener().fixEntities(world);
|
||||
});
|
||||
|
||||
//Load storages after load.
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
|
||||
|
@ -31,6 +31,11 @@ public class NMSProviderDefault implements NMSProvider {
|
||||
return defaultProvider.getCraftingProvider();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityEventListener getEntityEventListener() {
|
||||
return defaultProvider.getEntityEventListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||
//Not supported in Bukkit api 1.14.
|
||||
|
@ -7,7 +7,7 @@ import com.jamesdpeters.minecraft.chests.lang.Message;
|
||||
import com.jamesdpeters.minecraft.chests.misc.ServerType;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||
import org.bukkit.ChatColor;
|
||||
|
@ -2,7 +2,7 @@ package com.jamesdpeters.minecraft.chests.listeners;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.misc.Messages;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Values;
|
||||
import com.jamesdpeters.minecraft.chests.Values;
|
||||
import com.jamesdpeters.minecraft.chests.runnables.ChestLinkVerifier;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage;
|
||||
@ -83,7 +83,7 @@ public class StorageListener implements Listener {
|
||||
setLine(sign, signChangeEvent, 0, ChatColor.RED + ChatColor.stripColor(signChangeEvent.getLine(0)));
|
||||
setLine(sign, signChangeEvent, 1, ChatColor.GREEN + ChatColor.stripColor(signChangeEvent.getLine(1)));
|
||||
setLine(sign, signChangeEvent, 2, ChatColor.BOLD + ChatColor.stripColor(addedPlayer.getName()));
|
||||
sign.getPersistentDataContainer().set(Values.playerUUID, PersistentDataType.STRING, addedPlayer.getUniqueId().toString());
|
||||
sign.getPersistentDataContainer().set(Values.Instance().playerUUID, PersistentDataType.STRING, addedPlayer.getUniqueId().toString());
|
||||
sign.update();
|
||||
}
|
||||
|
||||
@ -116,8 +116,8 @@ public class StorageListener implements Listener {
|
||||
if (storageType.isValidBlockType(event.getBlockPlaced())) {
|
||||
ItemMeta itemMeta = event.getItemInHand().getItemMeta();
|
||||
if (itemMeta != null) {
|
||||
String playerUUID = itemMeta.getPersistentDataContainer().get(Values.playerUUID, PersistentDataType.STRING);
|
||||
String storageID = itemMeta.getPersistentDataContainer().get(Values.storageID, PersistentDataType.STRING);
|
||||
String playerUUID = itemMeta.getPersistentDataContainer().get(Values.Instance().playerUUID, PersistentDataType.STRING);
|
||||
String storageID = itemMeta.getPersistentDataContainer().get(Values.Instance().storageID, PersistentDataType.STRING);
|
||||
|
||||
if (playerUUID != null && storageID != null) {
|
||||
OfflinePlayer owner = Bukkit.getOfflinePlayer(UUID.fromString(playerUUID));
|
||||
@ -178,8 +178,8 @@ public class StorageListener implements Listener {
|
||||
ItemMeta itemMeta = customChest.getItemMeta();
|
||||
if (itemMeta != null) {
|
||||
itemMeta.setDisplayName(ChatColor.AQUA + "" + storageType.getSignTag() + " " + storage.getIdentifier());
|
||||
itemMeta.getPersistentDataContainer().set(Values.playerUUID, PersistentDataType.STRING, storage.getOwner().getUniqueId().toString());
|
||||
itemMeta.getPersistentDataContainer().set(Values.storageID, PersistentDataType.STRING, storage.getIdentifier());
|
||||
itemMeta.getPersistentDataContainer().set(Values.Instance().playerUUID, PersistentDataType.STRING, storage.getOwner().getUniqueId().toString());
|
||||
itemMeta.getPersistentDataContainer().set(Values.Instance().storageID, PersistentDataType.STRING, storage.getIdentifier());
|
||||
}
|
||||
customChest.setItemMeta(itemMeta);
|
||||
block.getWorld().dropItemNaturally(block.getLocation(), customChest);
|
||||
|
@ -6,7 +6,6 @@ import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.world.ChunkLoadEvent;
|
||||
import org.bukkit.event.world.WorldLoadEvent;
|
||||
import org.bukkit.event.world.WorldSaveEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
@ -28,15 +27,9 @@ public class WorldListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onWorldLoad(WorldLoadEvent event) {
|
||||
Utils.removeEntities(event.getWorld());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChunkLoad(ChunkLoadEvent event) {
|
||||
if (!event.isNewChunk()) {
|
||||
Utils.fixEntities(event.getChunk());
|
||||
Config.getStorageTypes().forEach(storageType -> {
|
||||
storageType.getStorageMap().values().forEach(stringHashMap -> {
|
||||
stringHashMap.values().forEach(o -> {
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.jamesdpeters.minecraft.chests.misc;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bstats.charts.SimplePie;
|
||||
|
||||
|
@ -6,7 +6,7 @@ import com.jamesdpeters.minecraft.chests.filters.Filter;
|
||||
import com.jamesdpeters.minecraft.chests.filters.HopperFilter;
|
||||
import com.jamesdpeters.minecraft.chests.interfaces.VirtualInventoryHolder;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@ -19,14 +19,11 @@ import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.block.Hopper;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.io.File;
|
||||
@ -40,7 +37,6 @@ import java.util.List;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class Utils {
|
||||
|
||||
@ -232,52 +228,6 @@ public class Utils {
|
||||
return itemStacks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all entities that contain a value of 1 under the Values.PluginKey key.
|
||||
* Updates all Item Frames with invisibility status.
|
||||
*/
|
||||
public static void fixEntities() {
|
||||
Bukkit.getServer().getWorlds().forEach(world -> {
|
||||
removeEntities(world);
|
||||
setItemFrames(world);
|
||||
});
|
||||
}
|
||||
|
||||
public static void fixEntities(Chunk chunk) {
|
||||
removeEntities(chunk);
|
||||
setItemFrames(chunk);
|
||||
}
|
||||
|
||||
public static void removeEntities(World world) {
|
||||
world.getEntities().forEach(Utils::removeEntity);
|
||||
}
|
||||
|
||||
public static void removeEntities(Chunk chunk) {
|
||||
for (Entity entity : chunk.getEntities()) {
|
||||
removeEntity(entity);
|
||||
}
|
||||
}
|
||||
|
||||
private static void removeEntity(Entity entity) {
|
||||
Integer val = entity.getPersistentDataContainer().get(Values.PluginKey, PersistentDataType.INTEGER);
|
||||
if (val != null && val == 1) entity.remove();
|
||||
}
|
||||
|
||||
public static void setItemFrames(World world) {
|
||||
setItemFrames(world.getEntities().stream());
|
||||
}
|
||||
|
||||
public static void setItemFrames(Chunk chunk) {
|
||||
setItemFrames(Arrays.stream(chunk.getEntities()));
|
||||
}
|
||||
|
||||
private static void setItemFrames(Stream<Entity> entityStream) {
|
||||
entityStream.filter(entity ->
|
||||
(entity instanceof ItemFrame
|
||||
&& entity.getLocation().getBlock().getRelative(((ItemFrame) entity).getAttachedFace()).getState() instanceof Hopper))
|
||||
.forEach(entity -> ApiSpecific.getNmsProvider().setItemFrameVisible((ItemFrame) entity, !PluginConfig.INVISIBLE_FILTER_ITEM_FRAMES.get()));
|
||||
}
|
||||
|
||||
public static List<String> filterList(List<String> list, String phrase) {
|
||||
return list.stream().filter(s -> s.contains(phrase)).collect(Collectors.toList());
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
package com.jamesdpeters.minecraft.chests.misc;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||
import org.bukkit.NamespacedKey;
|
||||
|
||||
public class Values {
|
||||
public final static String ChestLinkTag = "[ChestLink]";
|
||||
public final static String AutoCraftTag = "[AutoCraft]";
|
||||
|
||||
public static String identifier(String identifier) {
|
||||
return "[" + identifier + "]";
|
||||
}
|
||||
|
||||
public final static NamespacedKey playerUUID = new NamespacedKey(ChestsPlusPlus.PLUGIN, "playerUUID");
|
||||
public final static NamespacedKey PluginKey = new NamespacedKey(ChestsPlusPlus.PLUGIN, "ChestsPlusPlus");
|
||||
public final static NamespacedKey storageID = new NamespacedKey(ChestsPlusPlus.PLUGIN, "storageID");
|
||||
public final static NamespacedKey hopperTicked = new NamespacedKey(ChestsPlusPlus.PLUGIN, "hopperTicked");
|
||||
}
|
@ -4,7 +4,7 @@ import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||
import com.jamesdpeters.minecraft.chests.filters.HopperFilter;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||
import org.bukkit.Location;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.jamesdpeters.minecraft.chests.storage;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.misc.Values;
|
||||
import com.jamesdpeters.minecraft.chests.Values;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage;
|
||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.StorageInfo;
|
||||
@ -24,7 +24,7 @@ public record StorageUtils<T extends StorageInfo<S>, S extends AbstractStorage>(
|
||||
public StorageInfo<S> getStorageInfo(Sign sign, String[] lines, UUID uuid) {
|
||||
if (lines != null) {
|
||||
if (lines.length >= 2 && lines[0].contains(storageType.getSignTag())) {
|
||||
String playerUUID = sign.getPersistentDataContainer().get(Values.playerUUID, PersistentDataType.STRING);
|
||||
String playerUUID = sign.getPersistentDataContainer().get(Values.Instance().playerUUID, PersistentDataType.STRING);
|
||||
String group = ChatColor.stripColor(StringUtils.substringBetween(lines[1], "[", "]"));
|
||||
if (playerUUID == null) {
|
||||
if (uuid == null) return null;
|
||||
|
@ -4,7 +4,7 @@ import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||
import com.jamesdpeters.minecraft.chests.api.ApiSpecific;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Permissions;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Values;
|
||||
import com.jamesdpeters.minecraft.chests.Values;
|
||||
import com.jamesdpeters.minecraft.chests.party.PlayerPartyStorage;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -226,9 +226,14 @@ public abstract class AbstractStorage implements ConfigurationSerializable {
|
||||
* @param location - location to be added.
|
||||
*/
|
||||
public void addLocation(Location location, Location signLocation) {
|
||||
LocationInfo locationInfo = new LocationInfo(location);
|
||||
locationInfo.setSignLocation(signLocation);
|
||||
LocationInfo locationInfo = getLocationInfo(location);
|
||||
|
||||
if (locationInfo == null){
|
||||
locationInfo = new LocationInfo(location);
|
||||
locationInfoList.add(locationInfo);
|
||||
}
|
||||
locationInfo.setSignLocation(signLocation);
|
||||
|
||||
if (shouldDisplayArmourStands()) {
|
||||
if (displayItem != null) {
|
||||
updateSign();
|
||||
@ -533,7 +538,7 @@ public abstract class AbstractStorage implements ConfigurationSerializable {
|
||||
stand.setRightArmPose(angle);
|
||||
|
||||
//Store value of 1 in armour stand to indicate it belongs to this plugin.
|
||||
stand.getPersistentDataContainer().set(Values.PluginKey, PersistentDataType.INTEGER, 1);
|
||||
stand.getPersistentDataContainer().set(Values.Instance().PluginKey, PersistentDataType.INTEGER, 1);
|
||||
return stand;
|
||||
}
|
||||
|
||||
|
@ -4,12 +4,12 @@ package com.jamesdpeters.minecraft.chests.storage.abstracts;
|
||||
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Messages;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Values;
|
||||
import com.jamesdpeters.minecraft.chests.Values;
|
||||
import com.jamesdpeters.minecraft.chests.party.PartyUtils;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.ConfigStorage;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.storage.StorageUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Chunk;
|
||||
@ -219,11 +219,7 @@ public abstract class StorageType<T extends AbstractStorage> implements Listener
|
||||
|
||||
T storage = map.get(identifier);
|
||||
storage.onStorageAdded(chestLocation.getBlock(), player);
|
||||
|
||||
//If the location isn't already part of the system add it.
|
||||
if (!storage.containsLocation(chestLocation)) {
|
||||
storage.addLocation(chestLocation, sign);
|
||||
}
|
||||
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1.0f, 1f);
|
||||
Config.saveASync();
|
||||
@ -370,7 +366,7 @@ public abstract class StorageType<T extends AbstractStorage> implements Listener
|
||||
WallSign signBlockData = (WallSign) sign.getBlockData();
|
||||
signBlockData.setFacing(facing);
|
||||
sign.setBlockData(signBlockData);
|
||||
sign.getPersistentDataContainer().set(Values.playerUUID, PersistentDataType.STRING, uuid);
|
||||
sign.getPersistentDataContainer().set(Values.Instance().playerUUID, PersistentDataType.STRING, uuid);
|
||||
sign.update();
|
||||
|
||||
BlockPlaceEvent event = new BlockPlaceEvent(sign.getBlock(), replacedBlockState, placedAgainst, new ItemStack(Material.AIR), player, true, EquipmentSlot.HAND);
|
||||
|
@ -2,7 +2,7 @@ package com.jamesdpeters.minecraft.chests.storage.autocraft;
|
||||
|
||||
import com.jamesdpeters.minecraft.chests.interfaces.VirtualCraftingHolder;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.RecipeSerializable;
|
||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage;
|
||||
import org.bukkit.Location;
|
||||
|
@ -4,7 +4,7 @@ import com.jamesdpeters.minecraft.chests.lang.Message;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Messages;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Permissions;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Values;
|
||||
import com.jamesdpeters.minecraft.chests.Values;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.ConfigStorage;
|
||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.StorageInfo;
|
||||
@ -54,7 +54,7 @@ public class AutoCraftingStorageType extends StorageType<AutoCraftingStorage> {
|
||||
|
||||
@Override
|
||||
public String getSignTag() {
|
||||
return Values.AutoCraftTag;
|
||||
return Values.Instance().AutoCraftTag;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -81,7 +81,7 @@ public class AutoCraftingStorageType extends StorageType<AutoCraftingStorage> {
|
||||
Messages.ALREADY_PART_OF_GROUP(player, "Crafting Table");
|
||||
return;
|
||||
}
|
||||
placeSign(block, toReplace, facing, player, owner, identifier, Values.AutoCraftTag, requireSign);
|
||||
placeSign(block, toReplace, facing, player, owner, identifier, Values.Instance().AutoCraftTag, requireSign);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ import com.jamesdpeters.minecraft.chests.misc.Messages;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.runnables.VirtualChestToHopper;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||
import com.jamesdpeters.minecraft.chests.sort.InventorySorter;
|
||||
import com.jamesdpeters.minecraft.chests.sort.SortMethod;
|
||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage;
|
||||
|
@ -4,7 +4,7 @@ import com.jamesdpeters.minecraft.chests.lang.Message;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Messages;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Permissions;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||
import com.jamesdpeters.minecraft.chests.misc.Values;
|
||||
import com.jamesdpeters.minecraft.chests.Values;
|
||||
import com.jamesdpeters.minecraft.chests.runnables.ChestLinkVerifier;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||
import com.jamesdpeters.minecraft.chests.serialize.ConfigStorage;
|
||||
@ -91,7 +91,7 @@ public class ChestLinkStorageType extends StorageType<ChestLinkStorage> {
|
||||
|
||||
@Override
|
||||
public String getSignTag() {
|
||||
return Values.ChestLinkTag;
|
||||
return Values.Instance().ChestLinkTag;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Chests++ Language File (Version 2.5-Release)
|
||||
# Chests++ Language File (Version 2.5.1-Release)
|
||||
# NOTE: This file gets replaced when the plugin launches! If you want to make modifications create a copy first!
|
||||
# To create a new language file simply create a copy of this file and rename it to your desired choice for example 'en_US.properties'
|
||||
# It should be located in the 'lang' folder
|
||||
|
Loading…
Reference in New Issue
Block a user