Fix a lot of bugs
This commit is contained in:
parent
1c86cff6d7
commit
fd090a5644
|
@ -12,6 +12,7 @@ import net.minecraft.server.v1_8_R3.NBTTagInt;
|
||||||
import net.minecraft.server.v1_8_R3.TileEntity;
|
import net.minecraft.server.v1_8_R3.TileEntity;
|
||||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -29,7 +30,7 @@ import mineplex.core.common.block.DataLocationMap;
|
||||||
import mineplex.core.common.util.MapUtil;
|
import mineplex.core.common.util.MapUtil;
|
||||||
import mineplex.core.common.util.UtilBlock;
|
import mineplex.core.common.util.UtilBlock;
|
||||||
|
|
||||||
public class Schematic implements Cloneable
|
public class Schematic
|
||||||
{
|
{
|
||||||
private final short _width;
|
private final short _width;
|
||||||
private final short _height;
|
private final short _height;
|
||||||
|
@ -67,6 +68,11 @@ public class Schematic implements Cloneable
|
||||||
this(width, height, length, blocks, blockData, null);
|
this(width, height, length, blocks, blockData, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Schematic(Schematic schematic)
|
||||||
|
{
|
||||||
|
this(schematic.getWidth(), schematic.getHeight(), schematic.getLength(), schematic.getBlocks(), schematic.getBlockData(), schematic.getWorldEditOffset(), schematic.getTileEntities(), schematic.getEntities());
|
||||||
|
}
|
||||||
|
|
||||||
public SchematicData paste(Location originLocation)
|
public SchematicData paste(Location originLocation)
|
||||||
{
|
{
|
||||||
return paste(originLocation, false);
|
return paste(originLocation, false);
|
||||||
|
@ -269,21 +275,24 @@ public class Schematic implements Cloneable
|
||||||
/**
|
/**
|
||||||
* Rotates the schematic 180 degrees.
|
* Rotates the schematic 180 degrees.
|
||||||
*/
|
*/
|
||||||
public void rotate180()
|
public Schematic rotate180()
|
||||||
{
|
{
|
||||||
// Swap blocks around
|
// Swap blocks around
|
||||||
int area = _length * _width;
|
int area = _length * _width;
|
||||||
|
Bukkit.broadcastMessage("length=" + _length + " width=" + _width + " height=" + _height);
|
||||||
|
|
||||||
for (int height = 0; height < _height; height++)
|
for (int height = 0; height < _height; height++)
|
||||||
{
|
{
|
||||||
int middleIndex = (int) (area * height / 2D);
|
int startIndex = height * area;
|
||||||
|
int endIndex = (int) (startIndex + area / 2D);
|
||||||
|
Bukkit.broadcastMessage("startIndex=" + startIndex + " endIndex=" + endIndex);
|
||||||
|
|
||||||
for (int lower = 0; lower <= middleIndex; lower++)
|
for (int lower = startIndex; lower <= endIndex; lower++)
|
||||||
{
|
{
|
||||||
int upper = area - lower;
|
int upper = endIndex - lower;
|
||||||
|
|
||||||
short temp = _blocks[lower];
|
short temp = _blocks[lower];
|
||||||
byte tempData = _blockData[temp];
|
byte tempData = _blockData[lower];
|
||||||
|
|
||||||
_blocks[lower] = _blocks[upper];
|
_blocks[lower] = _blocks[upper];
|
||||||
_blocks[upper] = temp;
|
_blocks[upper] = temp;
|
||||||
|
@ -299,6 +308,8 @@ public class Schematic implements Cloneable
|
||||||
blockVector.setX(-blockVector.getX());
|
blockVector.setX(-blockVector.getX());
|
||||||
blockVector.setZ(-blockVector.getZ());
|
blockVector.setZ(-blockVector.getZ());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasWorldEditOffset()
|
public boolean hasWorldEditOffset()
|
||||||
|
@ -394,17 +405,4 @@ public class Schematic implements Cloneable
|
||||||
{
|
{
|
||||||
return String.format("Schematic [width: %d, length: %d, height: %d, blockLength: %d, blockDataLength: %d]", _width, _length, _height, _blocks.length, _blockData.length);
|
return String.format("Schematic [width: %d, length: %d, height: %d, blockLength: %d, blockDataLength: %d]", _width, _length, _height, _blocks.length, _blockData.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Schematic clone()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return (Schematic) super.clone();
|
|
||||||
}
|
|
||||||
catch (CloneNotSupportedException e)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +1,16 @@
|
||||||
package mineplex.core.disguise;
|
package mineplex.core.disguise;
|
||||||
|
|
||||||
import com.mineplex.spigot.ChunkAddEntityEvent;
|
import java.util.ArrayList;
|
||||||
import mineplex.core.MiniPlugin;
|
import java.util.HashMap;
|
||||||
import mineplex.core.PlayerSelector;
|
import java.util.HashSet;
|
||||||
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
import java.util.Iterator;
|
||||||
import mineplex.core.common.util.UtilLambda;
|
import java.util.LinkedList;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import java.util.List;
|
||||||
import mineplex.core.common.util.UtilServer;
|
import java.util.Map;
|
||||||
import mineplex.core.common.util.UtilTasks;
|
import java.util.Set;
|
||||||
import mineplex.core.disguise.disguises.DisguiseBase;
|
import java.util.UUID;
|
||||||
import mineplex.core.disguise.disguises.DisguiseBlock;
|
import java.util.function.Predicate;
|
||||||
import mineplex.core.disguise.disguises.DisguiseInsentient;
|
|
||||||
import mineplex.core.disguise.disguises.DisguiseLiving;
|
|
||||||
import mineplex.core.disguise.disguises.DisguisePlayer;
|
|
||||||
import mineplex.core.disguise.disguises.DisguiseSquid;
|
|
||||||
import mineplex.core.packethandler.IPacketHandler;
|
|
||||||
import mineplex.core.packethandler.PacketHandler;
|
|
||||||
import mineplex.core.packethandler.PacketInfo;
|
|
||||||
import mineplex.core.packethandler.PacketVerifier;
|
|
||||||
import mineplex.core.updater.UpdateType;
|
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
|
||||||
import net.minecraft.server.v1_8_R3.BlockBed;
|
import net.minecraft.server.v1_8_R3.BlockBed;
|
||||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||||
import net.minecraft.server.v1_8_R3.Blocks;
|
import net.minecraft.server.v1_8_R3.Blocks;
|
||||||
|
@ -30,7 +21,6 @@ import net.minecraft.server.v1_8_R3.EnumDirection;
|
||||||
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
import net.minecraft.server.v1_8_R3.MinecraftServer;
|
||||||
import net.minecraft.server.v1_8_R3.Packet;
|
import net.minecraft.server.v1_8_R3.Packet;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutBed;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutBed;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntity;
|
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityEquipment;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityMetadata;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityMetadata;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport;
|
||||||
|
@ -43,6 +33,7 @@ import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutUpdateAttributes;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutUpdateAttributes;
|
||||||
import net.minecraft.server.v1_8_R3.WorldServer;
|
import net.minecraft.server.v1_8_R3.WorldServer;
|
||||||
import net.minecraft.server.v1_8_R3.WorldSettings;
|
import net.minecraft.server.v1_8_R3.WorldSettings;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
@ -57,17 +48,32 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||||
|
import org.bukkit.scoreboard.NameTagVisibility;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import com.mineplex.spigot.ChunkAddEntityEvent;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
import mineplex.core.MiniPlugin;
|
||||||
import java.util.Iterator;
|
import mineplex.core.PlayerSelector;
|
||||||
import java.util.LinkedList;
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||||||
import java.util.List;
|
import mineplex.core.common.util.UtilLambda;
|
||||||
import java.util.Map;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import java.util.Set;
|
import mineplex.core.common.util.UtilServer;
|
||||||
import java.util.UUID;
|
import mineplex.core.common.util.UtilTasks;
|
||||||
import java.util.function.Predicate;
|
import mineplex.core.disguise.disguises.DisguiseBase;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseBlock;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseInsentient;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseLiving;
|
||||||
|
import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||||
|
import mineplex.core.disguise.disguises.DisguiseSquid;
|
||||||
|
import mineplex.core.hologram.HologramManager;
|
||||||
|
import mineplex.core.packethandler.IPacketHandler;
|
||||||
|
import mineplex.core.packethandler.PacketHandler;
|
||||||
|
import mineplex.core.packethandler.PacketInfo;
|
||||||
|
import mineplex.core.packethandler.PacketVerifier;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* notes: rabbit jump has been removed (PacketPlayOutEntityStatus) because it didn't work for 1.9+ anyways
|
* notes: rabbit jump has been removed (PacketPlayOutEntityStatus) because it didn't work for 1.9+ anyways
|
||||||
|
@ -77,16 +83,19 @@ import java.util.function.Predicate;
|
||||||
@ReflectivelyCreateMiniPlugin
|
@ReflectivelyCreateMiniPlugin
|
||||||
public class DisguiseManager extends MiniPlugin implements IPacketHandler
|
public class DisguiseManager extends MiniPlugin implements IPacketHandler
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final String HIDE_PLAYER_NAME_TEAM = "hiddenNPCS";
|
||||||
|
|
||||||
// A map of entityids which are disguised to their respective disguises
|
// A map of entityids which are disguised to their respective disguises
|
||||||
private Map<Integer, LinkedList<DisguiseBase>> _spawnPacketMap = new HashMap<>();
|
private final Map<Integer, LinkedList<DisguiseBase>> _spawnPacketMap = new HashMap<>();
|
||||||
|
|
||||||
// The map which stores entity UUIDs once they have been unloaded
|
// The map which stores entity UUIDs once they have been unloaded
|
||||||
private Map<UUID, LinkedList<DisguiseBase>> _entityDisguiseMap = new HashMap<>();
|
private final Map<UUID, LinkedList<DisguiseBase>> _entityDisguiseMap = new HashMap<>();
|
||||||
|
|
||||||
// The map of which players should a disguise be shown to
|
// The map of which players should a disguise be shown to
|
||||||
private Map<DisguiseBase, Predicate<Player>> _disguisePlayerMap = new HashMap<>();
|
private final Map<DisguiseBase, Predicate<Player>> _disguisePlayerMap = new HashMap<>();
|
||||||
|
|
||||||
private HashSet<String> _blockedNames = new HashSet<>();
|
private final HashSet<String> _blockedNames = new HashSet<>();
|
||||||
|
|
||||||
private boolean _handlingPacket = false;
|
private boolean _handlingPacket = false;
|
||||||
|
|
||||||
|
@ -282,6 +291,20 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
|
||||||
{
|
{
|
||||||
entityPlayer.playerConnection.networkManager.handle(add);
|
entityPlayer.playerConnection.networkManager.handle(add);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cleanup team entries
|
||||||
|
Scoreboard scoreboard = player.getScoreboard();
|
||||||
|
|
||||||
|
if (scoreboard != null)
|
||||||
|
{
|
||||||
|
Team team = scoreboard.getTeam(HIDE_PLAYER_NAME_TEAM);
|
||||||
|
|
||||||
|
if (team != null)
|
||||||
|
{
|
||||||
|
String name = ((DisguisePlayer) originalDisguise).getName();
|
||||||
|
team.getEntries().removeIf(name::equals);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -678,6 +701,69 @@ public class DisguiseManager extends MiniPlugin implements IPacketHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles hiding player disguises name tags if needed.
|
||||||
|
*/
|
||||||
|
@EventHandler
|
||||||
|
public void hideNames(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() != UpdateType.SEC)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_disguisePlayerMap.forEach((disguise, showTest) ->
|
||||||
|
{
|
||||||
|
// Not a player, not interested.
|
||||||
|
if (!(disguise instanceof DisguisePlayer))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DisguisePlayer disguisePlayer = (DisguisePlayer) disguise;
|
||||||
|
|
||||||
|
// Should show the name tag
|
||||||
|
if (!disguisePlayer.hasHologram())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For all players
|
||||||
|
Bukkit.getOnlinePlayers().forEach(player ->
|
||||||
|
{
|
||||||
|
// If the disguise is not to be shown
|
||||||
|
if (!showTest.test(player))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Scoreboard scoreboard = player.getScoreboard();
|
||||||
|
|
||||||
|
// Null scoreboard
|
||||||
|
if (scoreboard == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Team which all hidden players are placed in
|
||||||
|
Team team = scoreboard.getTeam(HIDE_PLAYER_NAME_TEAM);
|
||||||
|
|
||||||
|
// Team didn't exist
|
||||||
|
if (team == null)
|
||||||
|
{
|
||||||
|
team = scoreboard.registerNewTeam(HIDE_PLAYER_NAME_TEAM);
|
||||||
|
team.setNameTagVisibility(NameTagVisibility.NEVER);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!team.hasEntry(disguisePlayer.getName()))
|
||||||
|
{
|
||||||
|
// Add the name of the disguised player into the team
|
||||||
|
team.addEntry(disguisePlayer.getName());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public enum UndisguiseReason
|
public enum UndisguiseReason
|
||||||
{
|
{
|
||||||
EXPLICIT,
|
EXPLICIT,
|
||||||
|
|
|
@ -39,9 +39,13 @@ import org.bukkit.event.EventHandler;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
|
import mineplex.core.Managers;
|
||||||
import mineplex.core.common.skin.SkinData;
|
import mineplex.core.common.skin.SkinData;
|
||||||
import mineplex.core.common.util.UtilMath;
|
import mineplex.core.common.util.UtilMath;
|
||||||
import mineplex.core.disguise.playerdisguise.PlayerDisguiseManager;
|
import mineplex.core.disguise.playerdisguise.PlayerDisguiseManager;
|
||||||
|
import mineplex.core.hologram.Hologram;
|
||||||
|
import mineplex.core.hologram.Hologram.HologramTarget;
|
||||||
|
import mineplex.core.hologram.HologramManager;
|
||||||
import mineplex.core.thread.ThreadPool;
|
import mineplex.core.thread.ThreadPool;
|
||||||
import mineplex.core.utils.UtilGameProfile;
|
import mineplex.core.utils.UtilGameProfile;
|
||||||
|
|
||||||
|
@ -63,6 +67,7 @@ public class DisguisePlayer extends DisguiseHuman
|
||||||
private boolean _replaceOriginalName = true;
|
private boolean _replaceOriginalName = true;
|
||||||
private int _showInTabListDelay = 30;
|
private int _showInTabListDelay = 30;
|
||||||
private int _replaceOriginalNameDelay;
|
private int _replaceOriginalNameDelay;
|
||||||
|
private Hologram _hologram;
|
||||||
|
|
||||||
private DisguisePlayer(Entity entity)
|
private DisguisePlayer(Entity entity)
|
||||||
{
|
{
|
||||||
|
@ -254,7 +259,7 @@ public class DisguisePlayer extends DisguiseHuman
|
||||||
packet.c = MathHelper.floor(getEntity().locX * 32.0D);
|
packet.c = MathHelper.floor(getEntity().locX * 32.0D);
|
||||||
packet.d = MathHelper.floor(getEntity().locY * 32.0D);
|
packet.d = MathHelper.floor(getEntity().locY * 32.0D);
|
||||||
packet.e = MathHelper.floor(getEntity().locZ * 32.0D);
|
packet.e = MathHelper.floor(getEntity().locZ * 32.0D);
|
||||||
packet.f = (byte) ((int) ((getEntity().isFakeHead() ? getEntity().fakePitch : getEntity().pitch) * 256.0F / 360.0F));
|
packet.f = (byte) ((int) ((getEntity().isFakeHead() ? getEntity().fakeYaw : getEntity().yaw) * 256.0F / 360.0F));
|
||||||
packet.g = (byte) ((int) ((getEntity().isFakeHead() ? getEntity().fakePitch : getEntity().pitch) * 256.0F / 360.0F));
|
packet.g = (byte) ((int) ((getEntity().isFakeHead() ? getEntity().fakePitch : getEntity().pitch) * 256.0F / 360.0F));
|
||||||
packet.i = DataWatcher;
|
packet.i = DataWatcher;
|
||||||
|
|
||||||
|
@ -305,6 +310,11 @@ public class DisguisePlayer extends DisguiseHuman
|
||||||
update(entityPlayer);
|
update(entityPlayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasHologram())
|
||||||
|
{
|
||||||
|
_hologram.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -476,6 +486,22 @@ public class DisguisePlayer extends DisguiseHuman
|
||||||
this._replaceOriginalNameDelay = delay;
|
this._replaceOriginalNameDelay = delay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Hologram getHologram()
|
||||||
|
{
|
||||||
|
if (_hologram == null)
|
||||||
|
{
|
||||||
|
_hologram = new Hologram(Managers.require(HologramManager.class), getEntity().getBukkitEntity().getLocation().add(0, 1.75, 0), true)
|
||||||
|
.setRemoveOnEntityDeath();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _hologram;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasHologram()
|
||||||
|
{
|
||||||
|
return _hologram != null;
|
||||||
|
}
|
||||||
|
|
||||||
private UUID getOriginalUUID()
|
private UUID getOriginalUUID()
|
||||||
{
|
{
|
||||||
if (this._originalProfile.getProperties().containsKey(PlayerDisguiseManager.ORIGINAL_UUID_KEY))
|
if (this._originalProfile.getProperties().containsKey(PlayerDisguiseManager.ORIGINAL_UUID_KEY))
|
||||||
|
|
|
@ -90,12 +90,12 @@ public class EmblemGadget extends GameModifierGadget
|
||||||
{
|
{
|
||||||
Schematic schematic = _schematic;
|
Schematic schematic = _schematic;
|
||||||
|
|
||||||
if (inverse)
|
// if (inverse)
|
||||||
{
|
// {
|
||||||
schematic = _schematic.clone();
|
// schematic = new Schematic(schematic)
|
||||||
schematic.rotate180();
|
// .rotate180();
|
||||||
}
|
// }
|
||||||
|
|
||||||
return schematic.paste(location, true, true);
|
return schematic.paste(location.clone().add(0, schematic.getHeight() + 2, 0), true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,7 @@ import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
import mineplex.core.common.util.F;
|
|
||||||
import mineplex.core.common.util.UtilBlock;
|
import mineplex.core.common.util.UtilBlock;
|
||||||
import mineplex.core.common.util.UtilEnt;
|
|
||||||
import mineplex.core.common.util.UtilEvent.ActionType;
|
import mineplex.core.common.util.UtilEvent.ActionType;
|
||||||
import mineplex.core.common.util.UtilMath;
|
import mineplex.core.common.util.UtilMath;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
|
@ -68,13 +66,6 @@ public class SkillBoxingRing extends HeroSkill
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (!UtilEnt.isGrounded(player))
|
|
||||||
{
|
|
||||||
player.sendMessage(F.main("Game", "You cannot use " + F.skill(GetName()) + " while airborne."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Location location = player.getLocation().subtract(0, 1, 0);
|
Location location = player.getLocation().subtract(0, 1, 0);
|
||||||
byte colour = (byte) (Manager.GetGame().GetTeam(player).GetColor() == ChatColor.RED ? 14 : 11);
|
byte colour = (byte) (Manager.GetGame().GetTeam(player).GetColor() == ChatColor.RED ? 14 : 11);
|
||||||
// // Double Plants work by the bottom block having a data value, in this case 4, the top part of the plant has
|
// // Double Plants work by the bottom block having a data value, in this case 4, the top part of the plant has
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
package nautilus.game.arcade.game.games.moba.modes;
|
package nautilus.game.arcade.game.games.moba.modes;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import mineplex.core.common.util.UtilAlg;
|
|
||||||
import mineplex.core.gadget.gadgets.gamemodifiers.moba.emblems.EmblemGadget;
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.emblems.EmblemGadget;
|
||||||
import mineplex.core.game.GameDisplay;
|
import mineplex.core.game.GameDisplay;
|
||||||
|
|
||||||
|
@ -38,12 +36,9 @@ public class MobaMap implements Listener
|
||||||
|
|
||||||
for (GameTeam team : _host.GetTeamList())
|
for (GameTeam team : _host.GetTeamList())
|
||||||
{
|
{
|
||||||
List<Location> schematicSpawns = new ArrayList<>();
|
List<Location> schematicSpawns = _host.WorldData.GetCustomLocs("EMBLEM " + team.GetName().toUpperCase());
|
||||||
int index = 0;
|
int index = 0;
|
||||||
String key = "EMBLEM " + team.GetName().toUpperCase();
|
boolean inverse = team.GetColor() == ChatColor.RED;
|
||||||
|
|
||||||
schematicSpawns.addAll(_host.WorldData.GetCustomLocs(key));
|
|
||||||
schematicSpawns.addAll(_host.WorldData.GetCustomLocs(key + " R"));
|
|
||||||
|
|
||||||
for (Player player : team.GetPlayers(true))
|
for (Player player : team.GetPlayers(true))
|
||||||
{
|
{
|
||||||
|
@ -62,10 +57,8 @@ public class MobaMap implements Listener
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Location location = schematicSpawns.get(index++).add(0, 1, 0);
|
Location location = schematicSpawns.get(index++);
|
||||||
Vector direction = UtilAlg.getTrajectory(location, _host.GetSpectatorLocation());
|
gadget.buildAt(location, inverse);
|
||||||
|
|
||||||
gadget.buildAt(location, direction.getX() < 0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import mineplex.core.common.util.UtilAlg;
|
||||||
import mineplex.core.common.util.UtilEnt;
|
import mineplex.core.common.util.UtilEnt;
|
||||||
import mineplex.core.common.util.UtilServer;
|
import mineplex.core.common.util.UtilServer;
|
||||||
import mineplex.core.common.util.UtilTextMiddle;
|
import mineplex.core.common.util.UtilTextMiddle;
|
||||||
|
import mineplex.core.donation.Donor;
|
||||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||||
import nautilus.game.arcade.ArcadeFormat;
|
import nautilus.game.arcade.ArcadeFormat;
|
||||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||||
|
@ -20,6 +21,8 @@ import nautilus.game.arcade.game.games.moba.kit.HeroKit;
|
||||||
import nautilus.game.arcade.game.games.moba.prepare.PrepareSelection;
|
import nautilus.game.arcade.game.games.moba.prepare.PrepareSelection;
|
||||||
import nautilus.game.arcade.game.games.moba.progression.ui.MobaRoleShop;
|
import nautilus.game.arcade.game.games.moba.progression.ui.MobaRoleShop;
|
||||||
import nautilus.game.arcade.game.games.moba.util.MobaUtil;
|
import nautilus.game.arcade.game.games.moba.util.MobaUtil;
|
||||||
|
import nautilus.game.arcade.kit.Kit;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
|
@ -87,6 +90,44 @@ public class MobaProgression implements Listener
|
||||||
caller.sendMessage(F.main("Debug", "Set your " + role.getChatColor() + role.getName() + C.cGray + " level to " + F.elem(getLevel(exp) + 1) + "."));
|
caller.sendMessage(F.main("Debug", "Set your " + role.getChatColor() + role.getName() + C.cGray + " level to " + F.elem(getLevel(exp) + 1) + "."));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
host.registerDebugCommand(new DebugCommand("unlockhero", Rank.DEVELOPER)
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void Execute(Player caller, String[] args)
|
||||||
|
{
|
||||||
|
Donor donor = _host.getArcadeManager().GetDonation().Get(caller);
|
||||||
|
String input = args[0];
|
||||||
|
boolean all = input.equalsIgnoreCase("ALL");
|
||||||
|
|
||||||
|
for (HeroKit kit : _host.getKits())
|
||||||
|
{
|
||||||
|
if (all || kit.GetName().equalsIgnoreCase(input))
|
||||||
|
{
|
||||||
|
caller.sendMessage(F.main("Debug", "Unlocked " + F.name(kit.GetName()) + "."));
|
||||||
|
donor.addOwnedUnknownSalesPackage(getPackageName(kit));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
host.registerDebugCommand(new DebugCommand("lockhero", Rank.DEVELOPER)
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void Execute(Player caller, String[] args)
|
||||||
|
{
|
||||||
|
Donor donor = _host.getArcadeManager().GetDonation().Get(caller);
|
||||||
|
String input = args[0];
|
||||||
|
boolean all = input.equalsIgnoreCase("ALL");
|
||||||
|
|
||||||
|
for (HeroKit kit : _host.getKits())
|
||||||
|
{
|
||||||
|
if (all || kit.GetName().equalsIgnoreCase(input))
|
||||||
|
{
|
||||||
|
caller.sendMessage(F.main("Debug", "Locked " + F.name(kit.GetName()) + "."));
|
||||||
|
donor.removeOwnedUnknownSalesPackage(getPackageName(kit));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawnRoleViewers(Map<String, List<Location>> lobbyLocations)
|
public void spawnRoleViewers(Map<String, List<Location>> lobbyLocations)
|
||||||
|
|
|
@ -1,6 +1,25 @@
|
||||||
package nautilus.game.arcade.game.games.moba.progression;
|
package nautilus.game.arcade.game.games.moba.progression;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Color;
|
||||||
|
import org.bukkit.FireworkEffect;
|
||||||
|
import org.bukkit.FireworkEffect.Type;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Sound;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
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;
|
||||||
|
@ -14,26 +33,11 @@ import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||||
import mineplex.core.hologram.Hologram;
|
import mineplex.core.hologram.Hologram;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
import nautilus.game.arcade.game.games.moba.Moba;
|
import nautilus.game.arcade.game.games.moba.Moba;
|
||||||
import nautilus.game.arcade.game.games.moba.kit.HeroKit;
|
import nautilus.game.arcade.game.games.moba.kit.HeroKit;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import nautilus.game.arcade.managers.lobby.current.NewGameLobbyManager;
|
import nautilus.game.arcade.managers.lobby.current.NewGameLobbyManager;
|
||||||
import org.bukkit.Color;
|
|
||||||
import org.bukkit.FireworkEffect;
|
|
||||||
import org.bukkit.FireworkEffect.Type;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.entity.ArmorStand;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
|
||||||
import org.bukkit.util.Vector;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class MobaUnlockAnimation implements Listener
|
public class MobaUnlockAnimation implements Listener
|
||||||
{
|
{
|
||||||
|
@ -89,8 +93,8 @@ public class MobaUnlockAnimation implements Listener
|
||||||
GameProfile profile = new GameProfile(UUID.randomUUID(), _kit.GetName());
|
GameProfile profile = new GameProfile(UUID.randomUUID(), _kit.GetName());
|
||||||
profile.getProperties().clear();
|
profile.getProperties().clear();
|
||||||
profile.getProperties().put("textures", _kit.getSkinData().getProperty());
|
profile.getProperties().put("textures", _kit.getSkinData().getProperty());
|
||||||
|
|
||||||
DisguisePlayer disguise = new DisguisePlayer(_npcEntity, profile);
|
DisguisePlayer disguise = new DisguisePlayer(_npcEntity, profile);
|
||||||
disguise.setSendSkinDataToSelf(false);
|
|
||||||
_host.getArcadeManager().GetDisguise().disguise(disguise);
|
_host.getArcadeManager().GetDisguise().disguise(disguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +111,7 @@ public class MobaUnlockAnimation implements Listener
|
||||||
case 0:
|
case 0:
|
||||||
if (!UtilTime.elapsed(_start, 2000))
|
if (!UtilTime.elapsed(_start, 2000))
|
||||||
{
|
{
|
||||||
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, _npcEntity.getLocation().add(0, 1.5, 0), 1, 1, 1, 0.0001F, 50, ViewDist.NORMAL);
|
UtilParticle.PlayParticleToAll(ParticleType.CLOUD, _npcEntity.getLocation().add(0, 1.5, 0), 1, 1, 1, 0, 50, ViewDist.NORMAL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -139,7 +143,7 @@ public class MobaUnlockAnimation implements Listener
|
||||||
case 2:
|
case 2:
|
||||||
if (UtilTime.elapsed(_start, 12000))
|
if (UtilTime.elapsed(_start, 12000))
|
||||||
{
|
{
|
||||||
_player.sendMessage(F.main("Game", "Unlocked" + _kit.getRole().getChatColor() + _kit.GetName() + ". You can now select them at the start of the game!"));
|
_player.sendMessage(F.main("Game", "Unlocked " + F.name(_kit.getRole().getChatColor() + _kit.GetName()) + ". You can now select them at the start of the game!"));
|
||||||
_player.teleport(_spawn);
|
_player.teleport(_spawn);
|
||||||
_player.playSound(_player.getLocation(), Sound.LEVEL_UP, 1, 1.2F);
|
_player.playSound(_player.getLocation(), Sound.LEVEL_UP, 1, 1.2F);
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|
|
@ -5,13 +5,8 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
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.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.ArmorStand;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
@ -23,11 +18,9 @@ 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.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
||||||
import mineplex.core.game.GameDisplay;
|
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;
|
||||||
|
@ -81,41 +74,38 @@ public class MobaShop implements Listener
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void spawnNpc(GameStateChangeEvent event)
|
public void spawnNPC(GameStateChangeEvent event)
|
||||||
{
|
{
|
||||||
if (event.GetState() != GameState.Prepare)
|
if (event.GetState() != GameState.Prepare)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only spawn the NPCs once all players have been loaded into the world.
|
||||||
|
_host.getArcadeManager().runSyncLater(this::spawnShopNPCs, _host.GetPlayers(true).size() * _host.TickPerTeleport + 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void spawnShopNPCs()
|
||||||
|
{
|
||||||
ArrayList<Location> locations = _host.WorldData.GetDataLocs(MobaConstants.SHOP);
|
ArrayList<Location> locations = _host.WorldData.GetDataLocs(MobaConstants.SHOP);
|
||||||
|
|
||||||
_host.CreatureAllowOverride = true;
|
_host.CreatureAllowOverride = true;
|
||||||
for (GameTeam team : _host.GetTeamList())
|
for (GameTeam team : _host.GetTeamList())
|
||||||
{
|
{
|
||||||
Location location = UtilAlg.findClosest(team.GetSpawn(), locations);
|
Location location = UtilAlg.findClosest(team.GetSpawn(), locations);
|
||||||
|
location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, _host.GetSpectatorLocation())));
|
||||||
|
location.setPitch(0);
|
||||||
|
|
||||||
for (Player player : team.GetPlayers(true))
|
for (Player player : team.GetPlayers(true))
|
||||||
{
|
{
|
||||||
ArmorStand stand = location.getWorld().spawn(location, ArmorStand.class);
|
|
||||||
|
|
||||||
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(
|
ShopMorphGadget gadget = (ShopMorphGadget) _host.getArcadeManager().getCosmeticManager().getGadgetManager().getGameCosmeticManager().getActiveCosmetic(
|
||||||
player,
|
player,
|
||||||
GameDisplay.MOBA,
|
GameDisplay.MOBA,
|
||||||
"Shop Morph"
|
"Shop Morph"
|
||||||
);
|
);
|
||||||
|
|
||||||
MobaShopNPC npc = new MobaShopNPC(this, player, stand, gadget);
|
MobaShopNPC npc = new MobaShopNPC(this, player, location, gadget);
|
||||||
|
|
||||||
_host.getArcadeManager().getPacketHandler().addPacketHandler(npc, ListenerPriority.NORMAL, false, PacketPlayInUseEntity.class, PacketPlayOutSpawnEntityLiving.class);
|
|
||||||
_entities.put(player, npc);
|
_entities.put(player, npc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,7 +125,7 @@ public class MobaShop implements Listener
|
||||||
|
|
||||||
public void openShop(Player player)
|
public void openShop(Player player)
|
||||||
{
|
{
|
||||||
if (_host.GetState() != GameState.Live)
|
if (!_host.IsLive())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -172,25 +162,6 @@ public class MobaShop implements Listener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void npcInteract(Entity clicked, Entity clicker)
|
|
||||||
{
|
|
||||||
if (!(clicker instanceof Player) || UtilPlayer.isSpectator(clicker))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) clicker;
|
|
||||||
|
|
||||||
for (LivingEntity shop : _entities.keySet())
|
|
||||||
{
|
|
||||||
if (clicked.equals(shop))
|
|
||||||
{
|
|
||||||
openShop(player);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void purchaseItem(Player player, MobaItem item)
|
public void purchaseItem(Player player, MobaItem item)
|
||||||
{
|
{
|
||||||
List<MobaItem> owned = _upgrades.get(player);
|
List<MobaItem> owned = _upgrades.get(player);
|
||||||
|
|
|
@ -2,9 +2,13 @@ package nautilus.game.arcade.game.games.moba.shop;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import net.minecraft.server.v1_8_R3.Entity;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity;
|
import net.minecraft.server.v1_8_R3.PacketPlayInUseEntity;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutSpawnEntityLiving;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
|
||||||
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftHumanEntity;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Skeleton.SkeletonType;
|
import org.bukkit.entity.Skeleton.SkeletonType;
|
||||||
|
@ -12,6 +16,8 @@ import org.bukkit.entity.Skeleton.SkeletonType;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
import mineplex.core.common.skin.SkinData;
|
import mineplex.core.common.skin.SkinData;
|
||||||
|
import mineplex.core.common.util.UtilAlg;
|
||||||
|
import mineplex.core.common.util.UtilEnt;
|
||||||
import mineplex.core.disguise.disguises.DisguiseInsentient;
|
import mineplex.core.disguise.disguises.DisguiseInsentient;
|
||||||
import mineplex.core.disguise.disguises.DisguiseLiving;
|
import mineplex.core.disguise.disguises.DisguiseLiving;
|
||||||
import mineplex.core.disguise.disguises.DisguisePlayer;
|
import mineplex.core.disguise.disguises.DisguisePlayer;
|
||||||
|
@ -19,6 +25,7 @@ import mineplex.core.disguise.disguises.DisguiseSkeleton;
|
||||||
import mineplex.core.disguise.disguises.DisguiseVillager;
|
import mineplex.core.disguise.disguises.DisguiseVillager;
|
||||||
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
||||||
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType;
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType;
|
||||||
|
import mineplex.core.hologram.Hologram.HologramTarget;
|
||||||
import mineplex.core.packethandler.IPacketHandler;
|
import mineplex.core.packethandler.IPacketHandler;
|
||||||
import mineplex.core.packethandler.PacketInfo;
|
import mineplex.core.packethandler.PacketInfo;
|
||||||
|
|
||||||
|
@ -30,13 +37,23 @@ public class MobaShopNPC implements IPacketHandler
|
||||||
private final ArmorStand _stand;
|
private final ArmorStand _stand;
|
||||||
private final ShopMorphGadget _gadget;
|
private final ShopMorphGadget _gadget;
|
||||||
|
|
||||||
public MobaShopNPC(MobaShop shop, Player player, ArmorStand stand, ShopMorphGadget gadget)
|
public MobaShopNPC(MobaShop shop, Player player, Location location, ShopMorphGadget gadget)
|
||||||
{
|
{
|
||||||
_shop = shop;
|
_shop = shop;
|
||||||
_player = player;
|
_player = player;
|
||||||
_stand = stand;
|
|
||||||
_gadget = gadget;
|
_gadget = gadget;
|
||||||
|
|
||||||
|
shop.getHost().getArcadeManager().getPacketHandler().addPacketHandler(this, PacketPlayInUseEntity.class, PacketPlayOutSpawnEntityLiving.class);
|
||||||
|
|
||||||
|
_stand = location.getWorld().spawn(location, ArmorStand.class);
|
||||||
|
|
||||||
|
_stand.setRemoveWhenFarAway(false);
|
||||||
|
_stand.setCustomName(MobaShop.getNPCName());
|
||||||
|
_stand.setCustomNameVisible(true);
|
||||||
|
UtilEnt.vegetate(_stand);
|
||||||
|
UtilEnt.silence(_stand, true);
|
||||||
|
UtilEnt.ghost(_stand, true, false);
|
||||||
|
|
||||||
disguise();
|
disguise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,8 +75,18 @@ public class MobaShopNPC implements IPacketHandler
|
||||||
profile.getProperties().put("textures", _gadget.getType().getSkinData().getProperty());
|
profile.getProperties().put("textures", _gadget.getType().getSkinData().getProperty());
|
||||||
|
|
||||||
DisguisePlayer player = new DisguisePlayer(_stand, profile);
|
DisguisePlayer player = new DisguisePlayer(_stand, profile);
|
||||||
player.setReplaceOriginalName(false, 0);
|
player.getHologram()
|
||||||
|
.setHologramTarget(HologramTarget.WHITELIST)
|
||||||
|
.addPlayer(_player)
|
||||||
|
.setText(
|
||||||
|
MobaShop.getNPCName()
|
||||||
|
);
|
||||||
disguise = player;
|
disguise = player;
|
||||||
|
|
||||||
|
Location location = _stand.getLocation();
|
||||||
|
location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, _shop.getHost().GetSpectatorLocation())));
|
||||||
|
|
||||||
|
_shop.getHost().getArcadeManager().runSyncLater(() -> _stand.teleport(location), 20);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue