diff --git a/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java b/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java index f13c83d..11c03ac 100644 --- a/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java +++ b/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java @@ -429,7 +429,7 @@ public class QuickShopCommands implements Executor, HelpParse { final double dxz = Math.sqrt(Math.pow(dx, 2) + Math.pow(dz, 2)); final float pitch = (float) -Math.atan(dy / dxz); // Set values, convert to degrees - // Minecraft yaw (vertical) angles are inverted (negative) + // ServerInfo yaw (vertical) angles are inverted (negative) loc.setYaw(-loc.getYaw() * 180f / (float) Math.PI + 360); // But pitch angles are normal loc.setPitch(pitch * 180f / (float) Math.PI); diff --git a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java index 77b4045..05c5100 100644 --- a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java +++ b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java @@ -1,14 +1,19 @@ package org.maxgamer.QuickShop.Config; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.Shop.Item.FakeItem_17_18; -import org.maxgamer.QuickShop.Shop.Item.FakeItem_19_110; +import org.maxgamer.QuickShop.Shop.Item.FakeItem_19_111; import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.config.FileConfig; @@ -89,14 +94,16 @@ public class ConfigManager { if (config.getBoolean("fakeitem", true)) { try { plugin.getLogger().info("启用虚拟悬浮物 尝试启动中..."); - FakeItem_19_110.register(plugin); - plugin.getLogger().info("虚拟悬浮物功能测试正常(1.8-1.10.2)..."); + FakeItem_19_111.register(plugin); + new FakeItem_19_111(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), new ItemStack(Material.STONE)).spawn(); + plugin.getLogger().info("虚拟悬浮物功能测试正常(1.9-1.11.2)..."); fakeItem = true; } catch (final Throwable e) { Log.d(e); try { FakeItem_17_18.register(plugin); - plugin.getLogger().info("虚拟悬浮物功能测试正常(1.7)..."); + new FakeItem_17_18(new Location(Bukkit.getWorlds().get(0), 0, 0, 0), new ItemStack(Material.STONE)).spawn(); + plugin.getLogger().info("虚拟悬浮物功能测试正常(1.7-1.8)..."); fakeItem = true; } catch (final Throwable e2) { plugin.getLogger().warning("+========================================="); diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/LockListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/LockListener.java index 08195dd..c88ee1f 100644 --- a/src/main/java/org/maxgamer/QuickShop/Listeners/LockListener.java +++ b/src/main/java/org/maxgamer/QuickShop/Listeners/LockListener.java @@ -1,5 +1,8 @@ package org.maxgamer.QuickShop.Listeners; +import java.util.ArrayList; +import java.util.List; + import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -16,9 +19,6 @@ import org.maxgamer.QuickShop.Shop.Shop; import org.maxgamer.QuickShop.Util.MsgUtil; import org.maxgamer.QuickShop.Util.Util; -import java.util.ArrayList; -import java.util.List; - public class LockListener implements Listener { private final QuickShop plugin; @@ -63,7 +63,7 @@ public class LockListener implements Listener { Shop shop = plugin.getShopManager().getShop(b.getLocation()); // Make sure they're not using the non-shop half of a double chest. if (!hasSecondHalf(shop, b)) { return; } - if (!shop.getOwner().equals(p.getName())) { + if (shop != null && !shop.getOwner().equals(p.getName())) { if (p.hasPermission("quickshop.other.open")) { p.sendMessage(MsgUtil.p("bypassing-lock")); return; diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java index d85eda4..c337a1b 100644 --- a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java +++ b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java @@ -1,5 +1,7 @@ package org.maxgamer.QuickShop.Listeners; +import java.util.HashMap; + import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -25,8 +27,6 @@ import org.maxgamer.QuickShop.Shop.ShopType; import org.maxgamer.QuickShop.Util.MsgUtil; import org.maxgamer.QuickShop.Util.Util; -import java.util.HashMap; - public class PlayerListener implements Listener { private final QuickShop plugin; @@ -34,19 +34,15 @@ public class PlayerListener implements Listener { this.plugin = plugin; } - /** * Handles players left clicking a chest. Left click a NORMAL chest with * item : Send creation menu Left click a SHOP chest : Send purchase menu */ - @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onClick(final PlayerInteractEvent e) { final Block b = e.getClickedBlock(); final Player p = e.getPlayer(); - if (e.getAction() != Action.LEFT_CLICK_BLOCK || (e.getMaterial() == plugin.getConfigManager().getSuperItem() && (b.getType() == Material.WALL_SIGN || p.getGameMode() == GameMode.CREATIVE))) { - return; - } + if (e.getAction() != Action.LEFT_CLICK_BLOCK || p.getGameMode() == GameMode.CREATIVE) { return; } final Location loc = b.getLocation(); final ItemStack item = e.getItem(); // Get the shop @@ -151,13 +147,9 @@ public class PlayerListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onSuperItemClick(final PlayerInteractEvent e) { final Player p = e.getPlayer(); - if (p.getGameMode() != GameMode.SURVIVAL || e.getMaterial() != plugin.getConfigManager().getSuperItem()) { - return; - } + if (p.getGameMode() != GameMode.SURVIVAL || e.getMaterial() != plugin.getConfigManager().getSuperItem()) { return; } final Block b = e.getClickedBlock(); - if (b == null || b.getType() == null) { - return; - } + if (b == null || b.getType() == null) { return; } // If that wasn't a shop, search nearby shops if (b.getType() == Material.WALL_SIGN) { final Block attached = Util.getAttached(b); diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java b/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java index 2d45504..44b226c 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/Item/DisplayItem.java @@ -22,9 +22,9 @@ public abstract class DisplayItem { if (plugin.getConfigManager().isFakeItem()) { try { if (Integer.parseInt(ver.split("_")[1]) > 8) { - return new FakeItem_19_110(shop, shop.getItem()); + return new FakeItem_19_111(shop.getLocation(), shop.getItem()); } else { - return new FakeItem_17_18(shop, shop.getItem()); + return new FakeItem_17_18(shop.getLocation(), shop.getItem()); } } catch (final Throwable e) { Log.d(e); diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem.java b/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem.java index e8c59af..f420768 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem.java @@ -1,7 +1,11 @@ package org.maxgamer.QuickShop.Shop.Item; import java.lang.reflect.InvocationTargetException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -11,7 +15,6 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; -import org.maxgamer.QuickShop.Shop.ContainerShop; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; @@ -37,13 +40,12 @@ public abstract class FakeItem extends DisplayItem { protected final UUID uuid; protected boolean created = false; - public FakeItem(final ContainerShop containerShop, final ItemStack item) { + public FakeItem(Location loc, final ItemStack item) { this.itemStack = item; - this.location = containerShop.getLocation().clone().add(0.5, 1, 0.5); + this.location = loc.clone().add(0.5, 1, 0.5); this.eid = getFakeEntityId(); this.uuid = UUID.randomUUID(); } - public static boolean isRegistered() { return registered; } diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_17_18.java b/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_17_18.java index 09e8567..ca710c8 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_17_18.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_17_18.java @@ -3,8 +3,8 @@ package org.maxgamer.QuickShop.Shop.Item; import java.util.ArrayList; import java.util.List; +import org.bukkit.Location; import org.bukkit.inventory.ItemStack; -import org.maxgamer.QuickShop.Shop.ContainerShop; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; @@ -20,8 +20,8 @@ import com.comphenix.protocol.wrappers.WrappedWatchableObject; */ public class FakeItem_17_18 extends FakeItem { - public FakeItem_17_18(final ContainerShop containerShop, final ItemStack item) { - super(containerShop, item); + public FakeItem_17_18(Location loc, final ItemStack item) { + super(loc, item); } private static int getNormalizedDistance(final double value) { diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_19_110.java b/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_19_111.java similarity index 87% rename from src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_19_110.java rename to src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_19_111.java index 2a6f413..d7072d6 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_19_110.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/Item/FakeItem_19_111.java @@ -1,50 +1,50 @@ -package org.maxgamer.QuickShop.Shop.Item; - -import org.bukkit.inventory.ItemStack; -import org.maxgamer.QuickShop.Shop.ContainerShop; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.ProtocolLibrary; -import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.wrappers.WrappedDataWatcher; -import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer; -import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject; -import com.google.common.base.Optional; - -/** - * Minecraft 虚拟悬浮物品工具类 - * 需要depend ProtocolLib 4.x - * - * @author 橙子(chengzi) - * @version 1.1.0 - */ -public class FakeItem_19_110 extends FakeItem { - - public FakeItem_19_110(final ContainerShop containerShop, final ItemStack item) { - super(containerShop, item); - } - - @Override - protected PacketContainer getMetadataPacket() { - final PacketContainer fakePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); - fakePacket.getIntegers().write(0, eid); - final WrappedDataWatcher wr = new WrappedDataWatcher(); - final Serializer serializer = WrappedDataWatcher.Registry.getItemStackSerializer(true); - final WrappedDataWatcherObject object = new WrappedDataWatcher.WrappedDataWatcherObject(6, serializer); - wr.setObject(object, Optional.of(itemStack)); - fakePacket.getWatchableCollectionModifier().write(0, wr.getWatchableObjects()); - return fakePacket; - } - - @Override - protected PacketContainer getSpawnPacket() { - final PacketContainer fakePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SPAWN_ENTITY); - fakePacket.getIntegers().write(0, eid); - fakePacket.getModifier().write(1, uuid); - fakePacket.getDoubles().write(0, location.getX()); - fakePacket.getDoubles().write(1, location.getY()); - fakePacket.getDoubles().write(2, location.getZ()); - fakePacket.getIntegers().write(6, 2); - return fakePacket; - } -} +package org.maxgamer.QuickShop.Shop.Item; + +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer; +import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject; +import com.google.common.base.Optional; + +/** + * Minecraft 虚拟悬浮物品工具类 + * 需要depend ProtocolLib 4.x + * + * @author 橙子(chengzi) + * @version 1.1.0 + */ +public class FakeItem_19_111 extends FakeItem { + + public FakeItem_19_111(Location loc, final ItemStack item) { + super(loc, item); + } + + @Override + protected PacketContainer getMetadataPacket() { + final PacketContainer fakePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.ENTITY_METADATA); + fakePacket.getIntegers().write(0, eid); + final WrappedDataWatcher wr = new WrappedDataWatcher(); + final Serializer serializer = WrappedDataWatcher.Registry.getItemStackSerializer(true); + final WrappedDataWatcherObject object = new WrappedDataWatcher.WrappedDataWatcherObject(6, serializer); + wr.setObject(object, Optional.of(itemStack)); + fakePacket.getWatchableCollectionModifier().write(0, wr.getWatchableObjects()); + return fakePacket; + } + + @Override + protected PacketContainer getSpawnPacket() { + final PacketContainer fakePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.SPAWN_ENTITY); + fakePacket.getIntegers().write(0, eid); + fakePacket.getModifier().write(1, uuid); + fakePacket.getDoubles().write(0, location.getX()); + fakePacket.getDoubles().write(1, location.getY()); + fakePacket.getDoubles().write(2, location.getZ()); + fakePacket.getIntegers().write(6, 2); + return fakePacket; + } +}