From c478c8f4135899446138f887175fc36f57053e99 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 28 Dec 2017 13:57:18 +0000 Subject: [PATCH] Place barrier blocks within the shop npc hitboxes --- .../games/cakewars/shop/CakeShopModule.java | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/shop/CakeShopModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/shop/CakeShopModule.java index 053fef75f..819fb5209 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/shop/CakeShopModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/cakewars/shop/CakeShopModule.java @@ -5,28 +5,31 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import mineplex.core.Managers; import mineplex.core.common.util.C; import mineplex.core.common.util.F; +import mineplex.core.common.util.MapUtil; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.newnpc.NPC; import mineplex.core.newnpc.NewNPCManager; -import mineplex.core.newnpc.event.NPCInteractEvent; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -77,7 +80,7 @@ public class CakeShopModule extends CakeModule new CakeShopItem(CakeShopItemType.CHESTPLATE, new ItemStack(Material.IRON_CHESTPLATE), 7), new CakeShopItem(CakeShopItemType.LEGGINGS, new ItemStack(Material.IRON_LEGGINGS), 7), new CakeShopItem(CakeShopItemType.BOOTS, new ItemStack(Material.IRON_BOOTS), 5), - + // Sword new CakeShopItem(CakeShopItemType.SWORD, new ItemStack(Material.IRON_SWORD), 5), @@ -181,6 +184,9 @@ public class CakeShopModule extends CakeModule location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory2d(location, cakeTeam.getShop()))); NPC npc = new NPC(-1, EntityType.VILLAGER, resource.getChatColor() + C.Bold + resource.getName() + " Shop", location, null, (byte) 0, null, null, null, null, "CAKE_NPC"); + MapUtil.QuickChangeBlockAt(location, Material.BARRIER); + MapUtil.QuickChangeBlockAt(location.clone().add(0, 1, 0), Material.BARRIER); + _manager.addNPC(npc, false); _npcs.put(npc, resource); } @@ -194,43 +200,54 @@ public class CakeShopModule extends CakeModule } @EventHandler - public void npcInteract(NPCInteractEvent event) + public void npcInteract(PlayerInteractEvent event) { if (!_game.IsLive()) { return; } - NPC npc = event.getNpc(); - CakeResource resource = _npcs.get(npc); + Block block = event.getClickedBlock(); - if (resource == null) + if (block == null || block.getType() != Material.BARRIER) { return; } event.setCancelled(true); - Player player = event.getPlayer(); + Location location = block.getLocation(); - if (UtilPlayer.isSpectator(player) || !Recharge.Instance.use(player, "Interact Shop", 500, false, false)) + for (Entry entry : _npcs.entrySet()) { + if (UtilMath.offset2dSquared(entry.getKey().getEntity().getLocation(), location) > 1) + { + continue; + } + + Player player = event.getPlayer(); + CakeResource resource = entry.getValue(); + + if (UtilPlayer.isSpectator(player) || !Recharge.Instance.use(player, "Interact Shop", 500, false, false)) + { + return; + } + + CakeResourcePage page; + + if (resource == CakeResource.STAR) + { + page = new CakeResourceStarPage(_game.getArcadeManager(), _shop, player); + } + else + { + page = new CakeResourcePage(_game.getArcadeManager(), _shop, player, resource, _items.get(resource)); + } + + page.refresh(); + _shop.openPageForPlayer(player, page); return; } - - CakeResourcePage page; - - if (resource == CakeResource.STAR) - { - page = new CakeResourceStarPage(_game.getArcadeManager(), _shop, player); - } - else - { - page = new CakeResourcePage(_game.getArcadeManager(), _shop, player, resource, _items.get(resource)); - } - - page.refresh(); - _shop.openPageForPlayer(player, page); } @EventHandler