Better version control

This commit is contained in:
filoghost 2016-08-25 10:22:44 +02:00
parent c22c025fb9
commit 90ac307519
9 changed files with 117 additions and 85 deletions

View File

@ -28,6 +28,7 @@ import com.gmail.filoghost.holographicdisplays.placeholder.PlaceholdersManager;
import com.gmail.filoghost.holographicdisplays.task.BungeeCleanupTask; import com.gmail.filoghost.holographicdisplays.task.BungeeCleanupTask;
import com.gmail.filoghost.holographicdisplays.task.StartupLoadHologramsTask; import com.gmail.filoghost.holographicdisplays.task.StartupLoadHologramsTask;
import com.gmail.filoghost.holographicdisplays.task.WorldPlayerCounterTask; import com.gmail.filoghost.holographicdisplays.task.WorldPlayerCounterTask;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
import com.gmail.filoghost.holographicdisplays.util.VersionUtils; import com.gmail.filoghost.holographicdisplays.util.VersionUtils;
public class HolographicDisplays extends JavaPlugin { public class HolographicDisplays extends JavaPlugin {
@ -41,15 +42,6 @@ public class HolographicDisplays extends JavaPlugin {
// The command handler, just in case a plugin wants to register more commands. // The command handler, just in case a plugin wants to register more commands.
private HologramsCommandHandler commandHandler; private HologramsCommandHandler commandHandler;
// Since 1.8 we use armor stands instead of wither skulls.
private static boolean is18orGreater;
// Since 1.9 there is a different offset for the nametag.
private static boolean is19orGreater;
// Since 1.10 there is a difference in the entity metadata packet index for items.
private static boolean is110orGreater;
// The new version found by the updater, null if there is no new version. // The new version found by the updater, null if there is no new version.
private static String newVersion; private static String newVersion;
@ -114,34 +106,44 @@ public class HolographicDisplays extends JavaPlugin {
// It's simple, we don't need reflection. // It's simple, we don't need reflection.
if ("v1_7_R1".equals(version)) { if ("v1_7_R1".equals(version)) {
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R1.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R1.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_7);
} else if ("v1_7_R2".equals(version)) { } else if ("v1_7_R2".equals(version)) {
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R2.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R2.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_7);
} else if ("v1_7_R3".equals(version)) { } else if ("v1_7_R3".equals(version)) {
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R3.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R3.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_7);
} else if ("v1_7_R4".equals(version)) { } else if ("v1_7_R4".equals(version)) {
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R4.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_7_R4.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_7);
} else if ("v1_8_R1".equals(version)) { } else if ("v1_8_R1".equals(version)) {
is18orGreater = true;
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_8_R1.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_8_R1.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_8);
} else if ("v1_8_R2".equals(version)) { } else if ("v1_8_R2".equals(version)) {
is18orGreater = true;
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_8_R2.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_8_R2.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_8);
} else if ("v1_8_R3".equals(version)) { } else if ("v1_8_R3".equals(version)) {
is18orGreater = true;
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_8_R3.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_8_R3.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_8);
} else if ("v1_9_R1".equals(version)) { } else if ("v1_9_R1".equals(version)) {
is18orGreater = true;
is19orGreater = true;
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_9_R1.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_9_R1.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_9);
} else if ("v1_9_R2".equals(version)) { } else if ("v1_9_R2".equals(version)) {
is18orGreater = true;
is19orGreater = true;
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_9_R2.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_9_R2.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_9);
} else if ("v1_10_R1".equals(version)) { } else if ("v1_10_R1".equals(version)) {
is18orGreater = true;
is19orGreater = true;
is110orGreater = true;
nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_10_R1.NmsManagerImpl(); nmsManager = new com.gmail.filoghost.holographicdisplays.nms.v1_10_R1.NmsManagerImpl();
MinecraftVersion.set(MinecraftVersion.v1_10);
} else { } else {
printWarnAndDisable( printWarnAndDisable(
"******************************************************", "******************************************************",
@ -184,10 +186,10 @@ public class HolographicDisplays extends JavaPlugin {
if (VersionUtils.classExists("com.comphenix.protocol.wrappers.WrappedDataWatcher$WrappedDataWatcherObject")) { if (VersionUtils.classExists("com.comphenix.protocol.wrappers.WrappedDataWatcher$WrappedDataWatcherObject")) {
// Only the new version contains this class // Only the new version contains this class
getLogger().info("Found ProtocolLib, using new version."); getLogger().info("Found ProtocolLib, using new version.");
protocolLibHook = new com.gmail.filoghost.holographicdisplays.bridge.protocollib.current.ProtocolLibHookImpl(is19orGreater, is110orGreater); protocolLibHook = new com.gmail.filoghost.holographicdisplays.bridge.protocollib.current.ProtocolLibHookImpl();
} else { } else {
getLogger().info("Found ProtocolLib, using old version."); getLogger().info("Found ProtocolLib, using old version.");
protocolLibHook = new com.gmail.filoghost.holographicdisplays.bridge.protocollib.old.ProtocolLibHookImpl(is18orGreater); protocolLibHook = new com.gmail.filoghost.holographicdisplays.bridge.protocollib.old.ProtocolLibHookImpl();
} }
if (protocolLibHook.hook(this, nmsManager)) { if (protocolLibHook.hook(this, nmsManager)) {
@ -278,18 +280,6 @@ public class HolographicDisplays extends JavaPlugin {
public HologramsCommandHandler getCommandHandler() { public HologramsCommandHandler getCommandHandler() {
return commandHandler; return commandHandler;
} }
public static boolean is18orGreater() {
return is18orGreater;
}
public static boolean is19orGreater() {
return is19orGreater;
}
public static boolean is110orGreater() {
return is19orGreater;
}
private static void printWarnAndDisable(String... messages) { private static void printWarnAndDisable(String... messages) {
StringBuffer buffer = new StringBuffer("\n "); StringBuffer buffer = new StringBuffer("\n ");

View File

@ -32,6 +32,7 @@ import com.gmail.filoghost.holographicdisplays.object.line.CraftItemLine;
import com.gmail.filoghost.holographicdisplays.object.line.CraftTextLine; import com.gmail.filoghost.holographicdisplays.object.line.CraftTextLine;
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchSlimeLine; import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchSlimeLine;
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchableLine; import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchableLine;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
import com.gmail.filoghost.holographicdisplays.util.Utils; import com.gmail.filoghost.holographicdisplays.util.Utils;
import com.google.common.base.Optional; import com.google.common.base.Optional;
@ -42,26 +43,15 @@ import com.google.common.base.Optional;
*/ */
public class ProtocolLibHookImpl implements ProtocolLibHook { public class ProtocolLibHookImpl implements ProtocolLibHook {
private boolean is1_9orGreater;
private boolean is110orGreater;
private NMSManager nmsManager; private NMSManager nmsManager;
private boolean initSerializers; private Serializer itemSerializer, intSerializer, byteSerializer;
private Serializer
itemSerializer,
intSerializer,
byteSerializer;
public ProtocolLibHookImpl(boolean is19orGreater, boolean is110orGreater) { private int itemstackMetadataWatcherIndex;
this.is1_9orGreater = is19orGreater;
this.is110orGreater = is110orGreater;
}
@Override @Override
public boolean hook(Plugin plugin, NMSManager nmsManager) { public boolean hook(Plugin plugin, NMSManager nmsManager) {
this.nmsManager = nmsManager;
String version = Bukkit.getPluginManager().getPlugin("ProtocolLib").getDescription().getVersion(); String version = Bukkit.getPluginManager().getPlugin("ProtocolLib").getDescription().getVersion();
if (version.matches(Pattern.quote("3.7-SNAPSHOT") + ".+")) { if (version.matches(Pattern.quote("3.7-SNAPSHOT") + ".+")) {
Bukkit.getConsoleSender().sendMessage( Bukkit.getConsoleSender().sendMessage(
@ -71,6 +61,24 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
"Please update ProtocolLib."); "Please update ProtocolLib.");
return false; return false;
} }
this.nmsManager = nmsManager;
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_10)) {
itemstackMetadataWatcherIndex = 6;
} else {
itemstackMetadataWatcherIndex = 5;
}
} else {
itemstackMetadataWatcherIndex = 10;
}
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
itemSerializer = Registry.get(MinecraftReflection.getItemStackClass());
intSerializer = Registry.get(Integer.class);
byteSerializer = Registry.get(Byte.class);
}
AdapterParameteters params = PacketAdapter AdapterParameteters params = PacketAdapter
.params() .params()
@ -183,7 +191,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
String replacement = customName.replace("{player}", player.getName()).replace("{displayname}", player.getDisplayName()); String replacement = customName.replace("{player}", player.getName()).replace("{displayname}", player.getDisplayName());
WrappedWatchableObject newWatchableObject; WrappedWatchableObject newWatchableObject;
if (is1_9orGreater) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
// The other constructor does not work in 1.9+. // The other constructor does not work in 1.9+.
newWatchableObject = new WrappedWatchableObject(watchableObject.getWatcherObject(), replacement); newWatchableObject = new WrappedWatchableObject(watchableObject.getWatcherObject(), replacement);
} else { } else {
@ -255,19 +263,12 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
WrapperPlayServerEntityMetadata itemDataPacket = new WrapperPlayServerEntityMetadata(); WrapperPlayServerEntityMetadata itemDataPacket = new WrapperPlayServerEntityMetadata();
WrappedDataWatcher dataWatcher = new WrappedDataWatcher(); WrappedDataWatcher dataWatcher = new WrappedDataWatcher();
if (is1_9orGreater) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
if (!initSerializers) { dataWatcher.setObject(new WrappedDataWatcherObject(itemstackMetadataWatcherIndex, itemSerializer), Optional.of(itemLine.getNmsItem().getRawItemStack()));
itemSerializer = Registry.get(MinecraftReflection.getItemStackClass());
intSerializer = Registry.get(Integer.class);
byteSerializer = Registry.get(Byte.class);
initSerializers = true;
}
dataWatcher.setObject(new WrappedDataWatcherObject(is110orGreater ? 6 : 5, itemSerializer), Optional.of(itemLine.getNmsItem().getRawItemStack()));
dataWatcher.setObject(new WrappedDataWatcherObject(1, intSerializer), 300); dataWatcher.setObject(new WrappedDataWatcherObject(1, intSerializer), 300);
dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0); dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0);
} else { } else {
dataWatcher.setObject(10, itemLine.getNmsItem().getRawItemStack()); dataWatcher.setObject(itemstackMetadataWatcherIndex, itemLine.getNmsItem().getRawItemStack());
dataWatcher.setObject(1, 300); dataWatcher.setObject(1, 300);
dataWatcher.setObject(0, (byte) 0); dataWatcher.setObject(0, (byte) 0);
} }
@ -302,7 +303,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
private AbstractPacket getAttachPacket(int vehicleId, int passengerId) { private AbstractPacket getAttachPacket(int vehicleId, int passengerId) {
if (is1_9orGreater) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
WrapperPlayServerMount attachPacket = new WrapperPlayServerMount(); WrapperPlayServerMount attachPacket = new WrapperPlayServerMount();
attachPacket.setVehicleId(vehicleId); attachPacket.setVehicleId(vehicleId);
attachPacket.setPassengers(new int[] {passengerId}); attachPacket.setPassengers(new int[] {passengerId});

View File

@ -16,7 +16,6 @@ import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.wrappers.WrappedDataWatcher; import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.comphenix.protocol.wrappers.WrappedWatchableObject; import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import com.gmail.filoghost.holographicdisplays.HolographicDisplays;
import com.gmail.filoghost.holographicdisplays.bridge.protocollib.ProtocolLibHook; import com.gmail.filoghost.holographicdisplays.bridge.protocollib.ProtocolLibHook;
import com.gmail.filoghost.holographicdisplays.bridge.protocollib.old.WrapperPlayServerSpawnEntity.ObjectTypes; import com.gmail.filoghost.holographicdisplays.bridge.protocollib.old.WrapperPlayServerSpawnEntity.ObjectTypes;
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager; import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
@ -27,6 +26,7 @@ import com.gmail.filoghost.holographicdisplays.object.line.CraftItemLine;
import com.gmail.filoghost.holographicdisplays.object.line.CraftTextLine; import com.gmail.filoghost.holographicdisplays.object.line.CraftTextLine;
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchSlimeLine; import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchSlimeLine;
import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchableLine; import com.gmail.filoghost.holographicdisplays.object.line.CraftTouchableLine;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
import com.gmail.filoghost.holographicdisplays.util.Utils; import com.gmail.filoghost.holographicdisplays.util.Utils;
import com.gmail.filoghost.holographicdisplays.util.VersionUtils; import com.gmail.filoghost.holographicdisplays.util.VersionUtils;
@ -37,21 +37,15 @@ import com.gmail.filoghost.holographicdisplays.util.VersionUtils;
*/ */
public class ProtocolLibHookImpl implements ProtocolLibHook { public class ProtocolLibHookImpl implements ProtocolLibHook {
private boolean is18orGreater;
private NMSManager nmsManager; private NMSManager nmsManager;
private int customNameWatcherIndex; private int customNameWatcherIndex;
public ProtocolLibHookImpl(boolean is18orGreater) {
this.is18orGreater = is18orGreater;
}
@Override @Override
public boolean hook(Plugin plugin, NMSManager nmsManager) { public boolean hook(Plugin plugin, NMSManager nmsManager) {
this.nmsManager = nmsManager; this.nmsManager = nmsManager;
if (is18orGreater) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
customNameWatcherIndex = 2; customNameWatcherIndex = 2;
} else { } else {
customNameWatcherIndex = 10; customNameWatcherIndex = 10;
@ -232,7 +226,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
itemPacket.sendPacket(player); itemPacket.sendPacket(player);
AbstractPacket vehiclePacket; AbstractPacket vehiclePacket;
if (HolographicDisplays.is18orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
// In 1.8 we have armor stands, that are living entities. // In 1.8 we have armor stands, that are living entities.
vehiclePacket = new WrapperPlayServerSpawnEntityLiving(itemLine.getNmsVehicle().getBukkitEntityNMS()); vehiclePacket = new WrapperPlayServerSpawnEntityLiving(itemLine.getNmsVehicle().getBukkitEntityNMS());
} else { } else {
@ -268,7 +262,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
if (touchSlime.isSpawned()) { if (touchSlime.isSpawned()) {
AbstractPacket vehiclePacket; AbstractPacket vehiclePacket;
if (HolographicDisplays.is18orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
// Armor stand vehicle // Armor stand vehicle
vehiclePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsVehicle().getBukkitEntityNMS()); vehiclePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsVehicle().getBukkitEntityNMS());
} else { } else {

View File

@ -7,7 +7,6 @@ import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.gmail.filoghost.holographicdisplays.HolographicDisplays;
import com.gmail.filoghost.holographicdisplays.commands.Colors; import com.gmail.filoghost.holographicdisplays.commands.Colors;
import com.gmail.filoghost.holographicdisplays.commands.CommandValidator; import com.gmail.filoghost.holographicdisplays.commands.CommandValidator;
import com.gmail.filoghost.holographicdisplays.commands.Strings; import com.gmail.filoghost.holographicdisplays.commands.Strings;
@ -15,6 +14,7 @@ import com.gmail.filoghost.holographicdisplays.commands.main.HologramSubCommand;
import com.gmail.filoghost.holographicdisplays.exception.CommandException; import com.gmail.filoghost.holographicdisplays.exception.CommandException;
import com.gmail.filoghost.holographicdisplays.object.NamedHologram; import com.gmail.filoghost.holographicdisplays.object.NamedHologram;
import com.gmail.filoghost.holographicdisplays.object.NamedHologramManager; import com.gmail.filoghost.holographicdisplays.object.NamedHologramManager;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
public class FixCommand extends HologramSubCommand { public class FixCommand extends HologramSubCommand {
@ -37,7 +37,7 @@ public class FixCommand extends HologramSubCommand {
@Override @Override
public void execute(CommandSender sender, String label, String[] args) throws CommandException { public void execute(CommandSender sender, String label, String[] args) throws CommandException {
CommandValidator.isTrue(!HolographicDisplays.is18orGreater(), "This command is no longer necessary in 1.8+. The holograms already use the correct ambient light."); CommandValidator.isTrue(!MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8), "This command is no longer necessary in 1.8+. The holograms already use the correct ambient light.");
NamedHologram hologram = NamedHologramManager.getHologram(args[0].toLowerCase()); NamedHologram hologram = NamedHologramManager.getHologram(args[0].toLowerCase());
CommandValidator.notNull(hologram, Strings.noSuchHologram(args[0].toLowerCase())); CommandValidator.notNull(hologram, Strings.noSuchHologram(args[0].toLowerCase()));
@ -70,7 +70,7 @@ public class FixCommand extends HologramSubCommand {
@Override @Override
public SubCommandType getType() { public SubCommandType getType() {
if (HolographicDisplays.is18orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
return SubCommandType.HIDDEN; return SubCommandType.HIDDEN;
} else { } else {
return SubCommandType.GENERIC; return SubCommandType.GENERIC;

View File

@ -13,6 +13,7 @@ import com.gmail.filoghost.holographicdisplays.api.line.ItemLine;
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem; import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSItem;
import com.gmail.filoghost.holographicdisplays.object.CraftHologram; import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
import com.gmail.filoghost.holographicdisplays.util.Offsets; import com.gmail.filoghost.holographicdisplays.util.Offsets;
import com.gmail.filoghost.holographicdisplays.util.Validator; import com.gmail.filoghost.holographicdisplays.util.Validator;
@ -61,9 +62,9 @@ public class CraftItemLine extends CraftTouchableLine implements ItemLine {
Location loc = nmsItem.getBukkitEntityNMS().getLocation(); Location loc = nmsItem.getBukkitEntityNMS().getLocation();
if (HolographicDisplays.is19orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ()); super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
} else if (HolographicDisplays.is18orGreater()) { } else if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ()); super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
} else { } else {
super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ()); super.setTouchHandler(touchHandler, loc.getWorld(), loc.getX(), loc.getY() - getItemOffset(), loc.getZ());
@ -84,7 +85,7 @@ public class CraftItemLine extends CraftTouchableLine implements ItemLine {
nmsItem = HolographicDisplays.getNMSManager().spawnNMSItem(world, x, y + offset, z, this, itemStack); nmsItem = HolographicDisplays.getNMSManager().spawnNMSItem(world, x, y + offset, z, this, itemStack);
if (HolographicDisplays.is18orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this); nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this);
} else { } else {
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + offset, z, this); nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + offset, z, this);
@ -150,9 +151,9 @@ public class CraftItemLine extends CraftTouchableLine implements ItemLine {
} }
private double getItemOffset() { private double getItemOffset() {
if (HolographicDisplays.is19orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
return Offsets.ARMOR_STAND_WITH_ITEM_1_9; return Offsets.ARMOR_STAND_WITH_ITEM_1_9;
} else if (HolographicDisplays.is18orGreater()) { } else if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
return Offsets.ARMOR_STAND_WITH_ITEM; return Offsets.ARMOR_STAND_WITH_ITEM;
} else { } else {
return Offsets.WITHER_SKULL_WITH_ITEM; return Offsets.WITHER_SKULL_WITH_ITEM;

View File

@ -12,6 +12,7 @@ import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBa
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSNameable; import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSNameable;
import com.gmail.filoghost.holographicdisplays.object.CraftHologram; import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
import com.gmail.filoghost.holographicdisplays.placeholder.PlaceholdersManager; import com.gmail.filoghost.holographicdisplays.placeholder.PlaceholdersManager;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
import com.gmail.filoghost.holographicdisplays.util.Offsets; import com.gmail.filoghost.holographicdisplays.util.Offsets;
public class CraftTextLine extends CraftTouchableLine implements TextLine { public class CraftTextLine extends CraftTouchableLine implements TextLine {
@ -70,7 +71,7 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
public void spawn(World world, double x, double y, double z) { public void spawn(World world, double x, double y, double z) {
super.spawn(world, x, y, z); super.spawn(world, x, y, z);
if (HolographicDisplays.is18orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
nmsNameble = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + getTextOffset(), z, this); nmsNameble = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + getTextOffset(), z, this);
} else { } else {
nmsNameble = HolographicDisplays.getNMSManager().spawnNMSHorse(world, x, y + Offsets.WITHER_SKULL_WITH_HORSE, z, this); nmsNameble = HolographicDisplays.getNMSManager().spawnNMSHorse(world, x, y + Offsets.WITHER_SKULL_WITH_HORSE, z, this);
@ -148,9 +149,9 @@ public class CraftTextLine extends CraftTouchableLine implements TextLine {
} }
private double getTextOffset() { private double getTextOffset() {
if (HolographicDisplays.is19orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
return Offsets.ARMOR_STAND_ALONE_1_9; return Offsets.ARMOR_STAND_ALONE_1_9;
} else if (HolographicDisplays.is18orGreater()) { } else if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
return Offsets.ARMOR_STAND_ALONE; return Offsets.ARMOR_STAND_ALONE;
} else { } else {
return Offsets.WITHER_SKULL_WITH_HORSE; return Offsets.WITHER_SKULL_WITH_HORSE;

View File

@ -6,6 +6,7 @@ import com.gmail.filoghost.holographicdisplays.HolographicDisplays;
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase; import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime; import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSSlime;
import com.gmail.filoghost.holographicdisplays.object.CraftHologram; import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
import com.gmail.filoghost.holographicdisplays.util.MinecraftVersion;
import com.gmail.filoghost.holographicdisplays.util.Offsets; import com.gmail.filoghost.holographicdisplays.util.Offsets;
/** /**
@ -38,7 +39,7 @@ public class CraftTouchSlimeLine extends CraftHologramLine {
nmsSlime = HolographicDisplays.getNMSManager().spawnNMSSlime(world, x, y + offset, z, this); nmsSlime = HolographicDisplays.getNMSManager().spawnNMSSlime(world, x, y + offset, z, this);
if (HolographicDisplays.is18orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this); nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSArmorStand(world, x, y + offset, z, this);
} else { } else {
nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + offset, z, this); nmsVehicle = HolographicDisplays.getNMSManager().spawnNMSWitherSkull(world, x, y + offset, z, this);
@ -99,9 +100,9 @@ public class CraftTouchSlimeLine extends CraftHologramLine {
} }
private double getSlimeOffset() { private double getSlimeOffset() {
if (HolographicDisplays.is19orGreater()) { if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
return Offsets.ARMOR_STAND_WITH_SLIME_1_9; return Offsets.ARMOR_STAND_WITH_SLIME_1_9;
} else if (HolographicDisplays.is18orGreater()) { } else if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
return Offsets.ARMOR_STAND_WITH_SLIME; return Offsets.ARMOR_STAND_WITH_SLIME;
} else { } else {
return Offsets.WITHER_SKULL_WITH_SLIME; return Offsets.WITHER_SKULL_WITH_SLIME;

View File

@ -0,0 +1,45 @@
package com.gmail.filoghost.holographicdisplays.util;
/*
* Since 1.8 we use armor stands instead of wither skulls.
* Since 1.9 there is a different offset for the nametag.
* Since 1.10 there is a difference in the entity metadata packet index for items.
*/
public class MinecraftVersion {
private static MinecraftVersion version;
public static final MinecraftVersion
v1_7 = new MinecraftVersion(1),
// Since 1.8 we use armor stands instead of wither skulls.
v1_8 = new MinecraftVersion(2),
// Since 1.9 there is a different offset for the nametag.
v1_9 = new MinecraftVersion(3),
// Since 1.10 there is a difference in the entity metadata packet index for items.
v1_10 = new MinecraftVersion(4);
private int value;
private MinecraftVersion(int value) {
this.value = value;
}
public static void set(MinecraftVersion version) {
if (version == null) {
throw new NullPointerException("version");
}
if (MinecraftVersion.version != null) {
throw new IllegalArgumentException("version already set");
}
MinecraftVersion.version = version;
}
public static boolean isGreaterEqualThan(MinecraftVersion other) {
return MinecraftVersion.version.value >= other.value;
}
}

View File

@ -10,7 +10,6 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import com.gmail.filoghost.holographicdisplays.HolographicDisplays;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
public class VersionUtils { public class VersionUtils {
@ -55,7 +54,7 @@ public class VersionUtils {
} }
public static boolean isArmorstand(EntityType type) { public static boolean isArmorstand(EntityType type) {
if (!HolographicDisplays.is18orGreater()) { if (!MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_8)) {
return false; return false;
} }