Finish adding all features to match PE Cake Wars
This commit is contained in:
parent
1721f7016c
commit
3fd18c1416
@ -3,7 +3,6 @@ package nautilus.game.arcade.game.games.cakewars;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
@ -15,7 +14,6 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
@ -25,6 +23,7 @@ import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.GameType;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.TeamGame;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeTeam;
|
||||
import nautilus.game.arcade.game.games.cakewars.kits.KitCakeArcher;
|
||||
import nautilus.game.arcade.game.games.cakewars.kits.KitCakeBuilder;
|
||||
import nautilus.game.arcade.game.games.cakewars.kits.KitCakeWarrior;
|
||||
@ -35,9 +34,11 @@ import nautilus.game.arcade.game.games.cakewars.module.CakeShopModule;
|
||||
import nautilus.game.arcade.game.games.cakewars.module.CakeSpawnerModule;
|
||||
import nautilus.game.arcade.game.games.cakewars.module.CakeTeamModule;
|
||||
import nautilus.game.arcade.game.modules.CustomScoreboardModule;
|
||||
import nautilus.game.arcade.game.modules.EnderPearlModule;
|
||||
import nautilus.game.arcade.game.modules.capturepoint.CapturePointModule;
|
||||
import nautilus.game.arcade.game.modules.chest.ChestLootModule;
|
||||
import nautilus.game.arcade.game.modules.chest.ChestLootPool;
|
||||
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
import nautilus.game.arcade.scoreboard.GameScoreboard;
|
||||
|
||||
@ -51,9 +52,21 @@ public class CakeWars extends TeamGame
|
||||
"Control the " + C.cAqua + "Beacons" + C.cWhite + " to get more resources.",
|
||||
"Last team standing wins!"
|
||||
};
|
||||
private static final String[] TIPS =
|
||||
{
|
||||
"Your teammates kit's appear next to their name or in the tab-list.",
|
||||
"Controlling the beacons is essential to victory.",
|
||||
"Watch out for other teams incase they try to rush your Cake!",
|
||||
"Controlling the middle beacon will spawn Nether-Stars at your base, these can be used to give your whole team a bonus.",
|
||||
"Controlling the outer beacons will spawn Emeralds at your base, these can be used to buy strong weapons and armor.",
|
||||
"Players will respawn as long as there cake hasn't been eaten."
|
||||
};
|
||||
private static final int RESPAWN_TIME = 6;
|
||||
|
||||
private final Map<GameTeam, Location> _averages;
|
||||
|
||||
private final CakeTeamModule _cakeTeamModule;
|
||||
private final CakeShopModule _cakeShopModule;
|
||||
private final ChestLootModule _chestLootModule;
|
||||
private final CustomScoreboardModule _customScoreboardModule;
|
||||
private final CapturePointModule _capturePointModule;
|
||||
@ -72,9 +85,7 @@ public class CakeWars extends TeamGame
|
||||
|
||||
BlockPlace = true;
|
||||
BlockBreak = true;
|
||||
QuitDropItems = true;
|
||||
DeathDropItems = true;
|
||||
DeathSpectateSecs = 5;
|
||||
DeathSpectateSecs = RESPAWN_TIME;
|
||||
StrictAntiHack = true;
|
||||
HungerSet = 20;
|
||||
InventoryClick = true;
|
||||
@ -82,9 +93,15 @@ public class CakeWars extends TeamGame
|
||||
InventoryOpenBlock = true;
|
||||
ItemDrop = true;
|
||||
ItemPickup = true;
|
||||
_help = TIPS;
|
||||
|
||||
new CakeTeamModule(this)
|
||||
.register();
|
||||
manager.GetCreature().SetDisableCustomDrops(true);
|
||||
|
||||
new CompassModule()
|
||||
.register(this);
|
||||
|
||||
_cakeTeamModule = new CakeTeamModule(this);
|
||||
_cakeTeamModule.register();
|
||||
|
||||
new CakeIslandModule(this)
|
||||
.register();
|
||||
@ -95,8 +112,8 @@ public class CakeWars extends TeamGame
|
||||
new CakeSpawnerModule(this)
|
||||
.register();
|
||||
|
||||
new CakeShopModule(this)
|
||||
.register();
|
||||
_cakeShopModule = new CakeShopModule(this);
|
||||
_cakeTeamModule.register();
|
||||
|
||||
_cakePointModule = new CakePointModule(this);
|
||||
_cakePointModule.register();
|
||||
@ -104,6 +121,9 @@ public class CakeWars extends TeamGame
|
||||
_capturePointModule = new CapturePointModule();
|
||||
_capturePointModule.register(this);
|
||||
|
||||
new EnderPearlModule()
|
||||
.register(this);
|
||||
|
||||
_chestLootModule = new ChestLootModule();
|
||||
|
||||
_customScoreboardModule = new CustomScoreboardModule()
|
||||
@ -148,9 +168,38 @@ public class CakeWars extends TeamGame
|
||||
{
|
||||
scoreboard.writeNewLine();
|
||||
|
||||
scoreboard.write("Hello World");
|
||||
scoreboard.write(player.getName());
|
||||
scoreboard.write("✓");
|
||||
GameTeam playerTeam = GetTeam(player);
|
||||
|
||||
scoreboard.write(C.cYellowB + "Teams");
|
||||
|
||||
for (GameTeam team : GetTeamList())
|
||||
{
|
||||
CakeTeam cakeTeam = _cakeTeamModule.getCakeTeam(team);
|
||||
boolean hasCake = cakeTeam != null && cakeTeam.canRespawn();
|
||||
String teamLine = "";
|
||||
|
||||
if (hasCake)
|
||||
{
|
||||
teamLine += C.cGreenB + "✓";
|
||||
}
|
||||
else if (!team.IsTeamAlive())
|
||||
{
|
||||
teamLine += C.cRedB + "✘";
|
||||
}
|
||||
else
|
||||
{
|
||||
teamLine += C.cGreen + team.GetPlayers(true).size();
|
||||
}
|
||||
|
||||
teamLine += " " + team.GetFormattedName();
|
||||
|
||||
if (playerTeam != null && playerTeam.equals(team))
|
||||
{
|
||||
teamLine += C.Reset + " " + C.cYellowB + "☀";
|
||||
}
|
||||
|
||||
scoreboard.write(teamLine);
|
||||
}
|
||||
|
||||
scoreboard.writeNewLine();
|
||||
}
|
||||
@ -232,25 +281,6 @@ public class CakeWars extends TeamGame
|
||||
return _averages.get(team);
|
||||
}
|
||||
|
||||
public GameTeam getClosest(Location location)
|
||||
{
|
||||
GameTeam closest = null;
|
||||
double closestDist = Double.MAX_VALUE;
|
||||
|
||||
for (Entry<GameTeam, Location> entry : _averages.entrySet())
|
||||
{
|
||||
double dist = UtilMath.offsetSquared(location, entry.getValue());
|
||||
|
||||
if (closest == null || dist < closestDist)
|
||||
{
|
||||
closest = entry.getKey();
|
||||
closestDist = dist;
|
||||
}
|
||||
}
|
||||
|
||||
return closest;
|
||||
}
|
||||
|
||||
public ChestLootModule getChestLootModule()
|
||||
{
|
||||
return _chestLootModule;
|
||||
@ -265,4 +295,14 @@ public class CakeWars extends TeamGame
|
||||
{
|
||||
return _cakePointModule;
|
||||
}
|
||||
|
||||
public CakeTeamModule getCakeTeamModule()
|
||||
{
|
||||
return _cakeTeamModule;
|
||||
}
|
||||
|
||||
public CakeShopModule getCakeShopModule()
|
||||
{
|
||||
return _cakeShopModule;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.data;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public interface CakeItem
|
||||
{
|
||||
|
||||
ItemStack getItemStack();
|
||||
|
||||
int getCost();
|
||||
|
||||
}
|
@ -12,7 +12,7 @@ import nautilus.game.arcade.game.games.cakewars.module.CakeSpawnerModule;
|
||||
public enum CakeResource
|
||||
{
|
||||
|
||||
BRICK("Brick", ChatColor.RED, new ItemStack(Material.CLAY_BRICK), UpdateType.TWOSEC)
|
||||
BRICK("Brick", ChatColor.RED, new ItemStack(Material.CLAY_BRICK), UpdateType.TWOSEC, 64)
|
||||
{
|
||||
|
||||
@Override
|
||||
@ -22,7 +22,7 @@ public enum CakeResource
|
||||
}
|
||||
|
||||
},
|
||||
EMERALD("Emerald", ChatColor.GREEN, new ItemStack(Material.EMERALD), UpdateType.SEC_05)
|
||||
EMERALD("Emerald", ChatColor.GREEN, new ItemStack(Material.EMERALD), UpdateType.SEC_05, 24)
|
||||
{
|
||||
|
||||
@Override
|
||||
@ -32,7 +32,7 @@ public enum CakeResource
|
||||
}
|
||||
|
||||
},
|
||||
STAR("Nether Star", ChatColor.GOLD, new ItemStack(Material.NETHER_STAR), UpdateType.SEC_08)
|
||||
STAR("Nether Star", ChatColor.GOLD, new ItemStack(Material.NETHER_STAR), UpdateType.SEC_08, 8)
|
||||
{
|
||||
|
||||
@Override
|
||||
@ -47,13 +47,15 @@ public enum CakeResource
|
||||
private final ChatColor _chatColor;
|
||||
private final ItemStack _itemStack;
|
||||
private final UpdateType _spawnerUpdate;
|
||||
private final int _maxSpawned;
|
||||
|
||||
CakeResource(String name, ChatColor chatColor, ItemStack itemStack, UpdateType spawnerUpdate)
|
||||
CakeResource(String name, ChatColor chatColor, ItemStack itemStack, UpdateType spawnerUpdate, int maxSpawned)
|
||||
{
|
||||
_name = name;
|
||||
_chatColor = chatColor;
|
||||
_itemStack = itemStack;
|
||||
_spawnerUpdate = spawnerUpdate;
|
||||
_maxSpawned = maxSpawned;
|
||||
}
|
||||
|
||||
public abstract void handleDistribution(CakeSpawnerModule module, GameTeam team);
|
||||
@ -77,4 +79,9 @@ public enum CakeResource
|
||||
{
|
||||
return _spawnerUpdate;
|
||||
}
|
||||
|
||||
public int getMaxSpawned()
|
||||
{
|
||||
return _maxSpawned;
|
||||
}
|
||||
}
|
||||
|
@ -2,30 +2,25 @@ package nautilus.game.arcade.game.games.cakewars.data;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CakeShopItem
|
||||
public class CakeShopItem implements CakeItem
|
||||
{
|
||||
|
||||
private final ItemStack _itemStack;
|
||||
private final CakeResource _resource;
|
||||
private final int _cost;
|
||||
|
||||
public CakeShopItem(ItemStack itemStack, CakeResource resource, int cost)
|
||||
public CakeShopItem(ItemStack itemStack, int cost)
|
||||
{
|
||||
_itemStack = itemStack;
|
||||
_resource = resource;
|
||||
_cost = cost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStack()
|
||||
{
|
||||
return _itemStack;
|
||||
}
|
||||
|
||||
public CakeResource getResource()
|
||||
{
|
||||
return _resource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCost()
|
||||
{
|
||||
return _cost;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -25,27 +24,33 @@ public class CakeTeam
|
||||
C.cGold + "Capture the beacons around the",
|
||||
C.cGold + "map to earn different resources!"
|
||||
};
|
||||
private static final String SHOP_HOLOGRAM_TEXT = C.cGold + "Click the NPCs to buy better gear!";
|
||||
private static final String CAKE_HOLOGRAM_TEXT = C.cGold + "Protect your cake at all costs!";
|
||||
|
||||
private final CakeWars _game;
|
||||
private final GameTeam _team;
|
||||
private final Location _edgeHologram;
|
||||
private final Location _shopHologram;
|
||||
private final Location _cake;
|
||||
private final List<Hologram> _holograms;
|
||||
private final Map<CakeTeamPowerup, Integer> _upgrades;
|
||||
private final Map<CakeTeamItem, Integer> _upgrades;
|
||||
|
||||
private Hologram _cakeHologram;
|
||||
|
||||
public CakeTeam(CakeWars game, GameTeam team, Location edgeHologram)
|
||||
public CakeTeam(CakeWars game, GameTeam team, Location edgeHologram, Location shopHologram)
|
||||
{
|
||||
_game = game;
|
||||
_team = team;
|
||||
_edgeHologram = edgeHologram.add(0, 2, 0);
|
||||
_shopHologram = shopHologram.add(0, 2, 0);
|
||||
|
||||
_cake = game.WorldData.GetDataLocs(team.GetName().toUpperCase()).get(0).getBlock().getLocation();
|
||||
_cake.getBlock().setType(Material.CAKE_BLOCK);
|
||||
_holograms = new ArrayList<>(3);
|
||||
_upgrades = new HashMap<>(CakeTeamPowerup.values().length);
|
||||
_upgrades = new HashMap<>(CakeTeamItem.values().length);
|
||||
|
||||
for (CakeTeamItem item : CakeTeamItem.values())
|
||||
{
|
||||
_upgrades.put(item, 0);
|
||||
}
|
||||
|
||||
setupHolograms();
|
||||
}
|
||||
@ -60,12 +65,30 @@ public class CakeTeam
|
||||
.addPlayers(teamPlayers)
|
||||
.start();
|
||||
|
||||
new Hologram(hologramManager, _shopHologram, SHOP_HOLOGRAM_TEXT)
|
||||
.setHologramTarget(HologramTarget.WHITELIST)
|
||||
.addPlayers(teamPlayers)
|
||||
.start();
|
||||
|
||||
_cakeHologram = new Hologram(hologramManager, _cake.clone().add(0.5, 1.3, 0.5), CAKE_HOLOGRAM_TEXT)
|
||||
.setHologramTarget(HologramTarget.WHITELIST)
|
||||
.addPlayers(teamPlayers)
|
||||
.start();
|
||||
}
|
||||
|
||||
public void applyUpgrades()
|
||||
{
|
||||
List<Player> alive = _team.GetPlayers(true);
|
||||
|
||||
_upgrades.forEach((item, level) ->
|
||||
{
|
||||
if (level > 0)
|
||||
{
|
||||
alive.forEach(player -> item.apply(player, level));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public boolean canRespawn()
|
||||
{
|
||||
return _cake.getBlock().getType() != Material.AIR;
|
||||
@ -76,13 +99,18 @@ public class CakeTeam
|
||||
return _cake;
|
||||
}
|
||||
|
||||
public List<Hologram> getHolograms()
|
||||
public GameTeam getGameTeam()
|
||||
{
|
||||
return _holograms;
|
||||
return _team;
|
||||
}
|
||||
|
||||
public Hologram getCakeHologram()
|
||||
{
|
||||
return _cakeHologram;
|
||||
}
|
||||
|
||||
public Map<CakeTeamItem, Integer> getUpgrades()
|
||||
{
|
||||
return _upgrades;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,119 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.data;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
|
||||
public enum CakeTeamItem implements CakeItem
|
||||
{
|
||||
|
||||
PROTECTION(
|
||||
"Protection",
|
||||
new ItemStack(Material.DIAMOND_CHESTPLATE),
|
||||
4,
|
||||
10
|
||||
)
|
||||
{
|
||||
@Override
|
||||
public void apply(Player player, int level)
|
||||
{
|
||||
for (ItemStack itemStack : player.getInventory().getArmorContents())
|
||||
{
|
||||
if (itemStack != null && itemStack.getType() != Material.AIR)
|
||||
{
|
||||
itemStack.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, level);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
HASTE(
|
||||
"Haste",
|
||||
new ItemStack(Material.GOLD_PICKAXE),
|
||||
4,
|
||||
10
|
||||
)
|
||||
{
|
||||
@Override
|
||||
public void apply(Player player, int level)
|
||||
{
|
||||
player.removePotionEffect(PotionEffectType.FAST_DIGGING);
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, Integer.MAX_VALUE, level - 1, true, false));
|
||||
}
|
||||
},
|
||||
SHARPNESS(
|
||||
"Sharpness",
|
||||
new ItemStack(Material.DIAMOND_SWORD),
|
||||
4,
|
||||
10
|
||||
)
|
||||
{
|
||||
@Override
|
||||
public void apply(Player player, int level)
|
||||
{
|
||||
for (ItemStack itemStack : player.getInventory().getContents())
|
||||
{
|
||||
if (UtilItem.isSword(itemStack))
|
||||
{
|
||||
itemStack.addEnchantment(Enchantment.DAMAGE_ALL, level);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RESOURCE(
|
||||
"Resource Generator",
|
||||
new ItemStack(Material.NETHER_STAR),
|
||||
4,
|
||||
10
|
||||
)
|
||||
{
|
||||
@Override
|
||||
public void apply(Player player, int level)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
private final String _name;
|
||||
private final ItemStack _itemStack;
|
||||
private final int[] _costs;
|
||||
|
||||
CakeTeamItem(String name, ItemStack itemStack, int... costs)
|
||||
{
|
||||
_name = name;
|
||||
_itemStack = new ItemBuilder(itemStack)
|
||||
.setTitle(name)
|
||||
.setGlow(true)
|
||||
.build();
|
||||
_costs = costs;
|
||||
}
|
||||
|
||||
public abstract void apply(Player player, int level);
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItemStack()
|
||||
{
|
||||
return _itemStack;
|
||||
}
|
||||
|
||||
public int[] getCosts()
|
||||
{
|
||||
return _costs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCost()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.data;
|
||||
|
||||
public enum CakeTeamPowerup
|
||||
{
|
||||
|
||||
PROTECTION("Protection", 2),
|
||||
SHARPNESS("Sharpness", 2),
|
||||
HASTE("Haste", 2),
|
||||
RESOURCE("Resource", 2);
|
||||
|
||||
private final String _name;
|
||||
private final int _max;
|
||||
|
||||
CakeTeamPowerup(String name, int max)
|
||||
{
|
||||
_name = name;
|
||||
_max = max;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
public int getMax()
|
||||
{
|
||||
return _max;
|
||||
}
|
||||
}
|
@ -8,6 +8,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
import mineplex.core.common.util.C;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.games.cakewars.kits.perk.PerkPassiveWoolGain;
|
||||
import nautilus.game.arcade.kit.KitAvailability;
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
import nautilus.game.arcade.kit.ProgressingKit;
|
||||
@ -19,11 +20,12 @@ public class KitCakeBuilder extends ProgressingKit
|
||||
{
|
||||
"Get extra blocks to build with!",
|
||||
"",
|
||||
"Spawn with an extra " + C.cGreen + "32" + C.cWhite + " blocks"
|
||||
"Receive " + C.cGreen + "1" + C.cWhite + " wool block every " + C.cGreen + "4" + C.cWhite + " seconds",
|
||||
};
|
||||
|
||||
private static final Perk[] PERKS =
|
||||
{
|
||||
new PerkPassiveWoolGain()
|
||||
};
|
||||
|
||||
private static final ItemStack IN_HAND = new ItemStack(Material.WOOL);
|
||||
|
@ -0,0 +1,42 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.kits.perk;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.kit.Perk;
|
||||
|
||||
public class PerkPassiveWoolGain extends Perk
|
||||
{
|
||||
|
||||
public PerkPassiveWoolGain()
|
||||
{
|
||||
super("Knitter");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void updateGain(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.SLOW || !Manager.GetGame().IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (Player player : Manager.GetGame().GetPlayers(true))
|
||||
{
|
||||
if (UtilPlayer.isSpectator(player) || !hasPerk(player))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack itemStack = new ItemStack(Material.WOOL, 1, (short) 0, Manager.GetGame().GetTeam(player).GetColorData());
|
||||
|
||||
player.getInventory().addItem(itemStack);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,38 +1,72 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.module;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.MapUtil;
|
||||
import mineplex.core.common.util.UtilBlock;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.events.PlayerKitGiveEvent;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||
|
||||
public class CakePlayerModule extends CakeModule
|
||||
{
|
||||
|
||||
static final ItemStack RUNE_OF_HOLDING = new ItemBuilder(Material.SKULL_ITEM, (byte) 1)
|
||||
.setTitle(C.cPurpleB + "Rune of Holding")
|
||||
.addLore("", "Preserves your inventory on death", "Uses: " + C.cRed + "1")
|
||||
.build();
|
||||
static final ItemStack DEPLOY_PLATFORM = new ItemBuilder(Material.INK_SACK, (byte) 11)
|
||||
.setTitle(C.cYellowB + "Deploy Platform")
|
||||
.addLore("", "Creates a platform of wool next to", "any block you click!", "Uses: " + C.cRed + "1")
|
||||
.build();
|
||||
private static final int PLATFORM_DELTA = 1;
|
||||
|
||||
private final Set<Block> _placedBlocks;
|
||||
// Used to store the inventory of a player when using the rune of holding
|
||||
// Inventory[0], Armour[1]
|
||||
private final Map<Player, ItemStack[][]> _storedInventory;
|
||||
|
||||
public CakePlayerModule(CakeWars game)
|
||||
{
|
||||
super(game);
|
||||
|
||||
_placedBlocks = new HashSet<>();
|
||||
_storedInventory = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanup()
|
||||
{
|
||||
_placedBlocks.clear();
|
||||
_storedInventory.clear();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -69,4 +103,140 @@ public class CakePlayerModule extends CakeModule
|
||||
event.getPlayer().sendMessage(F.main("Game", "You cannot break blocks that have not been placed by players."));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void holdingRunePlace(BlockPlaceEvent event)
|
||||
{
|
||||
if (event.getItemInHand().getType() == RUNE_OF_HOLDING.getType())
|
||||
{
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().sendMessage(F.main("Game", "You cannot place a " + F.name(RUNE_OF_HOLDING.getItemMeta().getDisplayName()) + "."));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void damage(CustomDamageEvent event)
|
||||
{
|
||||
Player player = event.GetDamageePlayer();
|
||||
|
||||
if (player == null || !UtilInv.contains(player, RUNE_OF_HOLDING.getType(), RUNE_OF_HOLDING.getData().getData(), 1))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
|
||||
_storedInventory.put(player, new ItemStack[][]
|
||||
{
|
||||
inventory.getContents(),
|
||||
inventory.getArmorContents()
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void playerDeath(PlayerDeathEvent event)
|
||||
{
|
||||
Player player = event.getEntity();
|
||||
|
||||
if (UtilInv.remove(player, RUNE_OF_HOLDING.getType(), RUNE_OF_HOLDING.getData().getData(), 1))
|
||||
{
|
||||
_game.getArcadeManager().runSyncLater(() ->
|
||||
{
|
||||
player.playSound(player.getLocation(), Sound.ENDERMAN_TELEPORT, 1, 0.8F);
|
||||
player.sendMessage(F.main("Game", "You consumed one " + F.name(RUNE_OF_HOLDING.getItemMeta().getDisplayName()) + ". You will respawn with your inventory."));
|
||||
}, 20);
|
||||
}
|
||||
else
|
||||
{
|
||||
_storedInventory.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void kitGiveItems(PlayerKitGiveEvent event)
|
||||
{
|
||||
if (!_game.IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack[][] storedInventory = _storedInventory.remove(player);
|
||||
|
||||
if (storedInventory != null)
|
||||
{
|
||||
_game.getArcadeManager().runSyncLater(() ->
|
||||
{
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
|
||||
inventory.setContents(storedInventory[0]);
|
||||
inventory.setArmorContents(storedInventory[1]);
|
||||
player.updateInventory();
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
_storedInventory.remove(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void playerInteractPlatform(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
ItemStack itemStack = player.getItemInHand();
|
||||
Block block = event.getClickedBlock();
|
||||
|
||||
if (UtilPlayer.isSpectator(player) || itemStack == null || !itemStack.isSimilar(DEPLOY_PLATFORM) || block == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BlockFace face = UtilBlock.getFace(player.getLocation().getYaw()).getOppositeFace();
|
||||
block = block.getRelative(face).getRelative(face);
|
||||
byte teamData = _game.GetTeam(player).GetColorData();
|
||||
boolean blockChanged = false;
|
||||
|
||||
for (int x = -PLATFORM_DELTA; x <= PLATFORM_DELTA; x++)
|
||||
{
|
||||
for (int z = -PLATFORM_DELTA; z <= PLATFORM_DELTA; z++)
|
||||
{
|
||||
Block nearby = block.getRelative(x, 0, z);
|
||||
|
||||
Location nearbyLocation = nearby.getLocation();
|
||||
|
||||
if (nearby.getType() != Material.AIR || _game.getCapturePointModule().isOnPoint(nearbyLocation) || _game.getCakeShopModule().isNearShop(nearbyLocation))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_placedBlocks.add(nearby);
|
||||
MapUtil.QuickChangeBlockAt(nearbyLocation, Material.WOOL, teamData);
|
||||
blockChanged = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (blockChanged)
|
||||
{
|
||||
player.setItemInHand(UtilInv.decrement(itemStack));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void itemCraft(CraftItemEvent event)
|
||||
{
|
||||
if (!_game.IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,11 @@ public class CakePointModule extends CakeModule
|
||||
@EventHandler
|
||||
public void blockPlace(BlockPlaceEvent event)
|
||||
{
|
||||
if (!_game.IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Location location = event.getBlock().getLocation();
|
||||
|
||||
for (CapturePoint point : _game.getCapturePointModule().getCapturePoints())
|
||||
|
@ -11,11 +11,15 @@ import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
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.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;
|
||||
@ -25,18 +29,22 @@ import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeItem;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeResource;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeShopItem;
|
||||
import nautilus.game.arcade.game.games.cakewars.ui.CakeResourcePage;
|
||||
import nautilus.game.arcade.game.games.cakewars.ui.CakeResourceShop;
|
||||
import nautilus.game.arcade.game.games.cakewars.ui.CakeResourceStarPage;
|
||||
|
||||
public class CakeShopModule extends CakeModule
|
||||
{
|
||||
|
||||
private static final int MIN_BLOCK_PLACE_DIST_SQUARED = 49;
|
||||
|
||||
private final NewNPCManager _manager;
|
||||
private final Map<NPC, CakeResource> _npcs;
|
||||
private final CakeResourceShop _shop;
|
||||
private final Map<CakeResource, List<CakeShopItem>> _items;
|
||||
private final Map<CakeResource, List<CakeItem>> _items;
|
||||
|
||||
public CakeShopModule(CakeWars game)
|
||||
{
|
||||
@ -52,44 +60,74 @@ public class CakeShopModule extends CakeModule
|
||||
// Iron Set
|
||||
new CakeShopItem(new ItemBuilder(Material.IRON_HELMET)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), CakeResource.BRICK, 5),
|
||||
.build(), 5),
|
||||
new CakeShopItem(new ItemBuilder(Material.IRON_CHESTPLATE)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), CakeResource.BRICK, 7),
|
||||
.build(), 7),
|
||||
new CakeShopItem(new ItemBuilder(Material.IRON_LEGGINGS)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), CakeResource.BRICK, 7),
|
||||
.build(), 7),
|
||||
new CakeShopItem(new ItemBuilder(Material.IRON_BOOTS)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), CakeResource.BRICK, 5),
|
||||
.build(), 5),
|
||||
|
||||
// Sword
|
||||
new CakeShopItem(new ItemStack(Material.DIAMOND_SWORD), CakeResource.BRICK, 5),
|
||||
new CakeShopItem(new ItemStack(Material.DIAMOND_SWORD), 5),
|
||||
|
||||
// Pickaxe
|
||||
new CakeShopItem(new ItemStack(Material.IRON_PICKAXE), CakeResource.BRICK, 3),
|
||||
new CakeShopItem(new ItemStack(Material.IRON_PICKAXE), 3),
|
||||
|
||||
// Arrow
|
||||
new CakeShopItem(new ItemStack(Material.ARROW, 3), CakeResource.BRICK, 6),
|
||||
new CakeShopItem(new ItemStack(Material.ARROW, 3), 6),
|
||||
|
||||
// Wool
|
||||
new CakeShopItem(new ItemStack(Material.WOOL, 20), CakeResource.BRICK, 3),
|
||||
new CakeShopItem(new ItemStack(Material.WOOL, 20), 3),
|
||||
|
||||
// Deploy Platform
|
||||
new CakeShopItem(CakePlayerModule.DEPLOY_PLATFORM, 5),
|
||||
|
||||
// Emerald
|
||||
new CakeShopItem(new ItemStack(Material.EMERALD), CakeResource.BRICK, 20)
|
||||
new CakeShopItem(new ItemStack(Material.EMERALD), 20)
|
||||
)
|
||||
);
|
||||
_items.put(CakeResource.EMERALD, Arrays.asList(
|
||||
|
||||
// Obsidian
|
||||
new CakeShopItem(new ItemStack(Material.OBSIDIAN), CakeResource.EMERALD, 5),
|
||||
new CakeShopItem(new ItemStack(Material.OBSIDIAN), 5),
|
||||
|
||||
// Pickaxe
|
||||
new CakeShopItem(new ItemStack(Material.DIAMOND_PICKAXE), CakeResource.EMERALD, 10)
|
||||
new CakeShopItem(new ItemStack(Material.DIAMOND_PICKAXE), 10),
|
||||
|
||||
));
|
||||
_items.put(CakeResource.STAR, Arrays.asList(
|
||||
// Sword
|
||||
new CakeShopItem(new ItemBuilder(Material.DIAMOND_SWORD)
|
||||
.addEnchantment(Enchantment.DAMAGE_ALL, 1)
|
||||
.build(), 10),
|
||||
|
||||
// Diamond Set
|
||||
new CakeShopItem(new ItemBuilder(Material.DIAMOND_HELMET)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), 10),
|
||||
new CakeShopItem(new ItemBuilder(Material.DIAMOND_CHESTPLATE)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), 20),
|
||||
new CakeShopItem(new ItemBuilder(Material.DIAMOND_LEGGINGS)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), 20),
|
||||
new CakeShopItem(new ItemBuilder(Material.DIAMOND_BOOTS)
|
||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||
.build(), 10),
|
||||
|
||||
// Rune of Holding
|
||||
new CakeShopItem(CakePlayerModule.RUNE_OF_HOLDING, 20),
|
||||
|
||||
// Shears
|
||||
new CakeShopItem(new ItemStack(Material.SHEARS), 5),
|
||||
|
||||
// Golden Apple
|
||||
new CakeShopItem(new ItemStack(Material.GOLDEN_APPLE), 5),
|
||||
|
||||
// Ender pearl
|
||||
new CakeShopItem(new ItemStack(Material.ENDER_PEARL), 5)
|
||||
|
||||
));
|
||||
}
|
||||
@ -130,6 +168,11 @@ public class CakeShopModule extends CakeModule
|
||||
@EventHandler
|
||||
public void npcInteract(NPCInteractEvent event)
|
||||
{
|
||||
if (!_game.IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NPC npc = event.getNpc();
|
||||
CakeResource resource = _npcs.get(npc);
|
||||
|
||||
@ -138,9 +181,51 @@ public class CakeShopModule extends CakeModule
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
event.setCancelled(true);
|
||||
_shop.openPageForPlayer(player, new CakeResourcePage(_game.getArcadeManager(), _shop, player, resource, _items.get(resource)));
|
||||
|
||||
Player player = event.getPlayer();
|
||||
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
|
||||
public void blockPlace(BlockPlaceEvent event)
|
||||
{
|
||||
if (!_game.IsLive() || UtilPlayer.isSpectator(event.getPlayer()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Location location = event.getBlock().getLocation();
|
||||
|
||||
if (isNearShop(location))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
event.getPlayer().sendMessage(F.main("Game", "You cannot place blocks that close to the Shop."));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isNearShop(Location location)
|
||||
{
|
||||
for (NPC npc : _npcs.keySet())
|
||||
{
|
||||
if (UtilMath.offsetSquared(location, npc.getEntity().getLocation()) < MIN_BLOCK_PLACE_DIST_SQUARED)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeResource;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeTeamItem;
|
||||
|
||||
public class CakeSpawnerModule extends CakeModule
|
||||
{
|
||||
@ -31,7 +32,6 @@ public class CakeSpawnerModule extends CakeModule
|
||||
.put("GREEN", "LIME")
|
||||
.put("YELLOW", "ORANGE")
|
||||
.build();
|
||||
private static final int MAX_ITEMS = 32;
|
||||
|
||||
public CakeSpawnerModule(CakeWars game)
|
||||
{
|
||||
@ -55,6 +55,11 @@ public class CakeSpawnerModule extends CakeModule
|
||||
|
||||
for (GameTeam team : _game.GetTeamList())
|
||||
{
|
||||
if (!team.IsTeamAlive())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
resource.handleDistribution(this, team);
|
||||
}
|
||||
}
|
||||
@ -67,7 +72,10 @@ public class CakeSpawnerModule extends CakeModule
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack itemStack = resource.getItemStack();
|
||||
amount += _game.getCakeTeamModule().getCakeTeam(team).getUpgrades().get(CakeTeamItem.RESOURCE);
|
||||
|
||||
ItemStack itemStack = resource.getItemStack().clone();
|
||||
itemStack.setAmount(amount);
|
||||
Location location = _game.WorldData.GetDataLocs(SPAWNER_CONVERTERS.get(team.GetName().toUpperCase())).get(0);
|
||||
boolean drop = true;
|
||||
List<Player> players = new ArrayList<>();
|
||||
@ -102,7 +110,7 @@ public class CakeSpawnerModule extends CakeModule
|
||||
{
|
||||
if (item != null)
|
||||
{
|
||||
item.getItemStack().setAmount(Math.min(item.getItemStack().getAmount() + 1, MAX_ITEMS));
|
||||
item.getItemStack().setAmount(Math.min(item.getItemStack().getAmount() + itemStack.getAmount(), resource.getMaxSpawned()));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -118,6 +126,7 @@ public class CakeSpawnerModule extends CakeModule
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
player.getInventory().addItem(itemStack);
|
||||
player.playSound(player.getLocation(), Sound.ITEM_PICKUP, 1, 1);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilAlg;
|
||||
@ -24,6 +25,7 @@ import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.events.PlayerDeathOutEvent;
|
||||
import nautilus.game.arcade.events.PlayerKitGiveEvent;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||
@ -34,6 +36,7 @@ public class CakeTeamModule extends CakeModule
|
||||
{
|
||||
|
||||
private static final int HOLOGRAM_VIEW_SQUARED = 16;
|
||||
private static final ItemStack STARTING_SWORD = new ItemStack(Material.WOOD_SWORD);
|
||||
|
||||
private final Map<GameTeam, CakeTeam> _teams;
|
||||
|
||||
@ -47,7 +50,6 @@ public class CakeTeamModule extends CakeModule
|
||||
@Override
|
||||
public void cleanup()
|
||||
{
|
||||
_teams.values().forEach(cakeTeam -> cakeTeam.getHolograms().forEach(Hologram::stop));
|
||||
_teams.clear();
|
||||
}
|
||||
|
||||
@ -61,6 +63,7 @@ public class CakeTeamModule extends CakeModule
|
||||
|
||||
WorldData worldData = _game.WorldData;
|
||||
List<Location> edgeHolograms = worldData.GetDataLocs("BLACK");
|
||||
List<Location> shopHolograms = worldData.GetDataLocs("GRAY");
|
||||
|
||||
_game.GetTeamList().forEach(team ->
|
||||
{
|
||||
@ -69,13 +72,19 @@ public class CakeTeamModule extends CakeModule
|
||||
return;
|
||||
}
|
||||
|
||||
Location average = _game.getAverageLocation(team);
|
||||
|
||||
_teams.put(team,
|
||||
new CakeTeam(
|
||||
_game,
|
||||
team,
|
||||
UtilAlg.findClosest(
|
||||
_game.getAverageLocation(team),
|
||||
average,
|
||||
edgeHolograms
|
||||
),
|
||||
UtilAlg.findClosest(
|
||||
average,
|
||||
shopHolograms
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -98,7 +107,7 @@ public class CakeTeamModule extends CakeModule
|
||||
|
||||
for (Player player : team.GetPlayers(false))
|
||||
{
|
||||
if (!player.isOnline() || !team.IsAlive(player) || UtilMath.offsetSquared(player.getLocation(), location) < HOLOGRAM_VIEW_SQUARED)
|
||||
if (!player.isOnline() || !team.IsAlive(player) || !cakeTeam.canRespawn() || UtilMath.offsetSquared(player.getLocation(), location) < HOLOGRAM_VIEW_SQUARED)
|
||||
{
|
||||
hologram.removePlayer(player);
|
||||
}
|
||||
@ -160,7 +169,7 @@ public class CakeTeamModule extends CakeModule
|
||||
block.setType(Material.AIR);
|
||||
|
||||
_game.AddGems(player, 20, "Cakes Eaten", true, true);
|
||||
playerTeam.GetPlayers(true).forEach(other -> _game.AddGems(player, 2, "Team Cakes Eaten", true, true));
|
||||
playerTeam.GetPlayers(true).forEach(other -> _game.AddGems(player, 2, "Cakes Eaten", true, true));
|
||||
|
||||
_game.Announce(F.main("Game", F.name(team.GetFormattedName()) + "'s Cake was eaten by " + F.name(playerTeam.GetColor() + player.getName()) + "! They can no longer respawn."));
|
||||
UtilTextMiddle.display(team.GetColor() + "CAKE EATEN", "You can no longer respawn", 10, 30, 10, team.GetPlayers(true).toArray(new Player[0]));
|
||||
@ -180,4 +189,29 @@ public class CakeTeamModule extends CakeModule
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void kitGiveItems(PlayerKitGiveEvent event)
|
||||
{
|
||||
if (!_game.IsLive())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
player.getInventory().addItem(STARTING_SWORD);
|
||||
|
||||
_teams.get(_game.GetTeam(player)).getUpgrades().forEach((item, level) ->
|
||||
{
|
||||
if (level > 0)
|
||||
{
|
||||
item.apply(player, level);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public CakeTeam getCakeTeam(GameTeam team)
|
||||
{
|
||||
return _teams.get(team);
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package nautilus.game.arcade.game.games.cakewars.ui;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -10,81 +11,107 @@ import org.bukkit.inventory.ItemStack;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.shop.item.IButton;
|
||||
import mineplex.core.shop.page.ShopPageBase;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeItem;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeResource;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeShopItem;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeTeam;
|
||||
|
||||
public class CakeResourcePage extends ShopPageBase<ArcadeManager, CakeResourceShop>
|
||||
{
|
||||
|
||||
private final List<CakeShopItem> _items;
|
||||
private final byte _teamData;
|
||||
private static final ItemStack CLOSE_ITEM = new ItemBuilder(Material.BARRIER)
|
||||
.setTitle(C.cRedB + "Close")
|
||||
.build();
|
||||
|
||||
public CakeResourcePage(ArcadeManager plugin, CakeResourceShop shop, Player player, CakeResource resource, List<CakeShopItem> items)
|
||||
final CakeResource _resource;
|
||||
final List<CakeItem> _items;
|
||||
private final GameTeam _team;
|
||||
|
||||
public CakeResourcePage(ArcadeManager plugin, CakeResourceShop shop, Player player, CakeResource resource, List<CakeItem> items)
|
||||
{
|
||||
super(plugin, shop, plugin.GetClients(), plugin.GetDonation(), resource.getName() + " Shop", player, 27);
|
||||
|
||||
_resource = resource;
|
||||
_items = items;
|
||||
_teamData = plugin.GetGame().GetTeam(player).GetColorData();
|
||||
|
||||
buildPage();
|
||||
_team = plugin.GetGame().GetTeam(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildPage()
|
||||
{
|
||||
addCloseButton();
|
||||
|
||||
int slot = 10;
|
||||
|
||||
for (CakeShopItem item : _items)
|
||||
for (CakeItem item : _items)
|
||||
{
|
||||
addButton(slot++, prepareItem(item), new CakeShopButton(item));
|
||||
addButton(slot, prepareItem(item), new CakeShopButton(item));
|
||||
|
||||
if (slot % 9 == 0)
|
||||
if (++slot % 9 == 8)
|
||||
{
|
||||
slot += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack prepareItem(CakeShopItem item)
|
||||
void addCloseButton()
|
||||
{
|
||||
addButton(4, CLOSE_ITEM, (player, clickType) -> player.closeInventory());
|
||||
}
|
||||
|
||||
ItemStack prepareItem(CakeItem item)
|
||||
{
|
||||
ItemBuilder builder = new ItemBuilder(item.getItemStack());
|
||||
boolean canPurchase = canPurchase(_player, item);
|
||||
|
||||
builder.setTitle((canPurchase ? C.cGreen : C.cRed) + ItemStackFactory.Instance.GetName(item.getItemStack(), true));
|
||||
builder.setTitle(getItemName(item.getItemStack()));
|
||||
builder.addLore(
|
||||
"",
|
||||
"Cost: " + item.getResource().getChatColor() + item.getCost() + " " + item.getResource().getName() + "s",
|
||||
"Cost: " + _resource.getChatColor() + item.getCost() + " " + _resource.getName() + "s",
|
||||
"",
|
||||
canPurchase ? C.cGreen + "Click to purchase!" : C.cRed + "You do not have enough resources!"
|
||||
);
|
||||
|
||||
if (builder.getType() == Material.WOOL)
|
||||
{
|
||||
builder.setData(_teamData);
|
||||
builder.setData(_team.GetColorData());
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private boolean canPurchase(Player player, CakeShopItem item)
|
||||
boolean canPurchase(Player player, CakeItem item)
|
||||
{
|
||||
ItemStack resource = item.getResource().getItemStack();
|
||||
ItemStack resource = _resource.getItemStack();
|
||||
|
||||
return UtilInv.contains(player, resource.getType(), resource.getData().getData(), item.getCost());
|
||||
}
|
||||
|
||||
String getItemName(ItemStack itemStack)
|
||||
{
|
||||
if (itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName())
|
||||
{
|
||||
return itemStack.getItemMeta().getDisplayName();
|
||||
}
|
||||
|
||||
return ItemStackFactory.Instance.GetName(itemStack, true);
|
||||
}
|
||||
|
||||
private class CakeShopButton implements IButton
|
||||
{
|
||||
|
||||
private final CakeShopItem _item;
|
||||
private final CakeItem _item;
|
||||
|
||||
CakeShopButton(CakeShopItem item)
|
||||
CakeShopButton(CakeItem item)
|
||||
{
|
||||
_item = item;
|
||||
}
|
||||
@ -92,21 +119,54 @@ public class CakeResourcePage extends ShopPageBase<ArcadeManager, CakeResourceSh
|
||||
@Override
|
||||
public void onClick(Player player, ClickType clickType)
|
||||
{
|
||||
ItemStack resource = _item.getResource().getItemStack();
|
||||
if (!Recharge.Instance.use(player, "Buy Item", 200, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack resource = _resource.getItemStack();
|
||||
ItemStack give = _item.getItemStack();
|
||||
|
||||
if (UtilInv.remove(player, resource.getType(), resource.getData().getData(), _item.getCost()))
|
||||
{
|
||||
give = give.clone();
|
||||
give.getData().setData(_teamData);
|
||||
if (give.getType() == Material.WOOL)
|
||||
{
|
||||
give = new ItemBuilder(give)
|
||||
.setData(_team.GetColorData())
|
||||
.build();
|
||||
}
|
||||
|
||||
UtilInv.insert(player, give);
|
||||
player.sendMessage(F.main("Game", "You purchased " + F.count(give.getAmount()) + " " + F.name(ItemStackFactory.Instance.GetName(give, true))));
|
||||
if (UtilItem.isHelmet(give))
|
||||
{
|
||||
player.getInventory().setHelmet(give);
|
||||
}
|
||||
else if (UtilItem.isChestplate(give))
|
||||
{
|
||||
player.getInventory().setChestplate(give);
|
||||
}
|
||||
else if (UtilItem.isLeggings(give))
|
||||
{
|
||||
player.getInventory().setLeggings(give);
|
||||
}
|
||||
else if (UtilItem.isBoots(give))
|
||||
{
|
||||
player.getInventory().setBoots(give);
|
||||
}
|
||||
else
|
||||
{
|
||||
UtilInv.insert(player, give);
|
||||
}
|
||||
|
||||
CakeTeam cakeTeam = ((CakeWars) _plugin.GetGame()).getCakeTeamModule().getCakeTeam(_team);
|
||||
cakeTeam.applyUpgrades();
|
||||
|
||||
player.sendMessage(F.main("Game", "You purchased " + F.count(give.getAmount()) + " " + F.name(getItemName(give))) + ".");
|
||||
playAcceptSound(player);
|
||||
refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendMessage(F.main("Game", "You do not have enough " + F.name(_item.getResource().getName() + "s") + " to purchase this item."));
|
||||
player.sendMessage(F.main("Game", "You do not have enough " + F.name(_resource.getName() + "s") + " to purchase this item."));
|
||||
playDenySound(player);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,144 @@
|
||||
package nautilus.game.arcade.game.games.cakewars.ui;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilText;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.shop.item.IButton;
|
||||
|
||||
import nautilus.game.arcade.ArcadeManager;
|
||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeItem;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeResource;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeTeam;
|
||||
import nautilus.game.arcade.game.games.cakewars.data.CakeTeamItem;
|
||||
|
||||
public class CakeResourceStarPage extends CakeResourcePage
|
||||
{
|
||||
|
||||
private final CakeTeam _cakeTeam;
|
||||
|
||||
public CakeResourceStarPage(ArcadeManager plugin, CakeResourceShop shop, Player player)
|
||||
{
|
||||
super(plugin, shop, player, CakeResource.STAR, Arrays.asList(CakeTeamItem.values()));
|
||||
|
||||
CakeWars game = (CakeWars) plugin.GetGame();
|
||||
|
||||
_cakeTeam = game.getCakeTeamModule().getCakeTeam(game.GetTeam(player));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildPage()
|
||||
{
|
||||
addCloseButton();
|
||||
|
||||
int slot = 10;
|
||||
|
||||
for (CakeItem item : _items)
|
||||
{
|
||||
addButton(slot++, prepareItem(item), new CakeTeamItemButton((CakeTeamItem) item));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
ItemStack prepareItem(CakeItem item)
|
||||
{
|
||||
CakeTeamItem teamItem = (CakeTeamItem) item;
|
||||
ItemBuilder builder = new ItemBuilder(item.getItemStack());
|
||||
int level = _cakeTeam.getUpgrades().get(item);
|
||||
boolean canPurchase = canPurchase(_player, teamItem, level);
|
||||
boolean maxTier = teamItem.getCosts().length == level;
|
||||
|
||||
builder.setTitle(C.mItem + teamItem.getName() + (maxTier ? "" : " " + UtilText.toRomanNumeral(level + 1)));
|
||||
|
||||
if (maxTier)
|
||||
{
|
||||
builder.addLore("", C.cRed + "You have already purchased the maximum", C.cRed + "tier for this upgrade.");
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.addLore(
|
||||
"",
|
||||
"Cost: " + _resource.getChatColor() + teamItem.getCosts()[level] + " " + _resource.getName() + "s",
|
||||
"",
|
||||
canPurchase ? C.cGreen + "Click to purchase!" : C.cRed + "You do not have enough resources!"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private boolean canPurchase(Player player, CakeTeamItem item, int level)
|
||||
{
|
||||
if (item.getCosts().length <= level)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemStack resource = _resource.getItemStack();
|
||||
|
||||
return UtilInv.contains(player, resource.getType(), resource.getData().getData(), item.getCosts()[level]);
|
||||
}
|
||||
|
||||
private class CakeTeamItemButton implements IButton
|
||||
{
|
||||
|
||||
private final CakeTeamItem _item;
|
||||
private final int _level;
|
||||
|
||||
CakeTeamItemButton(CakeTeamItem item)
|
||||
{
|
||||
_item = item;
|
||||
_level = _cakeTeam.getUpgrades().get(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(Player player, ClickType clickType)
|
||||
{
|
||||
if (!Recharge.Instance.use(player, "Buy Team Upgrade", 200, false, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack resource = _resource.getItemStack();
|
||||
|
||||
if (_item.getCosts().length == _level)
|
||||
{
|
||||
player.sendMessage(F.main("Game", "You have already purchased the maximum tier for this upgrade."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (UtilInv.remove(player, resource.getType(), resource.getData().getData(), _item.getCosts()[_level]))
|
||||
{
|
||||
int newLevel = _level + 1;
|
||||
String message = F.main("Game", F.color(_player.getName(), _cakeTeam.getGameTeam().GetColor().toString()) + " purchased the " + F.name(_item.getName() + " " + UtilText.toRomanNumeral(newLevel)) + " team upgrade.");
|
||||
|
||||
for (Player other : _cakeTeam.getGameTeam().GetPlayers(false))
|
||||
{
|
||||
other.playSound(other.getLocation(), Sound.NOTE_PLING, 1, 1.2F);
|
||||
other.sendMessage(message);
|
||||
_item.apply(other, newLevel);
|
||||
}
|
||||
|
||||
_cakeTeam.getUpgrades().put(_item, newLevel);
|
||||
playAcceptSound(player);
|
||||
refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendMessage(F.main("Game", "You do not have enough " + F.name(_resource.getName() + "s") + " to purchase this item."));
|
||||
playDenySound(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -175,7 +175,7 @@ public class TowerManager implements Listener
|
||||
{
|
||||
_def.put(tower, new DefenderAI(this, tower));
|
||||
/*int[] rgb;
|
||||
if (tower.getTeam().GetColor() == red.GetColor())
|
||||
if (tower.getGameTeam().GetColor() == red.GetColor())
|
||||
rgb = redRGB;
|
||||
else
|
||||
rgb = blueRGB;
|
||||
@ -216,8 +216,8 @@ public class TowerManager implements Listener
|
||||
public void handleTowerDeath(TeamTowerBase towerBase)
|
||||
{
|
||||
towerBase.setVulnerable(false);
|
||||
//ironOreGen(towerBase.getTeam());
|
||||
/*for (Player player : towerBase.getTeam().GetPlayers(true))
|
||||
//ironOreGen(towerBase.getGameTeam());
|
||||
/*for (Player player : towerBase.getGameTeam().GetPlayers(true))
|
||||
{
|
||||
player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 20 * 60, 1));
|
||||
}*/
|
||||
@ -225,7 +225,7 @@ public class TowerManager implements Listener
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
UtilTextMiddle.display("", towerBase.getTeam().GetColor() + towerBase.getTeam().getName() + " Team ores have been replenished!", UtilServer.getPlayers());
|
||||
UtilTextMiddle.display("", towerBase.getGameTeam().GetColor() + towerBase.getGameTeam().getName() + " Team ores have been replenished!", UtilServer.getPlayers());
|
||||
}
|
||||
}, 20 * 5);*/
|
||||
//_mapZone.get(towerBase).setValid(false);
|
||||
@ -257,7 +257,7 @@ public class TowerManager implements Listener
|
||||
|
||||
//Host.Objective.setTeamObjective(enemy, new KillObjective());
|
||||
|
||||
//Host.TeamPoison.put(towerBase.getTeam(), System.currentTimeMillis() + (UtilTime.convert(5, TimeUnit.MINUTES, TimeUnit.MILLISECONDS) - UtilTime.convert(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)));
|
||||
//Host.TeamPoison.put(towerBase.getGameTeam(), System.currentTimeMillis() + (UtilTime.convert(5, TimeUnit.MINUTES, TimeUnit.MILLISECONDS) - UtilTime.convert(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)));
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -54,7 +54,6 @@ import nautilus.game.arcade.game.games.moba.buff.BuffManager;
|
||||
import nautilus.game.arcade.game.games.moba.fountain.MobaFountain;
|
||||
import nautilus.game.arcade.game.games.moba.general.ArrowKBManager;
|
||||
import nautilus.game.arcade.game.games.moba.general.BetaManager;
|
||||
import nautilus.game.arcade.game.games.moba.general.EnderPearlManager;
|
||||
import nautilus.game.arcade.game.games.moba.general.MobaDamageManager;
|
||||
import nautilus.game.arcade.game.games.moba.gold.GoldManager;
|
||||
import nautilus.game.arcade.game.games.moba.kit.HeroKit;
|
||||
@ -79,6 +78,7 @@ import nautilus.game.arcade.game.games.moba.structure.tower.TowerManager;
|
||||
import nautilus.game.arcade.game.games.moba.training.MobaTraining;
|
||||
import nautilus.game.arcade.game.games.moba.util.MobaUtil;
|
||||
import nautilus.game.arcade.game.modules.CustomScoreboardModule;
|
||||
import nautilus.game.arcade.game.modules.EnderPearlModule;
|
||||
import nautilus.game.arcade.game.modules.capturepoint.CapturePointModule;
|
||||
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
||||
import nautilus.game.arcade.kit.Kit;
|
||||
@ -160,7 +160,9 @@ public class Moba extends TeamGame
|
||||
registerManager(new HPManager(this));
|
||||
registerManager(new MobaDamageManager(this));
|
||||
registerManager(new MobaFountain(this));
|
||||
registerManager(new EnderPearlManager());
|
||||
new EnderPearlModule()
|
||||
.setMaxTicks(40)
|
||||
.register(this);
|
||||
|
||||
// Structures
|
||||
_tower = registerManager(new TowerManager(this));
|
||||
|
@ -1,11 +1,11 @@
|
||||
package nautilus.game.arcade.game.modules;
|
||||
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.moba.Moba;
|
||||
import nautilus.game.arcade.scoreboard.GameScoreboard;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -18,11 +18,13 @@ import org.bukkit.scoreboard.Score;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
|
||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||
import nautilus.game.arcade.game.Game.GameState;
|
||||
import nautilus.game.arcade.game.games.moba.Moba;
|
||||
import nautilus.game.arcade.scoreboard.GameScoreboard;
|
||||
|
||||
/**
|
||||
* CustomScoreboardModule allows for the use of per-player scoreboards in an Arcade game.
|
||||
@ -32,9 +34,9 @@ import java.util.function.BiFunction;
|
||||
* Scoreboards are refreshed for all players upon the prepare, live and end state changes. While sidebars are updated every 10 ticks/0.5 seconds.<br>
|
||||
* If you wish to update the scoreboard more frequently than these, the methods:
|
||||
* <ul>
|
||||
* <li>{@link #refresh()}</li>
|
||||
* <li>{@link #refreshAsPerspective(Player)}</li>
|
||||
* <li{@link #refreshAsSubject(Player)}</li>
|
||||
* <li>{@link #refresh()}</li>
|
||||
* <li>{@link #refreshAsPerspective(Player)}</li>
|
||||
* <li{@link #refreshAsSubject(Player)}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see mineplex.core.scoreboard.MineplexScoreboard
|
||||
@ -151,6 +153,23 @@ public class CustomScoreboardModule extends Module
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the title animation of the scoreboard
|
||||
*/
|
||||
@EventHandler
|
||||
public void updateTitle(UpdateEvent event)
|
||||
{
|
||||
if (event.getType() != UpdateType.FASTEST)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (CustomArcadeScoreboard scoreboard : _scoreboard.values())
|
||||
{
|
||||
scoreboard.updateTitle();
|
||||
}
|
||||
}
|
||||
|
||||
private void setupScoreboard(Player player)
|
||||
{
|
||||
UUID key = player.getUniqueId();
|
||||
|
@ -1,4 +1,17 @@
|
||||
package nautilus.game.arcade.game.games.moba.general;
|
||||
package nautilus.game.arcade.game.modules;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.EnderPearl;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
@ -6,31 +19,25 @@ import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.EnderPearl;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.projectiles.ProjectileSource;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
public class EnderPearlManager implements Listener
|
||||
public class EnderPearlModule extends Module
|
||||
{
|
||||
|
||||
private static final int MAX_TICKS = 2 * 20;
|
||||
private final Map<Player, Projectile> _pearls;
|
||||
|
||||
public EnderPearlManager()
|
||||
private int _maxTicks = Integer.MAX_VALUE;
|
||||
|
||||
public EnderPearlModule()
|
||||
{
|
||||
_pearls = new HashMap<>();
|
||||
}
|
||||
|
||||
public EnderPearlModule setMaxTicks(int maxTicks)
|
||||
{
|
||||
_maxTicks = maxTicks;
|
||||
return this;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void projectileLaunch(ProjectileLaunchEvent event)
|
||||
{
|
||||
@ -66,7 +73,7 @@ public class EnderPearlManager implements Listener
|
||||
iterator.remove();
|
||||
entity.remove();
|
||||
}
|
||||
else if (entity.getTicksLived() > MAX_TICKS)
|
||||
else if (entity.getTicksLived() > _maxTicks)
|
||||
{
|
||||
teleport(shooter, entity);
|
||||
entity.remove();
|
||||
@ -96,5 +103,6 @@ public class EnderPearlManager implements Listener
|
||||
toTeleport.setPitch(playerLocation.getPitch());
|
||||
|
||||
shooter.teleport(toTeleport);
|
||||
shooter.setFallDistance(0);
|
||||
}
|
||||
}
|
@ -55,7 +55,7 @@ public class CapturePoint
|
||||
private int _progress;
|
||||
private long _lastInform;
|
||||
|
||||
public CapturePoint(Game host, String name, ChatColor colour, Location center)
|
||||
CapturePoint(Game host, String name, ChatColor colour, Location center)
|
||||
{
|
||||
_host = host;
|
||||
_name = name;
|
||||
@ -85,7 +85,7 @@ public class CapturePoint
|
||||
}
|
||||
Collections.shuffle(_wool);
|
||||
|
||||
_captureDist = highestDist * (double) MAX_RADIUS;
|
||||
_captureDist = Math.pow(highestDist * (double) MAX_RADIUS + 0.5D, 2);
|
||||
}
|
||||
|
||||
public void update()
|
||||
|
@ -87,6 +87,19 @@ public class CapturePointModule extends Module
|
||||
return out.toString().trim();
|
||||
}
|
||||
|
||||
public boolean isOnPoint(Location location)
|
||||
{
|
||||
for (CapturePoint point : _capturePoints)
|
||||
{
|
||||
if (point.isOnPoint(location))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public List<CapturePoint> getCapturePoints()
|
||||
{
|
||||
return _capturePoints;
|
||||
|
@ -1,17 +1,6 @@
|
||||
package nautilus.game.arcade.scoreboard;
|
||||
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.scoreboard.WritableMineplexScoreboard;
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedList;
|
||||
@ -19,13 +8,33 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.scoreboard.WritableMineplexScoreboard;
|
||||
import mineplex.core.titles.tracks.custom.ScrollAnimation;
|
||||
|
||||
import nautilus.game.arcade.game.Game;
|
||||
import nautilus.game.arcade.game.GameTeam;
|
||||
|
||||
public class GameScoreboard extends WritableMineplexScoreboard
|
||||
{
|
||||
private Game _game;
|
||||
|
||||
private String _title;
|
||||
private static final String[] TITLE = new ScrollAnimation(" MINEPLEX ")
|
||||
.withPrimaryColour(ChatColor.GOLD)
|
||||
.withSecondaryColour(ChatColor.YELLOW)
|
||||
.withTertiaryColour(ChatColor.WHITE)
|
||||
.bold()
|
||||
.build();
|
||||
|
||||
private final Game _game;
|
||||
|
||||
private int _shineIndex;
|
||||
private boolean _shineDirection = true;
|
||||
|
||||
public GameScoreboard(Game game)
|
||||
{
|
||||
@ -37,8 +46,7 @@ public class GameScoreboard extends WritableMineplexScoreboard
|
||||
super(player);
|
||||
|
||||
_game = game;
|
||||
_title = " MINEPLEX ";
|
||||
setSidebarName(C.Bold + _title);
|
||||
setSidebarName(TITLE[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -61,50 +69,11 @@ public class GameScoreboard extends WritableMineplexScoreboard
|
||||
|
||||
public void updateTitle()
|
||||
{
|
||||
String out;
|
||||
setSidebarName(TITLE[_shineIndex]);
|
||||
|
||||
if (_shineDirection)
|
||||
{
|
||||
out = C.cGold + C.Bold;
|
||||
}
|
||||
else
|
||||
{
|
||||
out = C.cWhite + C.Bold;
|
||||
}
|
||||
|
||||
for (int i = 0; i < _title.length(); i++)
|
||||
{
|
||||
char c = _title.charAt(i);
|
||||
|
||||
if (_shineDirection)
|
||||
{
|
||||
if (i == _shineIndex)
|
||||
out += C.cYellow + C.Bold;
|
||||
|
||||
if (i == _shineIndex + 1)
|
||||
out += C.cWhite + C.Bold;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i == _shineIndex)
|
||||
out += C.cYellow + C.Bold;
|
||||
|
||||
if (i == _shineIndex + 1)
|
||||
out += C.cGold + C.Bold;
|
||||
}
|
||||
|
||||
|
||||
out += c;
|
||||
}
|
||||
|
||||
setSidebarName(out);
|
||||
|
||||
_shineIndex++;
|
||||
|
||||
if (_shineIndex == _title.length() * 2)
|
||||
if (++_shineIndex == TITLE.length)
|
||||
{
|
||||
_shineIndex = 0;
|
||||
_shineDirection = !_shineDirection;
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,7 +146,7 @@ public class GameScoreboard extends WritableMineplexScoreboard
|
||||
private <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map)
|
||||
{
|
||||
List<Map.Entry<K, V>> list = new LinkedList<>(map.entrySet());
|
||||
Collections.sort(list, (o1, o2) -> (o2.getValue()).compareTo(o1.getValue()));
|
||||
list.sort((o1, o2) -> (o2.getValue()).compareTo(o1.getValue()));
|
||||
|
||||
Map<K, V> result = new LinkedHashMap<>();
|
||||
for (Map.Entry<K, V> entry : list)
|
||||
|
Loading…
Reference in New Issue
Block a user