Fix for missing class in legacy versions & incompatible material

This commit is contained in:
Brianna 2019-05-26 20:04:03 -04:00
parent 1b7df845b8
commit 36583c25e8
3 changed files with 6 additions and 8 deletions

View File

@ -4,7 +4,7 @@ stages:
variables:
name: "EpicHoppers"
path: "/builds/$CI_PROJECT_PATH"
version: "4-pre-release-1"
version: "4-pre-release-1-B2"
build:
stage: build

View File

@ -8,6 +8,7 @@ import com.songoda.epichoppers.hopper.levels.modules.Module;
import com.songoda.epichoppers.player.SyncType;
import com.songoda.epichoppers.utils.CostType;
import com.songoda.epichoppers.utils.Methods;
import com.songoda.epichoppers.utils.ServerVersion;
import com.songoda.epichoppers.utils.TeleportTrigger;
import com.songoda.epichoppers.utils.gui.AbstractGUI;
import org.bukkit.Bukkit;
@ -63,7 +64,7 @@ public class GUIOverview extends AbstractGUI {
perlmeta.setLore(loreperl);
perl.setItemMeta(perlmeta);
ItemStack filter = new ItemStack(Material.COMPARATOR, 1);
ItemStack filter = new ItemStack(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.COMPARATOR : Material.valueOf("REDSTONE_COMPARATR"), 1);
ItemMeta filtermeta = filter.getItemMeta();
filtermeta.setDisplayName(plugin.getLocale().getMessage("interface.hopper.filtertitle"));
ArrayList<String> lorefilter = new ArrayList<>();

View File

@ -309,7 +309,7 @@ public class HopTask extends BukkitRunnable {
}
private Class<?> clazzCraftWorld, clazzCraftBlock, clazzBlockPosition;
private Method getHandle, updateAdjacentComparators, getNMS, getBlock;
private Method getHandle, updateAdjacentComparators, getNMSBlock;
private void updateAdjacentComparators(Location location) {
try {
@ -320,26 +320,23 @@ public class HopTask extends BukkitRunnable {
clazzCraftBlock = Class.forName("org.bukkit.craftbukkit." + ver + ".block.CraftBlock");
clazzBlockPosition = Class.forName("net.minecraft.server." + ver + ".BlockPosition");
Class<?> clazzWorld = Class.forName("net.minecraft.server." + ver + ".World");
Class<?> clazzIBlockData = Class.forName("net.minecraft.server." + ver + ".IBlockData");
Class<?> clazzBlock = Class.forName("net.minecraft.server." + ver + ".Block");
getHandle = clazzCraftWorld.getMethod("getHandle");
updateAdjacentComparators = clazzWorld.getMethod("updateAdjacentComparators", clazzBlockPosition, clazzBlock);
getNMS = clazzCraftBlock.getMethod("getNMS");
getBlock = clazzIBlockData.getMethod("getBlock");
getNMSBlock = clazzCraftBlock.getMethod("getNMSBlock");
}
// invoke and cast objects.
Object craftWorld = clazzCraftWorld.cast(location.getWorld());
Object world = getHandle.invoke(craftWorld);
Object craftBlock = clazzCraftBlock.cast(location.getBlock());
Object iBlockData = getNMS.invoke(craftBlock);
// Invoke final method.
updateAdjacentComparators
.invoke(world, clazzBlockPosition.getConstructor(double.class, double.class, double.class)
.newInstance(location.getX(), location.getY(), location.getZ()),
getBlock.invoke(iBlockData));
getNMSBlock.invoke(craftBlock));
} catch (ReflectiveOperationException e) {
e.printStackTrace();