Add blockdata as a valid falling block thing, requires setblockdata
This commit is contained in:
@@ -43,6 +43,7 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.lang.math.RandomUtils;
|
||||
import org.apache.logging.log4j.util.Strings;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.boss.KeyedBossBar;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.*;
|
||||
@@ -1112,6 +1113,10 @@ public class DisguiseUtilities {
|
||||
gsonBuilder.registerTypeAdapter(FlagWatcher.class, new SerializerFlagWatcher(gsonBuilder.create()));
|
||||
gsonBuilder.registerTypeAdapter(Disguise.class, new SerializerDisguise());
|
||||
|
||||
if (NmsVersion.v1_13.isSupported()) {
|
||||
gsonBuilder.registerTypeAdapter(BlockData.class, new SerializerBlockData());
|
||||
}
|
||||
|
||||
gson = gsonBuilder.create();
|
||||
|
||||
if (!profileCache.exists())
|
||||
|
@@ -0,0 +1,25 @@
|
||||
package me.libraryaddict.disguise.utilities.json;
|
||||
|
||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||
import com.google.gson.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
/**
|
||||
* Created by libraryaddict on 27/11/2018.
|
||||
*/
|
||||
public class SerializerBlockData implements JsonDeserializer<BlockData>,
|
||||
JsonSerializer<BlockData> {
|
||||
@Override
|
||||
public BlockData deserialize(JsonElement json, Type typeOfT,
|
||||
JsonDeserializationContext context) throws JsonParseException {
|
||||
return Bukkit.createBlockData(json.getAsString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(BlockData src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
return context.serialize(src.getAsString());
|
||||
}
|
||||
}
|
@@ -304,9 +304,13 @@ public class PacketHandlerSpawn implements IPacketHandler {
|
||||
double z = loc.getZ();
|
||||
|
||||
if (disguise.getType() == DisguiseType.FALLING_BLOCK) {
|
||||
ItemStack block = ((FallingBlockWatcher) disguise.getWatcher()).getBlock();
|
||||
if (NmsVersion.v1_13.isSupported()) {
|
||||
|
||||
} else {
|
||||
ItemStack block = ((FallingBlockWatcher) disguise.getWatcher()).getBlock();
|
||||
data = ReflectionManager.getCombinedIdByItemStack(block);
|
||||
}
|
||||
|
||||
data = ReflectionManager.getCombinedIdByItemStack(block);
|
||||
|
||||
if (((FallingBlockWatcher) disguise.getWatcher()).isGridLocked()) {
|
||||
// Center the block
|
||||
|
@@ -13,6 +13,7 @@ import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
import org.bukkit.entity.*;
|
||||
@@ -77,6 +78,8 @@ public class ParamInfoTypes {
|
||||
paramInfos.add(new ParamInfoParticle(WrappedParticle.class, "Particle",
|
||||
"The different particles of Minecraft", Particle.values(), getMaterials()));
|
||||
paramInfos.add(new ParamInfoEnum(TropicalFish.Pattern.class, "Pattern", "Patterns of a tropical fish"));
|
||||
paramInfos.add(new ParamInfoBlockData(BlockData.class, "BlockData",
|
||||
"The block data states, barrel[facing=north,open=false] as example"));
|
||||
} else {
|
||||
paramInfos.add(new ParamInfoEnum(Particle.class, "Particle", "The different particles of Minecraft"));
|
||||
}
|
||||
|
@@ -0,0 +1,38 @@
|
||||
package me.libraryaddict.disguise.utilities.params.types.custom;
|
||||
|
||||
import me.libraryaddict.disguise.utilities.params.ParamInfo;
|
||||
import me.libraryaddict.disguise.utilities.parser.DisguiseParseException;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
|
||||
/**
|
||||
* Created by libraryaddict on 12/08/2020.
|
||||
*/
|
||||
public class ParamInfoBlockData extends ParamInfo {
|
||||
public ParamInfoBlockData(Class paramClass, String name, String description) {
|
||||
super(paramClass, name, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object fromString(String string) throws DisguiseParseException {
|
||||
if (string == null || string.equals("null")) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return Bukkit.createBlockData(string);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(Object object) {
|
||||
if (object == null) {
|
||||
return "null";
|
||||
}
|
||||
|
||||
return ((BlockData) object).getAsString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isParam(Class paramClass) {
|
||||
return getParamClass().isAssignableFrom(paramClass);
|
||||
}
|
||||
}
|
@@ -8,5 +8,5 @@ import java.lang.annotation.RetentionPolicy;
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface NmsAddedIn {
|
||||
NmsVersion val();
|
||||
NmsVersion value();
|
||||
}
|
||||
|
@@ -16,6 +16,8 @@ import me.libraryaddict.disguise.utilities.sounds.SoundGroup;
|
||||
import org.apache.commons.lang.ArrayUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandMap;
|
||||
import org.bukkit.command.SimpleCommandMap;
|
||||
@@ -131,7 +133,7 @@ public class ReflectionManager {
|
||||
NmsAddedIn added = obj.getAnnotation(NmsAddedIn.class);
|
||||
|
||||
// If it was added after this version
|
||||
if (!added.val().isSupported()) {
|
||||
if (!added.value().isSupported()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1463,6 +1465,19 @@ public class ReflectionManager {
|
||||
return new WrappedWatchableObject(watcherItem);
|
||||
}
|
||||
|
||||
public static int getCombinedIdByBlockData(BlockData data) {
|
||||
try {
|
||||
Object iBlockData = getCraftMethod("block.data.type.CraftBlockData", "getState").invoke(data);
|
||||
|
||||
return (int) getNmsMethod("Block", "getCombinedId", getNmsClass("IBlockData")).invoke(null, iBlockData);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static int getCombinedIdByItemStack(ItemStack itemStack) {
|
||||
try {
|
||||
Object nmsBlock;
|
||||
|
@@ -116,9 +116,9 @@ public class CompileMethods {
|
||||
int removed = -1;
|
||||
|
||||
if (method.isAnnotationPresent(NmsAddedIn.class)) {
|
||||
added = method.getAnnotation(NmsAddedIn.class).val().ordinal();
|
||||
added = method.getAnnotation(NmsAddedIn.class).value().ordinal();
|
||||
} else if (method.getDeclaringClass().isAnnotationPresent(NmsAddedIn.class)) {
|
||||
added = method.getDeclaringClass().getAnnotation(NmsAddedIn.class).val().ordinal();
|
||||
added = method.getDeclaringClass().getAnnotation(NmsAddedIn.class).value().ordinal();
|
||||
}
|
||||
|
||||
if (method.isAnnotationPresent(NmsRemovedIn.class)) {
|
||||
|
Reference in New Issue
Block a user