Add blockdata as a valid falling block thing, requires setblockdata

This commit is contained in:
libraryaddict
2020-08-12 09:36:13 +12:00
parent f322a80b69
commit 4f0290218b
36 changed files with 268 additions and 139 deletions

View File

@@ -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())

View File

@@ -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());
}
}

View File

@@ -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

View File

@@ -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"));
}

View File

@@ -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);
}
}

View File

@@ -8,5 +8,5 @@ import java.lang.annotation.RetentionPolicy;
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface NmsAddedIn {
NmsVersion val();
NmsVersion value();
}

View File

@@ -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;

View File

@@ -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)) {