View difference between Paste ID: KY7YdYG9 and f3ftNbrt
SHOW: | | - or go back to the newest paste.
1
import org.bukkit.Bukkit;
2
import org.bukkit.entity.Player;
3
import org.bukkit.scoreboard.Scoreboard;
4
5
import java.lang.reflect.Array;
6
import java.lang.reflect.Field;
7
import java.lang.reflect.Method;
8
import java.util.ArrayList;
9
import java.util.List;
10
11
/**
12
 * The MIT License (MIT)
13
 * Created on 27/01/2016.
14
 * Updated on 06/03/2016
15
 * Copyright (c) 2016 Vinetos
16
 */
17
public class Reflection {
18-
    
18+
19
    public static Class<?> getClass(String classname) {
20
        try {
21
            String version = getNmsVersion();
22
            String path = classname.replace("{nms}", "net.minecraft.server."+version)
23
                    .replace("{nm}", "net.minecraft."+version)
24
                    .replace("{cb}", "org.bukkit.craftbukkit.."+version);
25
            return Class.forName(path);
26
        } catch (Throwable t) {
27
            t.printStackTrace();
28
            return null;
29
        }
30
    }
31
32
    public static Class[] getArrayClass(String classname, int arraySize) {
33
        try {
34
            String version = getNmsVersion();
35
            String path = classname.replace("{nms}", "net.minecraft.server."+version)
36
                    .replace("{nm}", "net.minecraft."+version)
37
                    .replace("{cb}", "org.bukkit.craftbukkit.."+version);
38
            return new Class[]{ Array.newInstance(getClass(classname), arraySize).getClass() };
39
        } catch (Throwable t) {
40
            t.printStackTrace();
41
            return null;
42
        }
43
    }
44
45
    public static String getNmsVersion(){
46
        return Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
47
    }
48
49
    public static Object getNmsPlayer(Player p) throws Exception{
50
        Method getHandle = p.getClass().getMethod("getHandle");
51
        return getHandle.invoke(p);
52
    }
53
54
    public static Object getNmsScoreboard(Scoreboard s) throws Exception {
55
        Method getHandle = s.getClass().getMethod("getHandle");
56
        return getHandle.invoke(s);
57
    }
58
59
    public static Object getFieldValue(Object instance, String fieldName) throws Exception {
60
        Field field = instance.getClass().getDeclaredField(fieldName);
61
        field.setAccessible(true);
62
        return field.get(instance);
63
    }
64
65
    public static ArrayList<Field> getFields(Object instance, Class<?> fieldType) throws Exception {
66
        Field[] fields = instance.getClass().getDeclaredFields();
67
        ArrayList<Field> fieldArrayList = new ArrayList<Field>();
68
        for(Field field : fields){
69
            if(field.getType()  == fieldType){
70
                field.setAccessible(true);
71
                fieldArrayList.add(field);
72
            }
73
        }
74
75
        return fieldArrayList;
76
    }
77
78
    public static ArrayList<Field> getArraysFields(Object instance, Class<?> fieldType) throws Exception {
79
        String[] values = fieldType.toString().split(" ");
80
        String fieldName = values[values.length - 1];
81
        Field[] fields = instance.getClass().getDeclaredFields();
82
        ArrayList<Field> fieldArrayList = new ArrayList<Field>();
83
        for(Field field : fields) {
84
            if (field.getType().isArray()) {
85
                if (field.getType().toString().contains(fieldName)) {
86-
                    System.out.println("FOund !");
86+
87
                    fieldArrayList.add(field);
88
                }
89-
                } else {
89+
90-
                    System.out.println("Nop: " + field.getType().toString() + " |> " + fieldName);
90+
91
        return fieldArrayList;
92
    }
93
94
95
    @SuppressWarnings("unchecked")
96
    public static <T> T getFieldValue(Field field, Object obj) {
97
        try {
98
            return (T) field.get(obj);
99
        } catch (Exception e) {
100
            e.printStackTrace();
101
            return null;
102
        }
103
    }
104
105
    public static Field getField(Class<?> clazz, String fieldName) throws Exception {
106
        Field field = clazz.getDeclaredField(fieldName);
107
        field.setAccessible(true);
108
        return field;
109
    }
110
111
    public static void setFieldValue(Object instance, String field, Object value) {
112
        try {
113
            Field f = instance.getClass().getDeclaredField(field);
114-
    public static void setValue(Object instance, String field, Object value) {
114+
115
            f.set(instance, value);
116
        } catch (Throwable t) {
117
            t.printStackTrace();
118
        }
119
    }
120
    public static void sendAllPacket(Object packet) throws Exception {
121
        for (Player p : Bukkit.getOnlinePlayers()) {
122
            Object nmsPlayer = getNmsPlayer(p);
123
            Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
124
            connection.getClass().getMethod("sendPacket", Reflection.getClass("{nms}.Packet")).invoke(connection, packet);
125
        }
126
    }
127
    public static void sendListPacket(List<String> players, Object packet) {
128
        try {
129
            for (String name : players) {
130
                Object nmsPlayer = getNmsPlayer(Bukkit.getPlayer(name));
131
                Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
132
                connection.getClass().getMethod("sendPacket", Reflection.getClass("{nms}.Packet")).invoke(connection, packet);
133
            }
134
        } catch (Throwable t) {
135
            t.printStackTrace();
136
        }
137
    }
138
    public static void sendPlayerPacket(Player p, Object packet) throws Exception {
139
        Object nmsPlayer = getNmsPlayer(p);
140
        Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
141
        connection.getClass().getMethod("sendPacket", Reflection.getClass("{nms}.Packet")).invoke(connection, packet);
142
    }
143
144
    public static void sendMessage(Player p, Object message) throws Exception {
145
        Object nmsPlayer = getNmsPlayer(p);
146
        nmsPlayer.getClass().getMethod("sendMessage", Reflection.getClass("{nms}.IChatBaseComponent")).invoke(nmsPlayer, message);
147
148
    }
149
150
    public static void sendMessages(Player p, Object message) throws Exception {
151
        Object nmsPlayer = getNmsPlayer(p);
152
        Class c = Reflection.getClass("{nms}.IChatBaseComponent");
153
        Method m = nmsPlayer.getClass().getMethod("sendMessage", new Class[]{ Array.newInstance(c, 4).getClass() });
154
        m.invoke(nmsPlayer, new Object[]{message});
155
156
    }
157
158
    public static int ping(Player p) throws Exception {
159
        Object nmsPlayer = Reflection.getNmsPlayer(p);
160
        return Integer.valueOf(getFieldValue(nmsPlayer, "ping").toString());
161
    }
162
163
    public static Field getFirstFieldByType(Class<?> clazz, Class<?> type) {
164
        for(Field field : clazz.getDeclaredFields()) {
165
            field.setAccessible(true);
166-
	public static Field getFirstFieldByType(Class<?> clazz, Class<?> type) {
166+
167
                return field;
168
            }
169
        }
170
        return null;
171
    }
172
}