mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-07-31 19:45:26 +02:00
Furnace ownership tweaks
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package com.gmail.nossr50.util.compat.layers;
|
||||
|
||||
import com.gmail.nossr50.util.compat.CompatibilityLayer;
|
||||
import com.gmail.nossr50.util.nms.NMSVersion;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -13,11 +11,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
public abstract class AbstractCompatibilityLayer implements CompatibilityLayer {
|
||||
|
||||
protected boolean noErrorsOnInitialize = true;
|
||||
protected final @NotNull NMSVersion nmsVersion;
|
||||
|
||||
public AbstractCompatibilityLayer(@NotNull NMSVersion nmsVersion) {
|
||||
this.nmsVersion = nmsVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the CompatibilityLayer
|
||||
|
@@ -0,0 +1,30 @@
|
||||
package com.gmail.nossr50.util.compat.layers;
|
||||
|
||||
import com.gmail.nossr50.util.nms.NMSVersion;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
*
|
||||
* These classes are a band-aid solution for adding NMS support into 2.1.XXX
|
||||
* In 2.2 we are switching to modules and that will clean things up significantly
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractNMSCompatibilityLayer extends AbstractCompatibilityLayer {
|
||||
|
||||
protected final @NotNull NMSVersion nmsVersion;
|
||||
|
||||
public AbstractNMSCompatibilityLayer(@NotNull NMSVersion nmsVersion) {
|
||||
this.nmsVersion = nmsVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the CompatibilityLayer
|
||||
* @return true if the CompatibilityLayer initialized and should be functional
|
||||
*/
|
||||
public abstract boolean initializeLayer();
|
||||
|
||||
@Override
|
||||
public boolean noErrorsOnInitialize() {
|
||||
return noErrorsOnInitialize;
|
||||
}
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
package com.gmail.nossr50.util.compat.layers;
|
||||
package com.gmail.nossr50.util.compat.layers.attackcooldown;
|
||||
|
||||
import com.gmail.nossr50.util.nms.NMSVersion;
|
||||
import org.bukkit.entity.Player;
|
@@ -1,6 +1,7 @@
|
||||
package com.gmail.nossr50.util.compat.layers;
|
||||
package com.gmail.nossr50.util.compat.layers.attackcooldown;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.compat.layers.AbstractNMSCompatibilityLayer;
|
||||
import com.gmail.nossr50.util.nms.NMSConstants;
|
||||
import com.gmail.nossr50.util.nms.NMSVersion;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -16,7 +17,7 @@ import java.lang.reflect.Method;
|
||||
* In 2.2 we are switching to modules and that will clean things up significantly
|
||||
*
|
||||
*/
|
||||
public class PlayerAttackCooldownExploitPreventionLayer extends AbstractCompatibilityLayer implements PlayerAttackCooldownMethods{
|
||||
public class PlayerAttackCooldownExploitPreventionLayer extends AbstractNMSCompatibilityLayer implements PlayerAttackCooldownMethods{
|
||||
|
||||
private final String cbNMSVersionPath;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package com.gmail.nossr50.util.compat.layers;
|
||||
package com.gmail.nossr50.util.compat.layers.attackcooldown;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
@@ -0,0 +1,19 @@
|
||||
package com.gmail.nossr50.util.compat.layers.persistentdata;
|
||||
|
||||
import com.gmail.nossr50.util.compat.layers.AbstractCompatibilityLayer;
|
||||
import org.bukkit.block.Furnace;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public abstract class AbstractPersistentDataLayer extends AbstractCompatibilityLayer {
|
||||
|
||||
public AbstractPersistentDataLayer() {
|
||||
initializeLayer();
|
||||
}
|
||||
|
||||
public abstract @Nullable UUID getFurnaceOwner(Furnace furnace);
|
||||
|
||||
public abstract void setFurnaceOwner(Furnace furnace, UUID uuid);
|
||||
|
||||
}
|
@@ -0,0 +1,60 @@
|
||||
package com.gmail.nossr50.util.compat.layers.persistentdata;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.block.Furnace;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataHolder;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class SpigotPersistentDataLayer extends AbstractPersistentDataLayer {
|
||||
|
||||
private NamespacedKey furnaceOwner_MostSig_Key;
|
||||
private NamespacedKey furnaceOwner_LeastSig_Key;
|
||||
|
||||
@Override
|
||||
public boolean initializeLayer() {
|
||||
initNamespacedKeys();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void initNamespacedKeys() {
|
||||
furnaceOwner_MostSig_Key = getNamespacedKey("furnace_uuid_most_sig");
|
||||
furnaceOwner_LeastSig_Key = getNamespacedKey("furnace_uuid_least_sig");
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public NamespacedKey getNamespacedKey(String key) {
|
||||
return new NamespacedKey(mcMMO.p, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable UUID getFurnaceOwner(Furnace furnace) {
|
||||
//Get container from entity
|
||||
PersistentDataContainer dataContainer = ((PersistentDataHolder) furnace).getPersistentDataContainer();
|
||||
|
||||
Long mostSigBits = dataContainer.get(furnaceOwner_MostSig_Key, PersistentDataType.LONG);
|
||||
Long leastSigBits = dataContainer.get(furnaceOwner_LeastSig_Key, PersistentDataType.LONG);
|
||||
|
||||
if(mostSigBits != null && leastSigBits != null) {
|
||||
return new UUID(mostSigBits, leastSigBits);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFurnaceOwner(Furnace furnace, UUID uuid) {
|
||||
PersistentDataContainer dataContainer = ((PersistentDataHolder) furnace).getPersistentDataContainer();
|
||||
|
||||
dataContainer.set(furnaceOwner_MostSig_Key, PersistentDataType.LONG, uuid.getMostSignificantBits());
|
||||
dataContainer.set(furnaceOwner_LeastSig_Key, PersistentDataType.LONG, uuid.getLeastSignificantBits());
|
||||
|
||||
furnace.update();
|
||||
}
|
||||
}
|
@@ -0,0 +1,44 @@
|
||||
package com.gmail.nossr50.util.compat.layers.persistentdata;
|
||||
|
||||
import com.gmail.nossr50.datatypes.meta.UUIDMeta;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.block.Furnace;
|
||||
import org.bukkit.metadata.Metadatable;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Persistent Data API is unavailable
|
||||
*/
|
||||
public class SpigotTemporaryDataLayer extends AbstractPersistentDataLayer {
|
||||
|
||||
private final String FURNACE_OWNER_METADATA_KEY = "mcMMO_furnace_owner";
|
||||
|
||||
@Override
|
||||
public boolean initializeLayer() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getFurnaceOwner(Furnace furnace) {
|
||||
Metadatable metadatable = (Metadatable) furnace;
|
||||
|
||||
if(metadatable.getMetadata(FURNACE_OWNER_METADATA_KEY).size() > 0) {
|
||||
UUIDMeta uuidMeta = (UUIDMeta) metadatable.getMetadata(FURNACE_OWNER_METADATA_KEY).get(0);
|
||||
return (UUID) uuidMeta.value();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFurnaceOwner(Furnace furnace, UUID uuid) {
|
||||
Metadatable metadatable = (Metadatable) furnace;
|
||||
|
||||
if(metadatable.getMetadata(FURNACE_OWNER_METADATA_KEY).size() > 0) {
|
||||
metadatable.removeMetadata(FURNACE_OWNER_METADATA_KEY, mcMMO.p);
|
||||
}
|
||||
|
||||
metadatable.setMetadata(FURNACE_OWNER_METADATA_KEY, new UUIDMeta(mcMMO.p, uuid));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user