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.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -15,7 +14,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
import mineplex.core.common.util.UtilAlg;
|
import mineplex.core.common.util.UtilAlg;
|
||||||
import mineplex.core.common.util.UtilMath;
|
|
||||||
import mineplex.core.itemstack.ItemBuilder;
|
import mineplex.core.itemstack.ItemBuilder;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
@ -25,6 +23,7 @@ import nautilus.game.arcade.ArcadeManager;
|
|||||||
import nautilus.game.arcade.GameType;
|
import nautilus.game.arcade.GameType;
|
||||||
import nautilus.game.arcade.game.GameTeam;
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
import nautilus.game.arcade.game.TeamGame;
|
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.KitCakeArcher;
|
||||||
import nautilus.game.arcade.game.games.cakewars.kits.KitCakeBuilder;
|
import nautilus.game.arcade.game.games.cakewars.kits.KitCakeBuilder;
|
||||||
import nautilus.game.arcade.game.games.cakewars.kits.KitCakeWarrior;
|
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.CakeSpawnerModule;
|
||||||
import nautilus.game.arcade.game.games.cakewars.module.CakeTeamModule;
|
import nautilus.game.arcade.game.games.cakewars.module.CakeTeamModule;
|
||||||
import nautilus.game.arcade.game.modules.CustomScoreboardModule;
|
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.capturepoint.CapturePointModule;
|
||||||
import nautilus.game.arcade.game.modules.chest.ChestLootModule;
|
import nautilus.game.arcade.game.modules.chest.ChestLootModule;
|
||||||
import nautilus.game.arcade.game.modules.chest.ChestLootPool;
|
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.kit.Kit;
|
||||||
import nautilus.game.arcade.scoreboard.GameScoreboard;
|
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.",
|
"Control the " + C.cAqua + "Beacons" + C.cWhite + " to get more resources.",
|
||||||
"Last team standing wins!"
|
"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 Map<GameTeam, Location> _averages;
|
||||||
|
|
||||||
|
private final CakeTeamModule _cakeTeamModule;
|
||||||
|
private final CakeShopModule _cakeShopModule;
|
||||||
private final ChestLootModule _chestLootModule;
|
private final ChestLootModule _chestLootModule;
|
||||||
private final CustomScoreboardModule _customScoreboardModule;
|
private final CustomScoreboardModule _customScoreboardModule;
|
||||||
private final CapturePointModule _capturePointModule;
|
private final CapturePointModule _capturePointModule;
|
||||||
@ -72,9 +85,7 @@ public class CakeWars extends TeamGame
|
|||||||
|
|
||||||
BlockPlace = true;
|
BlockPlace = true;
|
||||||
BlockBreak = true;
|
BlockBreak = true;
|
||||||
QuitDropItems = true;
|
DeathSpectateSecs = RESPAWN_TIME;
|
||||||
DeathDropItems = true;
|
|
||||||
DeathSpectateSecs = 5;
|
|
||||||
StrictAntiHack = true;
|
StrictAntiHack = true;
|
||||||
HungerSet = 20;
|
HungerSet = 20;
|
||||||
InventoryClick = true;
|
InventoryClick = true;
|
||||||
@ -82,9 +93,15 @@ public class CakeWars extends TeamGame
|
|||||||
InventoryOpenBlock = true;
|
InventoryOpenBlock = true;
|
||||||
ItemDrop = true;
|
ItemDrop = true;
|
||||||
ItemPickup = true;
|
ItemPickup = true;
|
||||||
|
_help = TIPS;
|
||||||
|
|
||||||
new CakeTeamModule(this)
|
manager.GetCreature().SetDisableCustomDrops(true);
|
||||||
.register();
|
|
||||||
|
new CompassModule()
|
||||||
|
.register(this);
|
||||||
|
|
||||||
|
_cakeTeamModule = new CakeTeamModule(this);
|
||||||
|
_cakeTeamModule.register();
|
||||||
|
|
||||||
new CakeIslandModule(this)
|
new CakeIslandModule(this)
|
||||||
.register();
|
.register();
|
||||||
@ -95,8 +112,8 @@ public class CakeWars extends TeamGame
|
|||||||
new CakeSpawnerModule(this)
|
new CakeSpawnerModule(this)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
new CakeShopModule(this)
|
_cakeShopModule = new CakeShopModule(this);
|
||||||
.register();
|
_cakeTeamModule.register();
|
||||||
|
|
||||||
_cakePointModule = new CakePointModule(this);
|
_cakePointModule = new CakePointModule(this);
|
||||||
_cakePointModule.register();
|
_cakePointModule.register();
|
||||||
@ -104,6 +121,9 @@ public class CakeWars extends TeamGame
|
|||||||
_capturePointModule = new CapturePointModule();
|
_capturePointModule = new CapturePointModule();
|
||||||
_capturePointModule.register(this);
|
_capturePointModule.register(this);
|
||||||
|
|
||||||
|
new EnderPearlModule()
|
||||||
|
.register(this);
|
||||||
|
|
||||||
_chestLootModule = new ChestLootModule();
|
_chestLootModule = new ChestLootModule();
|
||||||
|
|
||||||
_customScoreboardModule = new CustomScoreboardModule()
|
_customScoreboardModule = new CustomScoreboardModule()
|
||||||
@ -148,9 +168,38 @@ public class CakeWars extends TeamGame
|
|||||||
{
|
{
|
||||||
scoreboard.writeNewLine();
|
scoreboard.writeNewLine();
|
||||||
|
|
||||||
scoreboard.write("Hello World");
|
GameTeam playerTeam = GetTeam(player);
|
||||||
scoreboard.write(player.getName());
|
|
||||||
scoreboard.write("✓");
|
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();
|
scoreboard.writeNewLine();
|
||||||
}
|
}
|
||||||
@ -232,25 +281,6 @@ public class CakeWars extends TeamGame
|
|||||||
return _averages.get(team);
|
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()
|
public ChestLootModule getChestLootModule()
|
||||||
{
|
{
|
||||||
return _chestLootModule;
|
return _chestLootModule;
|
||||||
@ -265,4 +295,14 @@ public class CakeWars extends TeamGame
|
|||||||
{
|
{
|
||||||
return _cakePointModule;
|
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
|
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
|
@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
|
@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
|
@Override
|
||||||
@ -47,13 +47,15 @@ public enum CakeResource
|
|||||||
private final ChatColor _chatColor;
|
private final ChatColor _chatColor;
|
||||||
private final ItemStack _itemStack;
|
private final ItemStack _itemStack;
|
||||||
private final UpdateType _spawnerUpdate;
|
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;
|
_name = name;
|
||||||
_chatColor = chatColor;
|
_chatColor = chatColor;
|
||||||
_itemStack = itemStack;
|
_itemStack = itemStack;
|
||||||
_spawnerUpdate = spawnerUpdate;
|
_spawnerUpdate = spawnerUpdate;
|
||||||
|
_maxSpawned = maxSpawned;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void handleDistribution(CakeSpawnerModule module, GameTeam team);
|
public abstract void handleDistribution(CakeSpawnerModule module, GameTeam team);
|
||||||
@ -77,4 +79,9 @@ public enum CakeResource
|
|||||||
{
|
{
|
||||||
return _spawnerUpdate;
|
return _spawnerUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMaxSpawned()
|
||||||
|
{
|
||||||
|
return _maxSpawned;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,30 +2,25 @@ package nautilus.game.arcade.game.games.cakewars.data;
|
|||||||
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class CakeShopItem
|
public class CakeShopItem implements CakeItem
|
||||||
{
|
{
|
||||||
|
|
||||||
private final ItemStack _itemStack;
|
private final ItemStack _itemStack;
|
||||||
private final CakeResource _resource;
|
|
||||||
private final int _cost;
|
private final int _cost;
|
||||||
|
|
||||||
public CakeShopItem(ItemStack itemStack, CakeResource resource, int cost)
|
public CakeShopItem(ItemStack itemStack, int cost)
|
||||||
{
|
{
|
||||||
_itemStack = itemStack;
|
_itemStack = itemStack;
|
||||||
_resource = resource;
|
|
||||||
_cost = cost;
|
_cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public ItemStack getItemStack()
|
public ItemStack getItemStack()
|
||||||
{
|
{
|
||||||
return _itemStack;
|
return _itemStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CakeResource getResource()
|
@Override
|
||||||
{
|
|
||||||
return _resource;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCost()
|
public int getCost()
|
||||||
{
|
{
|
||||||
return _cost;
|
return _cost;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package nautilus.game.arcade.game.games.cakewars.data;
|
package nautilus.game.arcade.game.games.cakewars.data;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -25,27 +24,33 @@ public class CakeTeam
|
|||||||
C.cGold + "Capture the beacons around the",
|
C.cGold + "Capture the beacons around the",
|
||||||
C.cGold + "map to earn different resources!"
|
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 static final String CAKE_HOLOGRAM_TEXT = C.cGold + "Protect your cake at all costs!";
|
||||||
|
|
||||||
private final CakeWars _game;
|
private final CakeWars _game;
|
||||||
private final GameTeam _team;
|
private final GameTeam _team;
|
||||||
private final Location _edgeHologram;
|
private final Location _edgeHologram;
|
||||||
|
private final Location _shopHologram;
|
||||||
private final Location _cake;
|
private final Location _cake;
|
||||||
private final List<Hologram> _holograms;
|
private final Map<CakeTeamItem, Integer> _upgrades;
|
||||||
private final Map<CakeTeamPowerup, Integer> _upgrades;
|
|
||||||
|
|
||||||
private Hologram _cakeHologram;
|
private Hologram _cakeHologram;
|
||||||
|
|
||||||
public CakeTeam(CakeWars game, GameTeam team, Location edgeHologram)
|
public CakeTeam(CakeWars game, GameTeam team, Location edgeHologram, Location shopHologram)
|
||||||
{
|
{
|
||||||
_game = game;
|
_game = game;
|
||||||
_team = team;
|
_team = team;
|
||||||
_edgeHologram = edgeHologram.add(0, 2, 0);
|
_edgeHologram = edgeHologram.add(0, 2, 0);
|
||||||
|
_shopHologram = shopHologram.add(0, 2, 0);
|
||||||
|
|
||||||
_cake = game.WorldData.GetDataLocs(team.GetName().toUpperCase()).get(0).getBlock().getLocation();
|
_cake = game.WorldData.GetDataLocs(team.GetName().toUpperCase()).get(0).getBlock().getLocation();
|
||||||
_cake.getBlock().setType(Material.CAKE_BLOCK);
|
_cake.getBlock().setType(Material.CAKE_BLOCK);
|
||||||
_holograms = new ArrayList<>(3);
|
_upgrades = new HashMap<>(CakeTeamItem.values().length);
|
||||||
_upgrades = new HashMap<>(CakeTeamPowerup.values().length);
|
|
||||||
|
for (CakeTeamItem item : CakeTeamItem.values())
|
||||||
|
{
|
||||||
|
_upgrades.put(item, 0);
|
||||||
|
}
|
||||||
|
|
||||||
setupHolograms();
|
setupHolograms();
|
||||||
}
|
}
|
||||||
@ -60,12 +65,30 @@ public class CakeTeam
|
|||||||
.addPlayers(teamPlayers)
|
.addPlayers(teamPlayers)
|
||||||
.start();
|
.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)
|
_cakeHologram = new Hologram(hologramManager, _cake.clone().add(0.5, 1.3, 0.5), CAKE_HOLOGRAM_TEXT)
|
||||||
.setHologramTarget(HologramTarget.WHITELIST)
|
.setHologramTarget(HologramTarget.WHITELIST)
|
||||||
.addPlayers(teamPlayers)
|
.addPlayers(teamPlayers)
|
||||||
.start();
|
.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()
|
public boolean canRespawn()
|
||||||
{
|
{
|
||||||
return _cake.getBlock().getType() != Material.AIR;
|
return _cake.getBlock().getType() != Material.AIR;
|
||||||
@ -76,13 +99,18 @@ public class CakeTeam
|
|||||||
return _cake;
|
return _cake;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Hologram> getHolograms()
|
public GameTeam getGameTeam()
|
||||||
{
|
{
|
||||||
return _holograms;
|
return _team;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Hologram getCakeHologram()
|
public Hologram getCakeHologram()
|
||||||
{
|
{
|
||||||
return _cakeHologram;
|
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 mineplex.core.common.util.C;
|
||||||
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
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.KitAvailability;
|
||||||
import nautilus.game.arcade.kit.Perk;
|
import nautilus.game.arcade.kit.Perk;
|
||||||
import nautilus.game.arcade.kit.ProgressingKit;
|
import nautilus.game.arcade.kit.ProgressingKit;
|
||||||
@ -19,11 +20,12 @@ public class KitCakeBuilder extends ProgressingKit
|
|||||||
{
|
{
|
||||||
"Get extra blocks to build with!",
|
"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 =
|
private static final Perk[] PERKS =
|
||||||
{
|
{
|
||||||
|
new PerkPassiveWoolGain()
|
||||||
};
|
};
|
||||||
|
|
||||||
private static final ItemStack IN_HAND = new ItemStack(Material.WOOL);
|
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;
|
package nautilus.game.arcade.game.games.cakewars.module;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
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.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
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.F;
|
||||||
|
import mineplex.core.common.util.MapUtil;
|
||||||
import mineplex.core.common.util.UtilBlock;
|
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.GameStateChangeEvent;
|
||||||
|
import nautilus.game.arcade.events.PlayerKitGiveEvent;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
import nautilus.game.arcade.game.Game.GameState;
|
||||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
||||||
|
|
||||||
public class CakePlayerModule extends CakeModule
|
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;
|
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)
|
public CakePlayerModule(CakeWars game)
|
||||||
{
|
{
|
||||||
super(game);
|
super(game);
|
||||||
|
|
||||||
_placedBlocks = new HashSet<>();
|
_placedBlocks = new HashSet<>();
|
||||||
|
_storedInventory = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanup()
|
public void cleanup()
|
||||||
{
|
{
|
||||||
_placedBlocks.clear();
|
_placedBlocks.clear();
|
||||||
|
_storedInventory.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@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."));
|
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
|
@EventHandler
|
||||||
public void blockPlace(BlockPlaceEvent event)
|
public void blockPlace(BlockPlaceEvent event)
|
||||||
{
|
{
|
||||||
|
if (!_game.IsLive())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Location location = event.getBlock().getLocation();
|
Location location = event.getBlock().getLocation();
|
||||||
|
|
||||||
for (CapturePoint point : _game.getCapturePointModule().getCapturePoints())
|
for (CapturePoint point : _game.getCapturePointModule().getCapturePoints())
|
||||||
|
@ -11,11 +11,15 @@ import org.bukkit.enchantments.Enchantment;
|
|||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import mineplex.core.Managers;
|
import mineplex.core.Managers;
|
||||||
import mineplex.core.common.util.C;
|
import mineplex.core.common.util.C;
|
||||||
|
import mineplex.core.common.util.F;
|
||||||
import mineplex.core.common.util.UtilAlg;
|
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.itemstack.ItemBuilder;
|
||||||
import mineplex.core.newnpc.NPC;
|
import mineplex.core.newnpc.NPC;
|
||||||
import mineplex.core.newnpc.NewNPCManager;
|
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.Game.GameState;
|
||||||
import nautilus.game.arcade.game.GameTeam;
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
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.CakeResource;
|
||||||
import nautilus.game.arcade.game.games.cakewars.data.CakeShopItem;
|
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.CakeResourcePage;
|
||||||
import nautilus.game.arcade.game.games.cakewars.ui.CakeResourceShop;
|
import nautilus.game.arcade.game.games.cakewars.ui.CakeResourceShop;
|
||||||
|
import nautilus.game.arcade.game.games.cakewars.ui.CakeResourceStarPage;
|
||||||
|
|
||||||
public class CakeShopModule extends CakeModule
|
public class CakeShopModule extends CakeModule
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final int MIN_BLOCK_PLACE_DIST_SQUARED = 49;
|
||||||
|
|
||||||
private final NewNPCManager _manager;
|
private final NewNPCManager _manager;
|
||||||
private final Map<NPC, CakeResource> _npcs;
|
private final Map<NPC, CakeResource> _npcs;
|
||||||
private final CakeResourceShop _shop;
|
private final CakeResourceShop _shop;
|
||||||
private final Map<CakeResource, List<CakeShopItem>> _items;
|
private final Map<CakeResource, List<CakeItem>> _items;
|
||||||
|
|
||||||
public CakeShopModule(CakeWars game)
|
public CakeShopModule(CakeWars game)
|
||||||
{
|
{
|
||||||
@ -52,44 +60,74 @@ public class CakeShopModule extends CakeModule
|
|||||||
// Iron Set
|
// Iron Set
|
||||||
new CakeShopItem(new ItemBuilder(Material.IRON_HELMET)
|
new CakeShopItem(new ItemBuilder(Material.IRON_HELMET)
|
||||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||||
.build(), CakeResource.BRICK, 5),
|
.build(), 5),
|
||||||
new CakeShopItem(new ItemBuilder(Material.IRON_CHESTPLATE)
|
new CakeShopItem(new ItemBuilder(Material.IRON_CHESTPLATE)
|
||||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||||
.build(), CakeResource.BRICK, 7),
|
.build(), 7),
|
||||||
new CakeShopItem(new ItemBuilder(Material.IRON_LEGGINGS)
|
new CakeShopItem(new ItemBuilder(Material.IRON_LEGGINGS)
|
||||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||||
.build(), CakeResource.BRICK, 7),
|
.build(), 7),
|
||||||
new CakeShopItem(new ItemBuilder(Material.IRON_BOOTS)
|
new CakeShopItem(new ItemBuilder(Material.IRON_BOOTS)
|
||||||
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
.addEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, 1)
|
||||||
.build(), CakeResource.BRICK, 5),
|
.build(), 5),
|
||||||
|
|
||||||
// Sword
|
// Sword
|
||||||
new CakeShopItem(new ItemStack(Material.DIAMOND_SWORD), CakeResource.BRICK, 5),
|
new CakeShopItem(new ItemStack(Material.DIAMOND_SWORD), 5),
|
||||||
|
|
||||||
// Pickaxe
|
// Pickaxe
|
||||||
new CakeShopItem(new ItemStack(Material.IRON_PICKAXE), CakeResource.BRICK, 3),
|
new CakeShopItem(new ItemStack(Material.IRON_PICKAXE), 3),
|
||||||
|
|
||||||
// Arrow
|
// Arrow
|
||||||
new CakeShopItem(new ItemStack(Material.ARROW, 3), CakeResource.BRICK, 6),
|
new CakeShopItem(new ItemStack(Material.ARROW, 3), 6),
|
||||||
|
|
||||||
// Wool
|
// 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
|
// Emerald
|
||||||
new CakeShopItem(new ItemStack(Material.EMERALD), CakeResource.BRICK, 20)
|
new CakeShopItem(new ItemStack(Material.EMERALD), 20)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
_items.put(CakeResource.EMERALD, Arrays.asList(
|
_items.put(CakeResource.EMERALD, Arrays.asList(
|
||||||
|
|
||||||
// Obsidian
|
// Obsidian
|
||||||
new CakeShopItem(new ItemStack(Material.OBSIDIAN), CakeResource.EMERALD, 5),
|
new CakeShopItem(new ItemStack(Material.OBSIDIAN), 5),
|
||||||
|
|
||||||
// Pickaxe
|
// Pickaxe
|
||||||
new CakeShopItem(new ItemStack(Material.DIAMOND_PICKAXE), CakeResource.EMERALD, 10)
|
new CakeShopItem(new ItemStack(Material.DIAMOND_PICKAXE), 10),
|
||||||
|
|
||||||
));
|
// Sword
|
||||||
_items.put(CakeResource.STAR, Arrays.asList(
|
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
|
@EventHandler
|
||||||
public void npcInteract(NPCInteractEvent event)
|
public void npcInteract(NPCInteractEvent event)
|
||||||
{
|
{
|
||||||
|
if (!_game.IsLive())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
NPC npc = event.getNpc();
|
NPC npc = event.getNpc();
|
||||||
CakeResource resource = _npcs.get(npc);
|
CakeResource resource = _npcs.get(npc);
|
||||||
|
|
||||||
@ -138,9 +181,51 @@ public class CakeShopModule extends CakeModule
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
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.GameTeam;
|
||||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
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.CakeResource;
|
||||||
|
import nautilus.game.arcade.game.games.cakewars.data.CakeTeamItem;
|
||||||
|
|
||||||
public class CakeSpawnerModule extends CakeModule
|
public class CakeSpawnerModule extends CakeModule
|
||||||
{
|
{
|
||||||
@ -31,7 +32,6 @@ public class CakeSpawnerModule extends CakeModule
|
|||||||
.put("GREEN", "LIME")
|
.put("GREEN", "LIME")
|
||||||
.put("YELLOW", "ORANGE")
|
.put("YELLOW", "ORANGE")
|
||||||
.build();
|
.build();
|
||||||
private static final int MAX_ITEMS = 32;
|
|
||||||
|
|
||||||
public CakeSpawnerModule(CakeWars game)
|
public CakeSpawnerModule(CakeWars game)
|
||||||
{
|
{
|
||||||
@ -55,6 +55,11 @@ public class CakeSpawnerModule extends CakeModule
|
|||||||
|
|
||||||
for (GameTeam team : _game.GetTeamList())
|
for (GameTeam team : _game.GetTeamList())
|
||||||
{
|
{
|
||||||
|
if (!team.IsTeamAlive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
resource.handleDistribution(this, team);
|
resource.handleDistribution(this, team);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,7 +72,10 @@ public class CakeSpawnerModule extends CakeModule
|
|||||||
return;
|
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);
|
Location location = _game.WorldData.GetDataLocs(SPAWNER_CONVERTERS.get(team.GetName().toUpperCase())).get(0);
|
||||||
boolean drop = true;
|
boolean drop = true;
|
||||||
List<Player> players = new ArrayList<>();
|
List<Player> players = new ArrayList<>();
|
||||||
@ -102,7 +110,7 @@ public class CakeSpawnerModule extends CakeModule
|
|||||||
{
|
{
|
||||||
if (item != null)
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -118,6 +126,7 @@ public class CakeSpawnerModule extends CakeModule
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.getInventory().addItem(itemStack);
|
player.getInventory().addItem(itemStack);
|
||||||
player.playSound(player.getLocation(), Sound.ITEM_PICKUP, 1, 1);
|
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.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
import mineplex.core.common.util.UtilAlg;
|
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.GameStateChangeEvent;
|
||||||
import nautilus.game.arcade.events.PlayerDeathOutEvent;
|
import nautilus.game.arcade.events.PlayerDeathOutEvent;
|
||||||
|
import nautilus.game.arcade.events.PlayerKitGiveEvent;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
import nautilus.game.arcade.game.Game.GameState;
|
||||||
import nautilus.game.arcade.game.GameTeam;
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
import nautilus.game.arcade.game.games.cakewars.CakeWars;
|
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 int HOLOGRAM_VIEW_SQUARED = 16;
|
||||||
|
private static final ItemStack STARTING_SWORD = new ItemStack(Material.WOOD_SWORD);
|
||||||
|
|
||||||
private final Map<GameTeam, CakeTeam> _teams;
|
private final Map<GameTeam, CakeTeam> _teams;
|
||||||
|
|
||||||
@ -47,7 +50,6 @@ public class CakeTeamModule extends CakeModule
|
|||||||
@Override
|
@Override
|
||||||
public void cleanup()
|
public void cleanup()
|
||||||
{
|
{
|
||||||
_teams.values().forEach(cakeTeam -> cakeTeam.getHolograms().forEach(Hologram::stop));
|
|
||||||
_teams.clear();
|
_teams.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,6 +63,7 @@ public class CakeTeamModule extends CakeModule
|
|||||||
|
|
||||||
WorldData worldData = _game.WorldData;
|
WorldData worldData = _game.WorldData;
|
||||||
List<Location> edgeHolograms = worldData.GetDataLocs("BLACK");
|
List<Location> edgeHolograms = worldData.GetDataLocs("BLACK");
|
||||||
|
List<Location> shopHolograms = worldData.GetDataLocs("GRAY");
|
||||||
|
|
||||||
_game.GetTeamList().forEach(team ->
|
_game.GetTeamList().forEach(team ->
|
||||||
{
|
{
|
||||||
@ -69,13 +72,19 @@ public class CakeTeamModule extends CakeModule
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Location average = _game.getAverageLocation(team);
|
||||||
|
|
||||||
_teams.put(team,
|
_teams.put(team,
|
||||||
new CakeTeam(
|
new CakeTeam(
|
||||||
_game,
|
_game,
|
||||||
team,
|
team,
|
||||||
UtilAlg.findClosest(
|
UtilAlg.findClosest(
|
||||||
_game.getAverageLocation(team),
|
average,
|
||||||
edgeHolograms
|
edgeHolograms
|
||||||
|
),
|
||||||
|
UtilAlg.findClosest(
|
||||||
|
average,
|
||||||
|
shopHolograms
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -98,7 +107,7 @@ public class CakeTeamModule extends CakeModule
|
|||||||
|
|
||||||
for (Player player : team.GetPlayers(false))
|
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);
|
hologram.removePlayer(player);
|
||||||
}
|
}
|
||||||
@ -160,7 +169,7 @@ public class CakeTeamModule extends CakeModule
|
|||||||
block.setType(Material.AIR);
|
block.setType(Material.AIR);
|
||||||
|
|
||||||
_game.AddGems(player, 20, "Cakes Eaten", true, true);
|
_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."));
|
_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]));
|
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);
|
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 java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.ClickType;
|
import org.bukkit.event.inventory.ClickType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
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.C;
|
||||||
import mineplex.core.common.util.F;
|
import mineplex.core.common.util.F;
|
||||||
import mineplex.core.common.util.UtilInv;
|
import mineplex.core.common.util.UtilInv;
|
||||||
|
import mineplex.core.common.util.UtilItem;
|
||||||
import mineplex.core.itemstack.ItemBuilder;
|
import mineplex.core.itemstack.ItemBuilder;
|
||||||
import mineplex.core.itemstack.ItemStackFactory;
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
|
import mineplex.core.recharge.Recharge;
|
||||||
import mineplex.core.shop.item.IButton;
|
import mineplex.core.shop.item.IButton;
|
||||||
import mineplex.core.shop.page.ShopPageBase;
|
import mineplex.core.shop.page.ShopPageBase;
|
||||||
|
|
||||||
import nautilus.game.arcade.ArcadeManager;
|
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.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>
|
public class CakeResourcePage extends ShopPageBase<ArcadeManager, CakeResourceShop>
|
||||||
{
|
{
|
||||||
|
|
||||||
private final List<CakeShopItem> _items;
|
private static final ItemStack CLOSE_ITEM = new ItemBuilder(Material.BARRIER)
|
||||||
private final byte _teamData;
|
.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);
|
super(plugin, shop, plugin.GetClients(), plugin.GetDonation(), resource.getName() + " Shop", player, 27);
|
||||||
|
|
||||||
|
_resource = resource;
|
||||||
_items = items;
|
_items = items;
|
||||||
_teamData = plugin.GetGame().GetTeam(player).GetColorData();
|
_team = plugin.GetGame().GetTeam(player);
|
||||||
|
|
||||||
buildPage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildPage()
|
protected void buildPage()
|
||||||
{
|
{
|
||||||
|
addCloseButton();
|
||||||
|
|
||||||
int slot = 10;
|
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;
|
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());
|
ItemBuilder builder = new ItemBuilder(item.getItemStack());
|
||||||
boolean canPurchase = canPurchase(_player, item);
|
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(
|
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!"
|
canPurchase ? C.cGreen + "Click to purchase!" : C.cRed + "You do not have enough resources!"
|
||||||
);
|
);
|
||||||
|
|
||||||
if (builder.getType() == Material.WOOL)
|
if (builder.getType() == Material.WOOL)
|
||||||
{
|
{
|
||||||
builder.setData(_teamData);
|
builder.setData(_team.GetColorData());
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.build();
|
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());
|
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 class CakeShopButton implements IButton
|
||||||
{
|
{
|
||||||
|
|
||||||
private final CakeShopItem _item;
|
private final CakeItem _item;
|
||||||
|
|
||||||
CakeShopButton(CakeShopItem item)
|
CakeShopButton(CakeItem item)
|
||||||
{
|
{
|
||||||
_item = item;
|
_item = item;
|
||||||
}
|
}
|
||||||
@ -92,21 +119,54 @@ public class CakeResourcePage extends ShopPageBase<ArcadeManager, CakeResourceSh
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(Player player, ClickType clickType)
|
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();
|
ItemStack give = _item.getItemStack();
|
||||||
|
|
||||||
if (UtilInv.remove(player, resource.getType(), resource.getData().getData(), _item.getCost()))
|
if (UtilInv.remove(player, resource.getType(), resource.getData().getData(), _item.getCost()))
|
||||||
{
|
{
|
||||||
give = give.clone();
|
if (give.getType() == Material.WOOL)
|
||||||
give.getData().setData(_teamData);
|
{
|
||||||
|
give = new ItemBuilder(give)
|
||||||
|
.setData(_team.GetColorData())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
UtilInv.insert(player, give);
|
if (UtilItem.isHelmet(give))
|
||||||
player.sendMessage(F.main("Game", "You purchased " + F.count(give.getAmount()) + " " + F.name(ItemStackFactory.Instance.GetName(give, true))));
|
{
|
||||||
|
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);
|
playAcceptSound(player);
|
||||||
|
refresh();
|
||||||
}
|
}
|
||||||
else
|
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);
|
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));
|
_def.put(tower, new DefenderAI(this, tower));
|
||||||
/*int[] rgb;
|
/*int[] rgb;
|
||||||
if (tower.getTeam().GetColor() == red.GetColor())
|
if (tower.getGameTeam().GetColor() == red.GetColor())
|
||||||
rgb = redRGB;
|
rgb = redRGB;
|
||||||
else
|
else
|
||||||
rgb = blueRGB;
|
rgb = blueRGB;
|
||||||
@ -216,8 +216,8 @@ public class TowerManager implements Listener
|
|||||||
public void handleTowerDeath(TeamTowerBase towerBase)
|
public void handleTowerDeath(TeamTowerBase towerBase)
|
||||||
{
|
{
|
||||||
towerBase.setVulnerable(false);
|
towerBase.setVulnerable(false);
|
||||||
//ironOreGen(towerBase.getTeam());
|
//ironOreGen(towerBase.getGameTeam());
|
||||||
/*for (Player player : towerBase.getTeam().GetPlayers(true))
|
/*for (Player player : towerBase.getGameTeam().GetPlayers(true))
|
||||||
{
|
{
|
||||||
player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 20 * 60, 1));
|
player.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 20 * 60, 1));
|
||||||
}*/
|
}*/
|
||||||
@ -225,7 +225,7 @@ public class TowerManager implements Listener
|
|||||||
{
|
{
|
||||||
public void run()
|
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);*/
|
}, 20 * 5);*/
|
||||||
//_mapZone.get(towerBase).setValid(false);
|
//_mapZone.get(towerBase).setValid(false);
|
||||||
@ -257,7 +257,7 @@ public class TowerManager implements Listener
|
|||||||
|
|
||||||
//Host.Objective.setTeamObjective(enemy, new KillObjective());
|
//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;
|
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.fountain.MobaFountain;
|
||||||
import nautilus.game.arcade.game.games.moba.general.ArrowKBManager;
|
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.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.general.MobaDamageManager;
|
||||||
import nautilus.game.arcade.game.games.moba.gold.GoldManager;
|
import nautilus.game.arcade.game.games.moba.gold.GoldManager;
|
||||||
import nautilus.game.arcade.game.games.moba.kit.HeroKit;
|
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.training.MobaTraining;
|
||||||
import nautilus.game.arcade.game.games.moba.util.MobaUtil;
|
import nautilus.game.arcade.game.games.moba.util.MobaUtil;
|
||||||
import nautilus.game.arcade.game.modules.CustomScoreboardModule;
|
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.capturepoint.CapturePointModule;
|
||||||
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
import nautilus.game.arcade.game.modules.compass.CompassModule;
|
||||||
import nautilus.game.arcade.kit.Kit;
|
import nautilus.game.arcade.kit.Kit;
|
||||||
@ -160,7 +160,9 @@ public class Moba extends TeamGame
|
|||||||
registerManager(new HPManager(this));
|
registerManager(new HPManager(this));
|
||||||
registerManager(new MobaDamageManager(this));
|
registerManager(new MobaDamageManager(this));
|
||||||
registerManager(new MobaFountain(this));
|
registerManager(new MobaFountain(this));
|
||||||
registerManager(new EnderPearlManager());
|
new EnderPearlModule()
|
||||||
|
.setMaxTicks(40)
|
||||||
|
.register(this);
|
||||||
|
|
||||||
// Structures
|
// Structures
|
||||||
_tower = registerManager(new TowerManager(this));
|
_tower = registerManager(new TowerManager(this));
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package nautilus.game.arcade.game.modules;
|
package nautilus.game.arcade.game.modules;
|
||||||
|
|
||||||
import mineplex.core.updater.UpdateType;
|
import java.util.HashMap;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import java.util.Map;
|
||||||
import nautilus.game.arcade.events.GameStateChangeEvent;
|
import java.util.UUID;
|
||||||
import nautilus.game.arcade.game.Game.GameState;
|
import java.util.function.BiConsumer;
|
||||||
import nautilus.game.arcade.game.games.moba.Moba;
|
import java.util.function.BiFunction;
|
||||||
import nautilus.game.arcade.scoreboard.GameScoreboard;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -18,11 +18,13 @@ import org.bukkit.scoreboard.Score;
|
|||||||
import org.bukkit.scoreboard.Scoreboard;
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import mineplex.core.updater.UpdateType;
|
||||||
import java.util.Map;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.function.BiConsumer;
|
import nautilus.game.arcade.events.GameStateChangeEvent;
|
||||||
import java.util.function.BiFunction;
|
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.
|
* 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>
|
* 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:
|
* If you wish to update the scoreboard more frequently than these, the methods:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{@link #refresh()}</li>
|
* <li>{@link #refresh()}</li>
|
||||||
* <li>{@link #refreshAsPerspective(Player)}</li>
|
* <li>{@link #refreshAsPerspective(Player)}</li>
|
||||||
* <li{@link #refreshAsSubject(Player)}</li>
|
* <li{@link #refreshAsSubject(Player)}</li>
|
||||||
* </ul>
|
* </ul>
|
||||||
*
|
*
|
||||||
* @see mineplex.core.scoreboard.MineplexScoreboard
|
* @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)
|
private void setupScoreboard(Player player)
|
||||||
{
|
{
|
||||||
UUID key = player.getUniqueId();
|
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;
|
||||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
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.common.util.UtilPlayer;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
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;
|
public class EnderPearlModule extends Module
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class EnderPearlManager implements Listener
|
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final int MAX_TICKS = 2 * 20;
|
|
||||||
private final Map<Player, Projectile> _pearls;
|
private final Map<Player, Projectile> _pearls;
|
||||||
|
|
||||||
public EnderPearlManager()
|
private int _maxTicks = Integer.MAX_VALUE;
|
||||||
|
|
||||||
|
public EnderPearlModule()
|
||||||
{
|
{
|
||||||
_pearls = new HashMap<>();
|
_pearls = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EnderPearlModule setMaxTicks(int maxTicks)
|
||||||
|
{
|
||||||
|
_maxTicks = maxTicks;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void projectileLaunch(ProjectileLaunchEvent event)
|
public void projectileLaunch(ProjectileLaunchEvent event)
|
||||||
{
|
{
|
||||||
@ -66,7 +73,7 @@ public class EnderPearlManager implements Listener
|
|||||||
iterator.remove();
|
iterator.remove();
|
||||||
entity.remove();
|
entity.remove();
|
||||||
}
|
}
|
||||||
else if (entity.getTicksLived() > MAX_TICKS)
|
else if (entity.getTicksLived() > _maxTicks)
|
||||||
{
|
{
|
||||||
teleport(shooter, entity);
|
teleport(shooter, entity);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
@ -96,5 +103,6 @@ public class EnderPearlManager implements Listener
|
|||||||
toTeleport.setPitch(playerLocation.getPitch());
|
toTeleport.setPitch(playerLocation.getPitch());
|
||||||
|
|
||||||
shooter.teleport(toTeleport);
|
shooter.teleport(toTeleport);
|
||||||
|
shooter.setFallDistance(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -55,7 +55,7 @@ public class CapturePoint
|
|||||||
private int _progress;
|
private int _progress;
|
||||||
private long _lastInform;
|
private long _lastInform;
|
||||||
|
|
||||||
public CapturePoint(Game host, String name, ChatColor colour, Location center)
|
CapturePoint(Game host, String name, ChatColor colour, Location center)
|
||||||
{
|
{
|
||||||
_host = host;
|
_host = host;
|
||||||
_name = name;
|
_name = name;
|
||||||
@ -85,7 +85,7 @@ public class CapturePoint
|
|||||||
}
|
}
|
||||||
Collections.shuffle(_wool);
|
Collections.shuffle(_wool);
|
||||||
|
|
||||||
_captureDist = highestDist * (double) MAX_RADIUS;
|
_captureDist = Math.pow(highestDist * (double) MAX_RADIUS + 0.5D, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update()
|
public void update()
|
||||||
|
@ -87,6 +87,19 @@ public class CapturePointModule extends Module
|
|||||||
return out.toString().trim();
|
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()
|
public List<CapturePoint> getCapturePoints()
|
||||||
{
|
{
|
||||||
return _capturePoints;
|
return _capturePoints;
|
||||||
|
@ -1,17 +1,6 @@
|
|||||||
package nautilus.game.arcade.scoreboard;
|
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.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
@ -19,13 +8,33 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
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
|
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 int _shineIndex;
|
||||||
private boolean _shineDirection = true;
|
|
||||||
|
|
||||||
public GameScoreboard(Game game)
|
public GameScoreboard(Game game)
|
||||||
{
|
{
|
||||||
@ -37,8 +46,7 @@ public class GameScoreboard extends WritableMineplexScoreboard
|
|||||||
super(player);
|
super(player);
|
||||||
|
|
||||||
_game = game;
|
_game = game;
|
||||||
_title = " MINEPLEX ";
|
setSidebarName(TITLE[0]);
|
||||||
setSidebarName(C.Bold + _title);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -61,50 +69,11 @@ public class GameScoreboard extends WritableMineplexScoreboard
|
|||||||
|
|
||||||
public void updateTitle()
|
public void updateTitle()
|
||||||
{
|
{
|
||||||
String out;
|
setSidebarName(TITLE[_shineIndex]);
|
||||||
|
|
||||||
if (_shineDirection)
|
if (++_shineIndex == TITLE.length)
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
_shineIndex = 0;
|
_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)
|
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());
|
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<>();
|
Map<K, V> result = new LinkedHashMap<>();
|
||||||
for (Map.Entry<K, V> entry : list)
|
for (Map.Entry<K, V> entry : list)
|
||||||
|
Loading…
Reference in New Issue
Block a user