Skip to content

Commit

Permalink
Performance fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
BuildTools committed Jun 4, 2019
1 parent df33eab commit cc2ae8e
Show file tree
Hide file tree
Showing 18 changed files with 1,629 additions and 53 deletions.
2 changes: 1 addition & 1 deletion plugin.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: skript-nms
author: FurkannM
description: A Skript addon for NMS stuff
version: 0.1.2
version: 0.1.4
main: com.furkannm.skriptnms.SkriptNMS
depend: [Skript]
14 changes: 10 additions & 4 deletions src/com/furkannm/skriptnms/SkriptNMS.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

public class SkriptNMS extends JavaPlugin{
private static String ver;
private static SkriptNMS instance;
private static SkriptAddon addonInstance;
private SkriptNMS instance;
private SkriptAddon addonInstance;
private static NMS nmsclass;

public SkriptNMS() {
Expand All @@ -29,11 +29,16 @@ public SkriptNMS() {

@Override
public void onEnable() {
getLogger().info("Skript-NMS is started!");
ver = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
NMS.setDefaultNMS(new NMSReflection());
nmsclass = NMS.getNMS(getVer());
if(nmsclass instanceof NMSReflection) loadNMSClasses();
nmsclass.registerNbtCompound();
String type = "default classes";
if (nmsclass instanceof NMSReflection) {
loadNMSClasses();
type = "reflection classes";
}
getLogger().info("Skript-NMS is started for "+ver+" with "+type+"!");
try {
getAddonInstance().loadClasses("com.furkannm.skriptnms", "effects", "expressions");
} catch (IOException e) {
Expand Down Expand Up @@ -76,6 +81,7 @@ private void loadNMSClasses() {
NMSClasses.registerNMS(new NBTCompressedStreamTools());
NMSClasses.registerNMS(new NBTTagByte());
NMSClasses.registerNMS(new NBTTagCompound());
NMSClasses.registerNMS(new NBTTagList());
NMSClasses.registerNMS(new NBTTagDouble());
NMSClasses.registerNMS(new NBTTagFloat());
NMSClasses.registerNMS(new NBTTagInt());
Expand Down
1 change: 0 additions & 1 deletion src/com/furkannm/skriptnms/effects/EffLoadDATFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ public class EffLoadDATFile extends AsyncEffect {
Skript.registerEffect(EffLoadDATFile.class, "load [the] dat [file] %string%");
}

//load dat %string%
private File lastLoadedFile = null;
private Expression<String> fileName;

Expand Down
30 changes: 17 additions & 13 deletions src/com/furkannm/skriptnms/expressions/ExprItemNBT.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

import org.bukkit.Material;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;

import com.furkannm.skriptnms.SkriptNMS;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.lang.Expression;
Expand All @@ -18,35 +18,39 @@
import ch.njol.util.Kleenean;

@Name("Item NBT")
@Examples({"give diamond with nbt \"{display:{Name:\"SkriptNMS\",Lore:[\"Hello\",\"World\"]},Unbreakable:1}\" to player"})
@Examples({"give diamond with nbt \"{display:{Name:\"\"SkriptNMS\"\",Lore:[\"\"Hello\"\",\"\"World\"\"]},Unbreakable:1}\" to player"})

public class ExprItemNBT extends SimpleExpression<ItemStack>{
public class ExprItemNBT extends SimpleExpression<ItemType>{

static {
Skript.registerExpression(ExprItemNBT.class, ItemStack.class, ExpressionType.PROPERTY, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprItemNBT.class, ItemType.class, ExpressionType.COMBINED, "%itemtype% with [custom] nbt[[ ]tag[s]] %string%");
}

private Expression<ItemStack> itemStack;
private Expression<ItemType> itemStack;
private Expression<String> string;

@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
itemStack = (Expression<ItemStack>) expr[0];
itemStack = (Expression<ItemType>) expr[0];
string = (Expression<String>) expr[1];
return true;
}

@Override
@Nullable
protected ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
protected ItemType[] get(Event e) {
ItemType item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if(item.getType()==Material.AIR || item==null) return null;
if(item.getItem().getRandom().getType()==Material.AIR || item==null) {
Skript.error("Item is air or none! itemtype="+item.getItem()+",itemstack="+item.getItem().getRandom()+",type=" +(item!=null ? item.getItem().getRandom().getType() : ""));

return null;
}
Object parsedNBT = null;
parsedNBT = SkriptNMS.getNMS().parseRawNBT(newTags);
ItemStack newItem = SkriptNMS.getNMS().getItemWithNBT(item, parsedNBT);
return new ItemStack[] { newItem };
ItemType newItem = new ItemType(SkriptNMS.getNMS().getItemWithNBT(item.getItem().getRandom(), parsedNBT));
return new ItemType[] { newItem };
}

@Override
Expand All @@ -55,8 +59,8 @@ public boolean isSingle() {
}

@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
public Class<? extends ItemType> getReturnType() {
return ItemType.class;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class ExprLoadedDATFileNBT extends SimpleExpression<Object>{
Skript.registerExpression(ExprLoadedDATFileNBT.class, Object.class, ExpressionType.SIMPLE, "nbt [tag[s]] (of|from) [the] [last[ly]] [loaded] dat file");
}

private Class<?> returnType = NMS.getMCClass("NBTTagCompound");
private Class<?> returnType = SkriptNMS.getNMS().getCompoundClass();

@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
Expand Down
12 changes: 10 additions & 2 deletions src/com/furkannm/skriptnms/expressions/ExprNBTOf.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.bukkit.inventory.ItemStack;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
Expand All @@ -25,17 +26,18 @@

public class ExprNBTOf extends PropertyExpression<Object,Object> {

private Class<?> returnType = NMS.getMCClass("NBTTagCompound");
private Class<?> returnType = SkriptNMS.getNMS().getCompoundClass();
static {
register(ExprNBTOf.class, Object.class, "nbt [tag[s]]", "objects");
//register(ExprNBTOf.class, Object.class, "nbt [tag[s]]", "compounds");
}

@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
setExpr((Expression<Object>) expr[0]);
Class<?> type = getExpr().getReturnType();
if (type != Entity.class || type != Block.class || type != ItemStack.class || type != Slot.class)
if (type != Entity.class && type != Block.class && type != ItemStack.class && type != Slot.class && type != ItemType.class)
Skript.error(getExpr().toString() + " is not entity, block or itemstack.", ErrorQuality.SEMANTIC_ERROR);
return true;
}
Expand All @@ -50,6 +52,9 @@ public Class<?>[] acceptChange(final ChangeMode mode) {
@Override
public void change(Event e, Object[] args, ChangeMode mode) {
Object tar = getExpr().getSingle(e);
if(tar instanceof ItemType) {
tar = ((ItemType)tar).getItem().getRandom();
}
Object parsedNBT = null;
if (args != null) parsedNBT = returnType.cast(SkriptNMS.getNMS().parseRawNBT(((String) args[0])));

Expand All @@ -71,6 +76,9 @@ public String toString(Event e, boolean debug) {
@Override
protected Object[] get(Event e, Object[] source) {
Object tar = getExpr().getSingle(e);
if(tar instanceof ItemType) {
tar = ((ItemType)tar).getItem().getRandom();
}
return SkriptNMS.getNMS().getNBT(tar);
}
}
4 changes: 2 additions & 2 deletions src/com/furkannm/skriptnms/expressions/ExprNBTTagOf.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@

public class ExprNBTTagOf extends SimpleExpression<Object> {

private Class<?> nbtBase = NMS.getMCClass("NBTBase");
private Class<?> nbtBase = SkriptNMS.getNMS().getBaseClass();
static {
Skript.registerExpression(ExprNBTTagOf.class, Object.class, ExpressionType.PROPERTY, "[nbt] tag %string% of %object%");
Skript.registerExpression(ExprNBTTagOf.class, Object.class, ExpressionType.PROPERTY, "[nbt] tag %string% of %compound%");
}

private Expression<String> tag;
Expand Down
40 changes: 27 additions & 13 deletions src/com/furkannm/skriptnms/nms/NMS.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.furkannm.skriptnms.nms.versions.v1_11_R1;
import com.furkannm.skriptnms.nms.versions.v1_12_R1;
import com.furkannm.skriptnms.nms.versions.v1_13_R1;
import com.furkannm.skriptnms.nms.versions.v1_13_R2;
import com.furkannm.skriptnms.nms.versions.v1_8_R3;
import com.furkannm.skriptnms.nms.versions.v1_9_R1;
import com.furkannm.skriptnms.nms.versions.reflection.NMSReflection;
Expand All @@ -20,31 +21,33 @@ public abstract class NMS {
public static NMS defaultNMS;

public static NMS getNMS(String version) {
if(version.equalsIgnoreCase("v1_8_R3")) return new v1_8_R3();
if(version.equalsIgnoreCase("v1_9_R1")) return new v1_9_R1();
if(version.equalsIgnoreCase("v1_10_R1")) return new v1_10_R1();
if(version.equalsIgnoreCase("v1_11_R1")) return new v1_11_R1();
if(version.equalsIgnoreCase("v1_12_R1")) return new v1_12_R1();
if(version.equalsIgnoreCase("v1_13_R1")) return new v1_13_R1();
if (version.equalsIgnoreCase("v1_8_R3")) return new v1_8_R3();
if (version.equalsIgnoreCase("v1_9_R1")) return new v1_9_R1();
if (version.equalsIgnoreCase("v1_10_R1")) return new v1_10_R1();
if (version.equalsIgnoreCase("v1_11_R1")) return new v1_11_R1();
if (version.equalsIgnoreCase("v1_12_R1")) return new v1_12_R1();
if (version.equalsIgnoreCase("v1_13_R1")) return new v1_13_R1();
if (version.equalsIgnoreCase("v1_13_R2")) return new v1_13_R2();
return defaultNMS;
}

public static Class<?> getMCClass(String classStr) {
/*public static Class<?> getMCClass(String classStr) {
String ver = SkriptNMS.getVer();
Class<?> nmsClass;
try{
if(!(getNMS(ver) instanceof NMSReflection)) {
try {
if (!(getNMS(ver) instanceof NMSReflection)) {
nmsClass = Class.forName("net.minecraft.server."+ver+"."+classStr);
}else{
} else {
nmsClass = Class.forName("com.furkannm.skriptnms.nms.versions.reflection.types."+classStr);
return nmsClass.getMethod("get", Class.class).invoke(nmsClass).getClass();
}
}catch(ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
Bukkit.getLogger().warning("Unknown nms class!");
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
if(getNMS(ver) instanceof NMSReflection) Bukkit.getLogger().warning("Unknown " + classStr +" nms class for "+ver+"!");
else Bukkit.getLogger().warning("Unknown " + classStr +" bukkit class for "+ver+"!");
return null;
}
return nmsClass;
}
}*/

public static void setDefaultNMS(NMS defaultClass) {
defaultNMS = defaultClass;
Expand All @@ -70,4 +73,15 @@ public static void setDefaultNMS(NMS defaultClass) {
public abstract Object convertToNBT(String string);
public abstract void loadFileNbt(File file);
public abstract void setFileNBT(File file, Object newCompound);

public abstract Object[] getContents(Object nbtList);
public abstract void addToList(Object nbtList, Object toAdd);
public abstract void removeFromList(Object nbtList, int index);
public abstract void setIndex(Object nbtList, int index, Object toSet);
public abstract Object getIndex(Object nbtList, int index);

public abstract Class getCompoundClass();
public abstract Class getBaseClass();

public abstract void registerNbtCompound();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.furkannm.skriptnms.nms.versions.reflection;

import javax.annotation.Nullable;

import com.furkannm.skriptnms.SkriptNMS;
import com.furkannm.skriptnms.nms.NMSClasses;

import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.Parser;
import ch.njol.skript.lang.ParseContext;

public class NBTClassInfo<N extends NMSClasses> {

private Class<N> c;
private String codeName;
private String[] users;

public NBTClassInfo(Class<N> c, String codeName, String... users) {
this.c = c;
this.codeName = codeName;
this.users = users;
}

public ClassInfo<N> getClassInfo() {
return new ClassInfo<>(c, codeName)
.user(users)
.name("NBT Compound")
.since("0.1.3")
.parser(getParser());
}

public Parser<N> getParser() {
return new Parser<N>() {

@Override
public String getVariableNamePattern() {
return ".+";
}

@SuppressWarnings("unchecked")
@Override
@Nullable
public N parse(String s, ParseContext context) {
if (s.startsWith("nbt:{") && s.endsWith("}")) {
N nbt = (N) SkriptNMS.getNMS().parseRawNBT(s.substring(4));
return nbt;
}
return null;
}

@Override
public String toString(N n, int arg1) {
return n.toString();
}

@Override
public String toVariableNameString(N n) {
return n.toString();
}

};
}


}
Loading

0 comments on commit cc2ae8e

Please sign in to comment.