Place barrier blocks within the shop npc hitboxes

This commit is contained in:
Sam 2017-12-28 13:57:18 +00:00 committed by Alexander Meech
parent c74a754a91
commit c478c8f413
1 changed files with 39 additions and 22 deletions

View File

@ -5,28 +5,31 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import mineplex.core.Managers; import mineplex.core.Managers;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.F; import mineplex.core.common.util.F;
import mineplex.core.common.util.MapUtil;
import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilMath;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.itemstack.ItemBuilder; import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.newnpc.NPC; import mineplex.core.newnpc.NPC;
import mineplex.core.newnpc.NewNPCManager; import mineplex.core.newnpc.NewNPCManager;
import mineplex.core.newnpc.event.NPCInteractEvent;
import mineplex.core.recharge.Recharge; import mineplex.core.recharge.Recharge;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; 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.CHESTPLATE, new ItemStack(Material.IRON_CHESTPLATE), 7),
new CakeShopItem(CakeShopItemType.LEGGINGS, new ItemStack(Material.IRON_LEGGINGS), 7), new CakeShopItem(CakeShopItemType.LEGGINGS, new ItemStack(Material.IRON_LEGGINGS), 7),
new CakeShopItem(CakeShopItemType.BOOTS, new ItemStack(Material.IRON_BOOTS), 5), new CakeShopItem(CakeShopItemType.BOOTS, new ItemStack(Material.IRON_BOOTS), 5),
// Sword // Sword
new CakeShopItem(CakeShopItemType.SWORD, new ItemStack(Material.IRON_SWORD), 5), 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()))); 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"); 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); _manager.addNPC(npc, false);
_npcs.put(npc, resource); _npcs.put(npc, resource);
} }
@ -194,43 +200,54 @@ public class CakeShopModule extends CakeModule
} }
@EventHandler @EventHandler
public void npcInteract(NPCInteractEvent event) public void npcInteract(PlayerInteractEvent event)
{ {
if (!_game.IsLive()) if (!_game.IsLive())
{ {
return; return;
} }
NPC npc = event.getNpc(); Block block = event.getClickedBlock();
CakeResource resource = _npcs.get(npc);
if (resource == null) if (block == null || block.getType() != Material.BARRIER)
{ {
return; return;
} }
event.setCancelled(true); 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<NPC, CakeResource> 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; 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 @EventHandler