closes SD/625

This commit is contained in:
TheCreeperCow 2018-12-09 10:06:10 +01:00 committed by Brianna O'Keefe
parent dbd8d01917
commit aee0df9481
4 changed files with 54 additions and 25 deletions

View File

@ -1,5 +1,7 @@
package com.songoda.ultimatestacker.utils;
import com.songoda.arconix.api.ArconixAPI;
import com.songoda.arconix.plugin.Arconix;
import org.bukkit.Bukkit;
import org.bukkit.block.CreatureSpawner;
@ -9,34 +11,61 @@ import java.lang.reflect.Method;
public class Reflection {
private static Class<?> clazzCraftCreatureSpawner, clazzTileEntityMobSpawner = null;
private static Method methodGetTileEntity, methodGetSpawner;
private static Field fieldSpawnount, fieldMaxNearbyEntities;
private static Field fieldSpawnount, fieldMaxNearbyEntities, fieldSpawner;
public static CreatureSpawner updateSpawner(CreatureSpawner creatureSpawner, int count, int max) {
try {
if (creatureSpawner == null) return creatureSpawner;
if (clazzCraftCreatureSpawner == null) {
String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23);
clazzCraftCreatureSpawner = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftCreatureSpawner");
clazzTileEntityMobSpawner = Class.forName("net.minecraft.server." + ver + ".TileEntityMobSpawner");
Class<?> clazzMobSpawnerAbstract = Class.forName("net.minecraft.server." + ver + ".MobSpawnerAbstract");
methodGetTileEntity = clazzCraftCreatureSpawner.getDeclaredMethod("getTileEntity");
methodGetSpawner = clazzTileEntityMobSpawner.getDeclaredMethod("getSpawner");
fieldSpawnount = clazzMobSpawnerAbstract.getDeclaredField("spawnCount");
fieldSpawnount.setAccessible(true);
fieldMaxNearbyEntities = clazzMobSpawnerAbstract.getDeclaredField("maxNearbyEntities");
fieldMaxNearbyEntities.setAccessible(true);
if (!Bukkit.getServer().getClass().getPackage().getName().contains("1.8")) {
try {
if (creatureSpawner == null) return null;
if (clazzCraftCreatureSpawner == null) {
String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23);
clazzCraftCreatureSpawner = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftCreatureSpawner");
clazzTileEntityMobSpawner = Class.forName("net.minecraft.server." + ver + ".TileEntityMobSpawner");
Class<?> clazzMobSpawnerAbstract = Class.forName("net.minecraft.server." + ver + ".MobSpawnerAbstract");
methodGetTileEntity = clazzCraftCreatureSpawner.getDeclaredMethod("getTileEntity");
methodGetSpawner = clazzTileEntityMobSpawner.getDeclaredMethod("getSpawner");
fieldSpawnount = clazzMobSpawnerAbstract.getDeclaredField("spawnCount");
fieldSpawnount.setAccessible(true);
fieldMaxNearbyEntities = clazzMobSpawnerAbstract.getDeclaredField("maxNearbyEntities");
fieldMaxNearbyEntities.setAccessible(true);
}
Object objCraftCreatureSpawner = clazzCraftCreatureSpawner.cast(creatureSpawner);
Object objTileEntityMobSpawner = clazzTileEntityMobSpawner.cast(methodGetTileEntity.invoke(objCraftCreatureSpawner));
Object objMobSpawnerAbstract = methodGetSpawner.invoke(objTileEntityMobSpawner);
fieldSpawnount.set(objMobSpawnerAbstract, count);
fieldMaxNearbyEntities.set(objMobSpawnerAbstract, max);
} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
return creatureSpawner;
}else{
try{
if (clazzCraftCreatureSpawner==null) {
String ver = Bukkit.getServer().getClass().getPackage().getName().substring(23);
clazzCraftCreatureSpawner = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftCreatureSpawner");
clazzTileEntityMobSpawner = Class.forName("net.minecraft.server." + ver + ".TileEntityMobSpawner");
Class<?> clazzMobSpawnerAbstract = Class.forName("net.minecraft.server." + ver + ".MobSpawnerAbstract");
methodGetSpawner = clazzTileEntityMobSpawner.getDeclaredMethod("getSpawner");
fieldSpawner = clazzCraftCreatureSpawner.getDeclaredField("spawner");
fieldSpawner.setAccessible(true);
fieldSpawnount = clazzMobSpawnerAbstract.getDeclaredField("spawnCount");
fieldSpawnount.setAccessible(true);
fieldMaxNearbyEntities = clazzMobSpawnerAbstract.getDeclaredField("maxNearbyEntities");
fieldMaxNearbyEntities.setAccessible(true);
}
Object objcraftCreatureSpawner = clazzCraftCreatureSpawner.cast(creatureSpawner);
Object objTileEntityMobSpawner = fieldSpawner.get(objcraftCreatureSpawner);
Object objMobSpawnerAbstract = methodGetSpawner.invoke(objTileEntityMobSpawner);
fieldSpawnount.set(objMobSpawnerAbstract,count);
fieldMaxNearbyEntities.set(objMobSpawnerAbstract,max);
Object objCraftCreatureSpawner = clazzCraftCreatureSpawner.cast(creatureSpawner);
Object objTileEntityMobSpawner = clazzTileEntityMobSpawner.cast(methodGetTileEntity.invoke(objCraftCreatureSpawner));
Object objMobSpawnerAbstract = methodGetSpawner.invoke(objTileEntityMobSpawner);
fieldSpawnount.set(objMobSpawnerAbstract, count);
fieldMaxNearbyEntities.set(objMobSpawnerAbstract, max);
} catch (ReflectiveOperationException e) {
e.printStackTrace();
} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
return creatureSpawner;
}
return creatureSpawner;
}

Binary file not shown.

View File

@ -1,5 +1,5 @@
#Generated by Maven
#Fri Nov 09 10:59:03 EST 2018
version=1.0.2
#Sat Dec 08 20:46:16 CET 2018
version=maven-version-number
groupId=com.songoda
artifactId=UltimateStacker