Some COOL stuff

Fixed PathfinderGoalMeleeAttack
Fixed error when using remove/clear pathfinder goals on an armor stand
(why is it considered a living entity?!?)
Forgot to make NBTListIndex return a single value, now fixed
Added "Minecraft ID of %itemtype%" (to return for example
"minecraft:planks")
Also some stuff I don't remember (see the changes!)
This commit is contained in:
TheBukor
2016-03-13 04:06:43 -03:00
parent 36b069fa3e
commit 48685db4be
13 changed files with 239 additions and 123 deletions

View File

@@ -55,4 +55,6 @@ public interface NMSInterface {
public Object convertToNBT(Number number);
public Object convertToNBT(String string);
public String getMCId(ItemStack itemStack);
}

View File

@@ -30,20 +30,21 @@ import ch.njol.skript.classes.Parser;
import ch.njol.skript.lang.ParseContext;
import ch.njol.skript.registrations.Classes;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R4.Item;
import net.minecraft.server.v1_7_R4.MojangsonParser;
import net.minecraft.server.v1_7_R4.NBTBase;
import net.minecraft.server.v1_7_R4.NBTCompressedStreamTools;
import net.minecraft.server.v1_7_R4.NBTTagByte;
import net.minecraft.server.v1_7_R4.NBTTagCompound;
import net.minecraft.server.v1_7_R4.NBTTagDouble;
import net.minecraft.server.v1_7_R4.NBTTagFloat;
import net.minecraft.server.v1_7_R4.NBTTagInt;
import net.minecraft.server.v1_7_R4.NBTTagList;
import net.minecraft.server.v1_7_R4.NBTTagLong;
import net.minecraft.server.v1_7_R4.NBTTagShort;
import net.minecraft.server.v1_7_R4.NBTTagString;
import net.minecraft.server.v1_7_R4.TileEntity;
import net.minecraft.server.v1_7_R4.World;
import net.minecraft.server.v1_8_R3.NBTTagByte;
import net.minecraft.server.v1_8_R3.NBTTagLong;
import net.minecraft.server.v1_8_R3.NBTTagShort;
public class NMS_v1_7_R4 implements NMSInterface {
@@ -456,48 +457,33 @@ public class NMS_v1_7_R4 implements NMSInterface {
}
}
public NBTTagByte convertToNBT(byte b) {
return new NBTTagByte(b);
}
public NBTTagShort convertToNBT(short s) {
return new NBTTagShort(s);
}
public NBTTagInt convertToNBT(int i) {
return new NBTTagInt(i);
}
public NBTTagLong convertToNBT(long l) {
return new NBTTagLong(l);
}
public NBTTagFloat convertToNBT(float f) {
return new NBTTagFloat(f);
}
public NBTTagDouble convertToNBT(double d) {
return new NBTTagDouble(d);
@Override
public NBTBase convertToNBT(Number number) {
if (number instanceof Byte) {
return new NBTTagByte((byte) number);
} else if (number instanceof Short) {
return new NBTTagShort((short) number);
} else if (number instanceof Integer) {
return new NBTTagInt((int) number);
} else if (number instanceof Long) {
return new NBTTagLong((long) number);
} else if (number instanceof Float) {
return new NBTTagFloat((float) number);
} else if (number instanceof Double) {
return new NBTTagDouble((double) number);
}
return null;
}
@Override
public NBTTagString convertToNBT(String string) {
return new NBTTagString(string);
}
@Override
public Object convertToNBT(Number number) {
if (number instanceof Byte)
return convertToNBT((byte) number);
else if (number instanceof Short)
return convertToNBT((short) number);
else if (number instanceof Integer)
return convertToNBT((int) number);
else if (number instanceof Long)
return convertToNBT((long) number);
else if (number instanceof Float)
return convertToNBT((float) number);
else if (number instanceof Double)
return convertToNBT((double) number);
return number;
public String getMCId(ItemStack itemStack) {
net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
String test = Item.REGISTRY.c(nmsItem.getItem());
return test;
}
}

View File

@@ -48,6 +48,8 @@ import net.minecraft.server.v1_8_R1.PathfinderGoal;
import net.minecraft.server.v1_8_R1.PathfinderGoalSelector;
import net.minecraft.server.v1_8_R1.TileEntity;
import net.minecraft.server.v1_8_R1.World;
import net.minecraft.server.v1_8_R1.Item;
import net.minecraft.server.v1_8_R1.MinecraftKey;
public class NMS_v1_8_R1 implements NMSInterface {
@@ -560,4 +562,11 @@ public class NMS_v1_8_R1 implements NMSInterface {
public NBTTagString convertToNBT(String string) {
return new NBTTagString(string);
}
@Override
public String getMCId(ItemStack itemStack) {
net.minecraft.server.v1_8_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
MinecraftKey mcKey = (MinecraftKey) Item.REGISTRY.c(nmsItem.getItem());
return mcKey.toString();
}
}

View File

@@ -50,6 +50,8 @@ import net.minecraft.server.v1_8_R2.PathfinderGoal;
import net.minecraft.server.v1_8_R2.PathfinderGoalSelector;
import net.minecraft.server.v1_8_R2.TileEntity;
import net.minecraft.server.v1_8_R2.World;
import net.minecraft.server.v1_8_R2.Item;
import net.minecraft.server.v1_8_R2.MinecraftKey;
public class NMS_v1_8_R2 implements NMSInterface {
@@ -566,4 +568,11 @@ public class NMS_v1_8_R2 implements NMSInterface {
public NBTTagString convertToNBT(String string) {
return new NBTTagString(string);
}
@Override
public String getMCId(ItemStack itemStack) {
net.minecraft.server.v1_8_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
MinecraftKey mcKey = Item.REGISTRY.c(nmsItem.getItem());
return mcKey.toString();
}
}

View File

@@ -50,6 +50,8 @@ import net.minecraft.server.v1_8_R3.PathfinderGoal;
import net.minecraft.server.v1_8_R3.PathfinderGoalSelector;
import net.minecraft.server.v1_8_R3.TileEntity;
import net.minecraft.server.v1_8_R3.World;
import net.minecraft.server.v1_8_R3.Item;
import net.minecraft.server.v1_8_R3.MinecraftKey;
public class NMS_v1_8_R3 implements NMSInterface {
@@ -566,4 +568,11 @@ public class NMS_v1_8_R3 implements NMSInterface {
public NBTTagString convertToNBT(String string) {
return new NBTTagString(string);
}
@Override
public String getMCId(ItemStack itemStack) {
net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
MinecraftKey mcKey = Item.REGISTRY.c(nmsItem.getItem());
return mcKey.toString();
}
}

View File

@@ -11,11 +11,9 @@ import java.io.OutputStream;
import java.io.StreamCorruptedException;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
@@ -36,6 +34,8 @@ import ch.njol.yggdrasil.Fields;
import net.minecraft.server.v1_9_R1.BlockPosition;
import net.minecraft.server.v1_9_R1.EntityInsentient;
import net.minecraft.server.v1_9_R1.IBlockData;
import net.minecraft.server.v1_9_R1.Item;
import net.minecraft.server.v1_9_R1.MinecraftKey;
import net.minecraft.server.v1_9_R1.MojangsonParseException;
import net.minecraft.server.v1_9_R1.MojangsonParser;
import net.minecraft.server.v1_9_R1.NBTBase;
@@ -171,7 +171,7 @@ public class NMS_v1_9_R1 implements NMSInterface {
if (entity instanceof EntityInsentient) {
((EntityInsentient) entity).setGoalTarget(null);
if (isTargetSelector) {
Iterator<?> goals = ((List<?>) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator();
Iterator<?> goals = ((LinkedHashSet<?>) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator();
while (goals.hasNext()) {
Object goal = goals.next();
if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) {
@@ -179,7 +179,7 @@ public class NMS_v1_9_R1 implements NMSInterface {
}
}
} else {
Iterator<?> goals = ((List<?>) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator();
Iterator<?> goals = ((LinkedHashSet<?>) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator();
while (goals.hasNext()) {
Object goal = goals.next();
if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) {
@@ -208,26 +208,15 @@ public class NMS_v1_9_R1 implements NMSInterface {
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) {
return CollectionUtils.array(String[].class, NBTTagCompound[].class);
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(String.class, NBTTagCompound.class);
}
return null;
}
@Override
public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) {
Bukkit.broadcastMessage("Changing a compound");
if (mode == ChangeMode.SET) {
Bukkit.broadcastMessage("is setting");
if (delta[0] instanceof NBTTagCompound) {
NBT[0] = (NBTTagCompound) delta[0];
} else {
NBTTagCompound parsedNBT = null;
parsedNBT = parseRawNBT((String) delta[0]);
NBT[0] = parsedNBT;
}
} else if (mode == ChangeMode.ADD) {
Bukkit.broadcastMessage("is adding");
if (mode == ChangeMode.ADD) {
if (delta[0] instanceof String) {
NBTTagCompound parsedNBT = null;
parsedNBT = parseRawNBT((String) delta[0]);
@@ -236,7 +225,6 @@ public class NMS_v1_9_R1 implements NMSInterface {
addToCompound(NBT[0], delta[0]);
}
} else if (mode == ChangeMode.REMOVE) {
Bukkit.broadcastMessage("is removing");
if (delta[0] instanceof NBTTagCompound)
return;
for (Object s : delta) {
@@ -322,7 +310,7 @@ public class NMS_v1_9_R1 implements NMSInterface {
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.SET || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
if (mode == ChangeMode.ADD) {
return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class);
}
return null;
@@ -330,46 +318,16 @@ public class NMS_v1_9_R1 implements NMSInterface {
@Override
public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) {
Bukkit.broadcastMessage("Changing a NBTList");
int typeId = 0;
if (delta instanceof Byte[]) {
typeId = 1;
} else if (delta instanceof Short[]) {
typeId = 2;
} else if (delta instanceof Integer[]) {
typeId = 3;
} else if (delta instanceof Long[]) {
typeId = 4;
} else if (delta instanceof Float[]) {
typeId = 5;
} else if (delta instanceof Double[]) {
typeId = 6;
} else if (delta instanceof String[]) {
typeId = 8;
} else if (delta instanceof NBTTagList[]) {
typeId = 9;
} else if (delta instanceof NBTTagCompound[]) {
typeId = 10;
} else {
Bukkit.broadcastMessage("No compatible class: " + delta.getClass() + "\nStopping...");
if (delta.length == 0)
return;
}
if (mode == ChangeMode.SET) {
Bukkit.broadcastMessage("is setting");
if (typeId == 9)
nbtList[0] = (NBTTagList) delta[0];
} else if (mode == ChangeMode.ADD) {
if (getContentsId(nbtList[0]) == typeId) {
if (delta[0] instanceof Number)
addToList(nbtList, convertToNBT((Number) delta[0]));
else if (delta[0] instanceof String)
addToList(nbtList, convertToNBT((String) delta[0]));
else if (delta[0] instanceof NBTTagCompound || delta[0] instanceof NBTTagList)
addToList(nbtList, delta[0]);
if (mode == ChangeMode.ADD) {
if (delta[0] instanceof Number) {
addToList(nbtList[0], convertToNBT((Number) delta[0]));
} else if (delta[0] instanceof String) {
addToList(nbtList[0], convertToNBT((String) delta[0]));
} else if (delta[0] instanceof NBTBase) {
addToList(nbtList[0], delta[0]);
}
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
Bukkit.broadcastMessage("Is deleting/resetting");
nbtList[0] = new NBTTagList();
}
}
}).parser(new Parser<NBTTagList>() {
@@ -558,6 +516,7 @@ public class NMS_v1_9_R1 implements NMSInterface {
}
}
@Override
public NBTBase convertToNBT(Number number) {
if (number instanceof Byte) {
return new NBTTagByte((byte) number);
@@ -575,7 +534,15 @@ public class NMS_v1_9_R1 implements NMSInterface {
return null;
}
@Override
public NBTTagString convertToNBT(String string) {
return new NBTTagString(string);
}
@Override
public String getMCId(ItemStack itemStack) {
net.minecraft.server.v1_9_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack);
MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem());
return mcKey.toString();
}
}