diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/SendChunk.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/SendChunk.java index a49ce95de..c8e29430e 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/SendChunk.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/SendChunk.java @@ -43,6 +43,7 @@ public class SendChunk { * Constructor */ public SendChunk() throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException { + RefConstructor tempMapChunk; RefClass classCraftPlayer = getRefClass("{cb}.entity.CraftPlayer"); this.methodGetHandlePlayer = classCraftPlayer.getMethod("getHandle"); RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); @@ -50,12 +51,16 @@ public class SendChunk { RefClass classChunk = getRefClass("{nms}.Chunk"); this.methodInitLighting = classChunk.getMethod("initLighting"); RefClass classMapChunk = getRefClass("{nms}.PacketPlayOutMapChunk"); - //TODO in 1.7.10 this is PacketPlayOutMapChunk(Chunk chunk, boolean flag, int i, int version) if (PS.get().checkVersion(PS.get().IMP.getServerVersion(), 1, 9, 4)) { - this.mapChunk = classMapChunk.getConstructor(classChunk.getRealClass(),int.class); + tempMapChunk = classMapChunk.getConstructor(classChunk.getRealClass(),int.class); } else { - this.mapChunk = classMapChunk.getConstructor(classChunk.getRealClass(), boolean.class, int.class); + try { + tempMapChunk = classMapChunk.getConstructor(classChunk.getRealClass(), boolean.class, int.class); + } catch (NoSuchMethodException ignored) { + tempMapChunk = classMapChunk.getConstructor(classChunk.getRealClass(),boolean.class, int.class, int.class); + } } + this.mapChunk = tempMapChunk; RefClass classEntityPlayer = getRefClass("{nms}.EntityPlayer"); this.connection = classEntityPlayer.getField("playerConnection"); RefClass classPacket = getRefClass("{nms}.Packet"); @@ -110,11 +115,24 @@ public class SendChunk { Object c = this.methodGetHandleChunk.of(chunk).call(); chunks.remove(chunk); Object con = this.connection.of(entity).get(); - Object packet; + Object packet = null; if (PS.get().checkVersion(PS.get().IMP.getServerVersion(), 1, 9, 4)) { - packet = this.mapChunk.create(c,65535); + try { + packet = this.mapChunk.create(c,65535); + } catch (Exception ignored) {} } else { - packet = this.mapChunk.create(c, true, 65535); + try { + packet = this.mapChunk.create(c, true, 65535); + } catch (ReflectiveOperationException | IllegalArgumentException e) { + try { + packet = this.mapChunk.create(c, true, 65535, 5); + } catch (ReflectiveOperationException | IllegalArgumentException e1) { + e1.printStackTrace(); + } + } + } + if (packet == null) { + PS.debug("Error with PacketPlayOutMapChunk reflection."); } this.send.of(con).call(packet); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8.java index 139e14c24..b5cc3cc7d 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8.java @@ -319,7 +319,12 @@ public class FastQueue_1_8 extends SlowQueue { // End blockstate workaround // // check sign - Object pos = this.constructorBlockPosition.create(x, y, z); + Object pos = null; + try { + pos = this.constructorBlockPosition.create(x, y, z); + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } Object combined = this.methodGetByCombinedId.call(newBlock.id + (newBlock.data << 12)); this.methodA.of(chunk).call(pos, combined); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8_3.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8_3.java index ee0cb7eb1..7f1cb32b9 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8_3.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_8_3.java @@ -23,7 +23,6 @@ import org.bukkit.World.Environment; import org.bukkit.block.Biome; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; @@ -220,8 +219,7 @@ public class FastQueue_1_8_3 extends SlowQueue { } } // Clear - } catch (IllegalAccessException | IllegalArgumentException | NoSuchMethodException | SecurityException | InvocationTargetException - | NoSuchFieldException e) { + } catch (IllegalArgumentException | SecurityException | ReflectiveOperationException e) { e.printStackTrace(); } int[][] biomes = fs.biomes; @@ -243,7 +241,7 @@ public class FastQueue_1_8_3 extends SlowQueue { } } - public Object newChunkSection(int i, boolean flag, char[] ids) { + public Object newChunkSection(int i, boolean flag, char[] ids) throws ReflectiveOperationException { return this.classChunkSectionConstructor.create(i, flag, ids); } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java index d935204d9..e9a267398 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/block/FastQueue_1_9.java @@ -1,5 +1,7 @@ package com.plotsquared.bukkit.util.block; +import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; + import com.intellectualcrafters.plot.object.ChunkLoc; import com.intellectualcrafters.plot.object.PseudoRandom; import com.intellectualcrafters.plot.util.ChunkManager; @@ -12,22 +14,19 @@ import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod; import com.intellectualcrafters.plot.util.ReflectionUtils.RefMethod.RefExecutor; import com.intellectualcrafters.plot.util.SetQueue.ChunkWrapper; import com.plotsquared.bukkit.util.BukkitUtil; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map.Entry; -import java.util.Set; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Biome; - -import static com.intellectualcrafters.plot.util.ReflectionUtils.getRefClass; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set; public class FastQueue_1_9 extends SlowQueue { @@ -197,8 +196,7 @@ public class FastQueue_1_9 extends SlowQueue { } } // Clear - } catch (IllegalAccessException | IllegalArgumentException | NoSuchMethodException | SecurityException | InvocationTargetException | - NoSuchFieldException e) { + } catch (IllegalArgumentException | SecurityException | ReflectiveOperationException e) { e.printStackTrace(); } int[][] biomes = fs.biomes; @@ -221,7 +219,7 @@ public class FastQueue_1_9 extends SlowQueue { world.refreshChunk(fs.getX(), fs.getZ()); } - public Object newChunkSection(int i, boolean flag, char[] ids) { + public Object newChunkSection(int i, boolean flag, char[] ids) throws ReflectiveOperationException { return this.classChunkSectionConstructor.create(i, flag, ids); } diff --git a/Core/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java b/Core/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java index 62cbe04b0..48803e57b 100644 --- a/Core/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java +++ b/Core/src/main/java/com/intellectualcrafters/plot/util/ReflectionUtils.java @@ -609,14 +609,11 @@ public class ReflectionUtils { * * @return new object * - * @throws RuntimeException if something went wrong + * @throws ReflectiveOperationException + * @throws IllegalArgumentException */ - public Object create(Object... params) { - try { + public Object create(Object... params) throws ReflectiveOperationException, IllegalArgumentException { return this.constructor.newInstance(params); - } catch (Exception e) { - throw new RuntimeException(e); - } } }