Implement client side shop morphs
This commit is contained in:
parent
dea3297da7
commit
3b637ca600
@ -104,6 +104,8 @@ import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticType;
|
|||||||
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.GameModifierMineStrikeSkin;
|
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.GameModifierMineStrikeSkin;
|
||||||
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin;
|
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin;
|
||||||
import mineplex.core.gadget.gadgets.gamemodifiers.moba.HeroSkinGadget;
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.HeroSkinGadget;
|
||||||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.ShopMorphType;
|
||||||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
||||||
import mineplex.core.gadget.gadgets.hat.HatItem;
|
import mineplex.core.gadget.gadgets.hat.HatItem;
|
||||||
import mineplex.core.gadget.gadgets.hat.HatType;
|
import mineplex.core.gadget.gadgets.hat.HatType;
|
||||||
import mineplex.core.gadget.gadgets.item.ItemBatGun;
|
import mineplex.core.gadget.gadgets.item.ItemBatGun;
|
||||||
@ -768,6 +770,10 @@ public class GadgetManager extends MiniPlugin
|
|||||||
@Override
|
@Override
|
||||||
public void addGadgets()
|
public void addGadgets()
|
||||||
{
|
{
|
||||||
|
for (ShopMorphType type : ShopMorphType.values())
|
||||||
|
{
|
||||||
|
addGameGadget(new ShopMorphGadget(getManager(), this, type));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,13 @@ import java.util.Map.Entry;
|
|||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
import mineplex.core.MiniPlugin;
|
import mineplex.core.MiniPlugin;
|
||||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
|
import mineplex.core.gadget.event.GadgetChangeEvent;
|
||||||
|
import mineplex.core.gadget.event.GadgetChangeEvent.GadgetState;
|
||||||
|
import mineplex.core.gadget.types.Gadget;
|
||||||
import mineplex.core.gadget.types.GameModifierGadget;
|
import mineplex.core.gadget.types.GameModifierGadget;
|
||||||
import mineplex.core.game.GameDisplay;
|
import mineplex.core.game.GameDisplay;
|
||||||
|
|
||||||
@ -32,6 +36,33 @@ public class GameCosmeticManager extends MiniPlugin
|
|||||||
_cosmetics.put(type, cosmetics);
|
_cosmetics.put(type, cosmetics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void gadgetEquip(GadgetChangeEvent event)
|
||||||
|
{
|
||||||
|
if (event.getGadgetState() != GadgetState.ENABLED)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Gadget gadget = event.getGadget();
|
||||||
|
|
||||||
|
if (gadget instanceof GameModifierGadget)
|
||||||
|
{
|
||||||
|
GameCosmeticCategory category = ((GameModifierGadget) gadget).getCategory();
|
||||||
|
|
||||||
|
if (category.isAllowingMultiple())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disable all other gadgets if not allowing multiple.
|
||||||
|
category.getGadgets().stream()
|
||||||
|
.filter(gadget1 -> !gadget.equals(gadget1))
|
||||||
|
.forEach(gadget1 -> gadget.disable(event.getPlayer()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public GameModifierGadget getActiveCosmetic(Player player, GameDisplay gameType, String categoryName)
|
public GameModifierGadget getActiveCosmetic(Player player, GameDisplay gameType, String categoryName)
|
||||||
{
|
{
|
||||||
return getActiveCosmetic(player, gameType, categoryName, null);
|
return getActiveCosmetic(player, gameType, categoryName, null);
|
||||||
|
@ -0,0 +1,99 @@
|
|||||||
|
package mineplex.core.gadget.gadgets.gamemodifiers.moba;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
|
||||||
|
import mineplex.core.common.skin.SkinData;
|
||||||
|
import mineplex.core.common.util.UtilEnt;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseCow;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseLiving;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseMooshroom;
|
||||||
|
import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseSheep;
|
||||||
|
|
||||||
|
public enum ShopMorphType
|
||||||
|
{
|
||||||
|
|
||||||
|
SHEEP("Sheep", Material.MONSTER_EGG, UtilEnt.getEntityEggData(EntityType.SHEEP), DisguiseSheep.class),
|
||||||
|
COW("Cow", Material.MONSTER_EGG, UtilEnt.getEntityEggData(EntityType.COW), DisguiseCow.class),
|
||||||
|
MOOSHROOM("Mooshroom", Material.MONSTER_EGG, UtilEnt.getEntityEggData(EntityType.MUSHROOM_COW), DisguiseMooshroom.class),
|
||||||
|
BOB_ROSS("Bob Ross", Material.PAINTING, SkinData.BOB_ROSS)
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
private final String _name;
|
||||||
|
private final Material _material;
|
||||||
|
private final byte _materialData;
|
||||||
|
private final Class<? extends DisguiseLiving> _clazz;
|
||||||
|
private final SkinData _skinData;
|
||||||
|
|
||||||
|
ShopMorphType(String name, Material material, Class<? extends DisguiseLiving> clazz)
|
||||||
|
{
|
||||||
|
this(name, material, (byte) 0, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
ShopMorphType(String name, Material material, byte materialData, Class<? extends DisguiseLiving> clazz)
|
||||||
|
{
|
||||||
|
this(name, material, materialData, clazz, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
ShopMorphType(String name, Material material, SkinData skinData)
|
||||||
|
{
|
||||||
|
this(name, material, (byte) 0, DisguisePlayer.class, skinData);
|
||||||
|
}
|
||||||
|
|
||||||
|
ShopMorphType(String name, Material material, byte materialData, SkinData skinData)
|
||||||
|
{
|
||||||
|
this(name, material, materialData, DisguisePlayer.class, skinData);
|
||||||
|
}
|
||||||
|
|
||||||
|
ShopMorphType(String name, Material material, byte materialData, Class<? extends DisguiseLiving> clazz, SkinData skinData)
|
||||||
|
{
|
||||||
|
_name = name;
|
||||||
|
_material = material;
|
||||||
|
_materialData = materialData;
|
||||||
|
_clazz = clazz;
|
||||||
|
_skinData = skinData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DisguiseLiving createInstance(LivingEntity entity)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return _clazz.getConstructor(Entity.class).newInstance(entity);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Material getMaterial()
|
||||||
|
{
|
||||||
|
return _material;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getMaterialData()
|
||||||
|
{
|
||||||
|
return _materialData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class<? extends DisguiseLiving> getClazz()
|
||||||
|
{
|
||||||
|
return _clazz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SkinData getSkinData()
|
||||||
|
{
|
||||||
|
return _skinData;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.gadget.GadgetManager;
|
||||||
|
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory;
|
||||||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.ShopMorphType;
|
||||||
|
import mineplex.core.gadget.types.GameModifierGadget;
|
||||||
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
|
|
||||||
|
public class ShopMorphGadget extends GameModifierGadget
|
||||||
|
{
|
||||||
|
|
||||||
|
private final ShopMorphType _type;
|
||||||
|
|
||||||
|
public ShopMorphGadget(GadgetManager manager, GameCosmeticCategory category, ShopMorphType type)
|
||||||
|
{
|
||||||
|
this(manager, category, type, -2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopMorphGadget(GadgetManager manager, GameCosmeticCategory category, ShopMorphType type, int cost)
|
||||||
|
{
|
||||||
|
super(manager, category, type.getName(), new String[] {
|
||||||
|
C.cGray + "Changes the Gold Upgrades NPC",
|
||||||
|
C.cGray + "to " + (type.getSkinData() == null ? "a " + type.getName() : type.getName()) + ".",
|
||||||
|
}, cost, Material.GLASS, (byte) 0);
|
||||||
|
|
||||||
|
_type = type;
|
||||||
|
setDisplayItem(type.getSkinData() == null ? ItemStackFactory.Instance.CreateStack(type.getMaterial(), type.getMaterialData()) : type.getSkinData().getSkull());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShopMorphType getType()
|
||||||
|
{
|
||||||
|
return _type;
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,44 @@
|
|||||||
package nautilus.game.arcade.game.games.moba.shop;
|
package nautilus.game.arcade.game.games.moba.shop;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity;
|
||||||
|
import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
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.UtilAlg;
|
import mineplex.core.common.util.UtilAlg;
|
||||||
import mineplex.core.common.util.UtilEnt;
|
import mineplex.core.common.util.UtilEnt;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
||||||
|
import mineplex.core.game.GameDisplay;
|
||||||
|
import mineplex.core.packethandler.PacketHandler.ListenerPriority;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.minecraft.game.core.combat.CombatComponent;
|
import mineplex.minecraft.game.core.combat.CombatComponent;
|
||||||
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
|
||||||
import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent;
|
import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||||
import nautilus.game.arcade.events.PlayerGameRespawnEvent;
|
import nautilus.game.arcade.events.PlayerGameRespawnEvent;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
import nautilus.game.arcade.game.Game.GameState;
|
||||||
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
import nautilus.game.arcade.game.games.moba.Moba;
|
import nautilus.game.arcade.game.games.moba.Moba;
|
||||||
import nautilus.game.arcade.game.games.moba.MobaPlayer;
|
import nautilus.game.arcade.game.games.moba.MobaPlayer;
|
||||||
import nautilus.game.arcade.game.games.moba.MobaRole;
|
import nautilus.game.arcade.game.games.moba.MobaRole;
|
||||||
@ -26,34 +51,18 @@ import nautilus.game.arcade.game.games.moba.shop.hunter.MobaHunterShop;
|
|||||||
import nautilus.game.arcade.game.games.moba.shop.mage.MobaMageShop;
|
import nautilus.game.arcade.game.games.moba.shop.mage.MobaMageShop;
|
||||||
import nautilus.game.arcade.game.games.moba.shop.warrior.MobaWarriorShop;
|
import nautilus.game.arcade.game.games.moba.shop.warrior.MobaWarriorShop;
|
||||||
import nautilus.game.arcade.game.games.moba.util.MobaConstants;
|
import nautilus.game.arcade.game.games.moba.util.MobaConstants;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLivingEntity;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.Villager;
|
|
||||||
import org.bukkit.entity.Villager.Profession;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
public class MobaShop implements Listener
|
public class MobaShop implements Listener
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final String NPC_NAME = C.cGoldB + "GOLD UPGRADES";
|
||||||
|
static String getNPCName()
|
||||||
|
{
|
||||||
|
return NPC_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
private final Moba _host;
|
private final Moba _host;
|
||||||
private final Map<LivingEntity, Location> _entities;
|
private final Map<Player, MobaShopNPC> _entities;
|
||||||
private final Map<MobaRole, MobaShopMenu> _roleMenus;
|
private final Map<MobaRole, MobaShopMenu> _roleMenus;
|
||||||
private final Map<Player, List<MobaItem>> _upgrades;
|
private final Map<Player, List<MobaItem>> _upgrades;
|
||||||
|
|
||||||
@ -71,7 +80,7 @@ public class MobaShop implements Listener
|
|||||||
_roleMenus.put(MobaRole.MAGE, new MobaMageShop(host, this));
|
_roleMenus.put(MobaRole.MAGE, new MobaMageShop(host, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void spawnNpc(GameStateChangeEvent event)
|
public void spawnNpc(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
if (event.GetState() != GameState.Prepare)
|
if (event.GetState() != GameState.Prepare)
|
||||||
@ -79,90 +88,93 @@ public class MobaShop implements Listener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Location> locations = _host.WorldData.GetDataLocs(MobaConstants.SHOP);
|
ArrayList<Location> locations = _host.WorldData.GetDataLocs(MobaConstants.SHOP);
|
||||||
|
|
||||||
_host.CreatureAllowOverride = true;
|
_host.CreatureAllowOverride = true;
|
||||||
for (Location location : locations)
|
for (GameTeam team : _host.GetTeamList())
|
||||||
{
|
{
|
||||||
Villager villager = location.getWorld().spawn(location, Villager.class);
|
Location location = UtilAlg.findClosest(team.GetSpawn(), locations);
|
||||||
|
|
||||||
villager.setProfession(Profession.LIBRARIAN);
|
for (Player player : team.GetPlayers(true))
|
||||||
villager.setAgeLock(true);
|
{
|
||||||
villager.setRemoveWhenFarAway(false);
|
ArmorStand stand = location.getWorld().spawn(location, ArmorStand.class);
|
||||||
villager.setCustomName(C.cGoldB + "GOLD UPGRADES");
|
|
||||||
villager.setCustomNameVisible(true);
|
|
||||||
UtilEnt.vegetate(villager);
|
|
||||||
UtilEnt.silence(villager, true);
|
|
||||||
UtilEnt.ghost(villager, true, false);
|
|
||||||
UtilEnt.CreatureForceLook(villager, 0, UtilAlg.GetYaw(UtilAlg.getTrajectory(villager.getLocation(), _host.GetSpectatorLocation())));
|
|
||||||
((CraftLivingEntity) villager).getHandle().k = false;
|
|
||||||
|
|
||||||
_entities.put(villager, location);
|
stand.setRemoveWhenFarAway(false);
|
||||||
|
stand.setCustomName(getNPCName());
|
||||||
|
stand.setCustomNameVisible(true);
|
||||||
|
UtilEnt.vegetate(stand);
|
||||||
|
UtilEnt.silence(stand, true);
|
||||||
|
UtilEnt.ghost(stand, true, false);
|
||||||
|
UtilEnt.CreatureForceLook(stand, 0, UtilAlg.GetYaw(UtilAlg.getTrajectory(stand.getLocation(), _host.GetSpectatorLocation())));
|
||||||
|
|
||||||
|
ShopMorphGadget gadget = (ShopMorphGadget) _host.getArcadeManager().getCosmeticManager().getGadgetManager().getGameCosmeticManager().getActiveCosmetic(
|
||||||
|
player,
|
||||||
|
GameDisplay.MOBA,
|
||||||
|
"Shop Morph"
|
||||||
|
);
|
||||||
|
|
||||||
|
MobaShopNPC npc = new MobaShopNPC(this, player, stand, gadget);
|
||||||
|
|
||||||
|
_host.getArcadeManager().getPacketHandler().addPacketHandler(npc, ListenerPriority.NORMAL, false, PacketPlayInUseEntity.class, PacketPlayOutSpawnEntityLiving.class);
|
||||||
|
_entities.put(player, npc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_host.CreatureAllowOverride = false;
|
_host.CreatureAllowOverride = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openShop(MobaPlayer player)
|
@EventHandler
|
||||||
|
public void cleanup(GameStateChangeEvent event)
|
||||||
|
{
|
||||||
|
if (event.GetState() != GameState.End && event.GetState() != GameState.Dead)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_entities.forEach((player, npc) ->
|
||||||
|
{
|
||||||
|
_host.getArcadeManager().getPacketHandler().removePacketHandler(npc);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void openShop(Player player)
|
||||||
{
|
{
|
||||||
if (_host.GetState() != GameState.Live)
|
if (_host.GetState() != GameState.Live)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MobaShopMenu menu = _roleMenus.get(player.getRole());
|
MobaPlayer mobaPlayer = _host.getMobaData(player);
|
||||||
|
|
||||||
|
if (mobaPlayer == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MobaShopMenu menu = _roleMenus.get(mobaPlayer.getRole());
|
||||||
|
|
||||||
if (menu == null)
|
if (menu == null)
|
||||||
{
|
{
|
||||||
player.getPlayer().sendMessage(F.main("Game", "There isn't an upgrade shop for that kit yet."));
|
player.sendMessage(F.main("Game", "There isn't an upgrade shop for that kit yet."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.open(player.getPlayer());
|
menu.open(player);
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void npcMove(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.FASTEST)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Entry<LivingEntity, Location> entry : _entities.entrySet())
|
|
||||||
{
|
|
||||||
LivingEntity entity = entry.getKey();
|
|
||||||
Location location = entry.getValue();
|
|
||||||
|
|
||||||
((CraftEntity) entity).getHandle().setPosition(location.getX(), location.getY(), location.getZ());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void npcDamage(CustomDamageEvent event)
|
public void npcDamage(CustomDamageEvent event)
|
||||||
{
|
{
|
||||||
for (LivingEntity entity : _entities.keySet())
|
for (MobaShopNPC npc : _entities.values())
|
||||||
{
|
{
|
||||||
if (entity.equals(event.GetDamageeEntity()))
|
if (npc.getStand().equals(event.GetDamageeEntity()))
|
||||||
{
|
{
|
||||||
entity.setFireTicks(0);
|
npc.getStand().setFireTicks(0);
|
||||||
event.SetCancelled("Shop NPC");
|
event.SetCancelled("Shop NPC");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void entityDamage(EntityDamageByEntityEvent event)
|
|
||||||
{
|
|
||||||
npcInteract(event.getEntity(), event.getDamager());
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void entityInteract(PlayerInteractAtEntityEvent event)
|
|
||||||
{
|
|
||||||
npcInteract(event.getRightClicked(), event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void npcInteract(Entity clicked, Entity clicker)
|
private void npcInteract(Entity clicked, Entity clicker)
|
||||||
{
|
{
|
||||||
if (!(clicker instanceof Player) || UtilPlayer.isSpectator(clicker))
|
if (!(clicker instanceof Player) || UtilPlayer.isSpectator(clicker))
|
||||||
@ -176,15 +188,7 @@ public class MobaShop implements Listener
|
|||||||
{
|
{
|
||||||
if (clicked.equals(shop))
|
if (clicked.equals(shop))
|
||||||
{
|
{
|
||||||
MobaPlayer data = _host.getMobaData(player);
|
openShop(player);
|
||||||
|
|
||||||
if (data == null)
|
|
||||||
{
|
|
||||||
player.sendMessage(F.main("Game", "You don't appear to have any data?"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
openShop(data);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -298,14 +302,7 @@ public class MobaShop implements Listener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MobaPlayer mobaPlayer = _host.getMobaData(event.getPlayer());
|
openShop(event.getPlayer());
|
||||||
|
|
||||||
if (mobaPlayer == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
openShop(mobaPlayer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -571,4 +568,9 @@ public class MobaShop implements Listener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Moba getHost()
|
||||||
|
{
|
||||||
|
return _host;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ public class MobaShopCategoryMenu extends Menu<ArcadeManager>
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(Player player, ClickType clickType)
|
public void onClick(Player player, ClickType clickType)
|
||||||
{
|
{
|
||||||
_shop.openShop(_host.getMobaData(player));
|
_shop.openShop(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,107 @@
|
|||||||
|
package nautilus.game.arcade.game.games.moba.shop;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity;
|
||||||
|
import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
|
||||||
|
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
|
import mineplex.core.common.skin.SkinData;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseInsentient;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseLiving;
|
||||||
|
import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseVillager;
|
||||||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
||||||
|
import mineplex.core.packethandler.IPacketHandler;
|
||||||
|
import mineplex.core.packethandler.PacketInfo;
|
||||||
|
|
||||||
|
public class MobaShopNPC implements IPacketHandler
|
||||||
|
{
|
||||||
|
|
||||||
|
private final MobaShop _shop;
|
||||||
|
private final Player _player;
|
||||||
|
private final ArmorStand _stand;
|
||||||
|
private final ShopMorphGadget _gadget;
|
||||||
|
|
||||||
|
public MobaShopNPC(MobaShop shop, Player player, ArmorStand stand, ShopMorphGadget gadget)
|
||||||
|
{
|
||||||
|
_shop = shop;
|
||||||
|
_player = player;
|
||||||
|
_stand = stand;
|
||||||
|
_gadget = gadget;
|
||||||
|
|
||||||
|
disguise();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disguise()
|
||||||
|
{
|
||||||
|
DisguiseLiving disguise;
|
||||||
|
|
||||||
|
if (_gadget == null)
|
||||||
|
{
|
||||||
|
DisguiseVillager villager = new DisguiseVillager(_stand);
|
||||||
|
villager.setName(MobaShop.getNPCName());
|
||||||
|
villager.setCustomNameVisible(true);
|
||||||
|
disguise = villager;
|
||||||
|
}
|
||||||
|
else if (_gadget.getType().getSkinData() != null)
|
||||||
|
{
|
||||||
|
GameProfile profile = new GameProfile(UUID.randomUUID(), SkinData.getUnusedSkullName());
|
||||||
|
profile.getProperties().clear();
|
||||||
|
profile.getProperties().put("textures", _gadget.getType().getSkinData().getProperty());
|
||||||
|
|
||||||
|
DisguisePlayer player = new DisguisePlayer(_stand, profile);
|
||||||
|
player.setReplaceOriginalName(false, 0);
|
||||||
|
disguise = player;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DisguiseInsentient insentient = (DisguiseInsentient) _gadget.getType().createInstance(_stand);
|
||||||
|
|
||||||
|
if (insentient == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
insentient.setName(MobaShop.getNPCName());
|
||||||
|
insentient.setCustomNameVisible(true);
|
||||||
|
disguise = insentient;
|
||||||
|
}
|
||||||
|
|
||||||
|
_shop.getHost().getArcadeManager().GetDisguise().disguise(disguise);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(PacketInfo packetInfo)
|
||||||
|
{
|
||||||
|
Player player = packetInfo.getPlayer();
|
||||||
|
|
||||||
|
if (packetInfo.getPacket() instanceof PacketPlayOutSpawnEntityLiving && !player.equals(_player))
|
||||||
|
{
|
||||||
|
PacketPlayOutSpawnEntityLiving packet = (PacketPlayOutSpawnEntityLiving) packetInfo.getPacket();
|
||||||
|
|
||||||
|
if (packet.a == _stand.getEntityId())
|
||||||
|
{
|
||||||
|
packetInfo.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (packetInfo.getPacket() instanceof PacketPlayInUseEntity)
|
||||||
|
{
|
||||||
|
PacketPlayInUseEntity packet = (PacketPlayInUseEntity) packetInfo.getPacket();
|
||||||
|
|
||||||
|
if (packet.a == _stand.getEntityId())
|
||||||
|
{
|
||||||
|
_shop.openShop(packetInfo.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArmorStand getStand()
|
||||||
|
{
|
||||||
|
return _stand;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user