├── images ├── shop.png ├── locale.png ├── language.png ├── set_shop.png ├── add_diamond.png ├── edit_bwr_config.png ├── diamond_generator.png └── replace_language.png ├── src └── main │ ├── resources │ ├── images │ │ ├── 1.jpg │ │ └── README.txt │ ├── plugin.yml │ └── locale │ │ ├── zh_CN │ │ └── language.yml │ │ ├── zh_TW │ │ └── language.yml │ │ └── en_US │ │ └── language.yml │ └── java │ └── me │ └── ram │ └── bedwarsscoreboardaddon │ ├── menu │ ├── MenuType.java │ └── MenuManager.java │ ├── placeholder │ └── Placeholder.java │ ├── utils │ ├── PlaceholderAPIUtil.java │ ├── ServerJoinerUtil.java │ ├── LocationUtil.java │ ├── ColorUtil.java │ ├── NetworkUtil.java │ ├── UnicodeUtil.java │ ├── BedwarsUtil.java │ ├── ItemUtil.java │ └── Utils.java │ ├── config │ ├── EnumLocale.java │ └── LocaleConfig.java │ ├── listener │ ├── XPEventListener.java │ ├── ShopListener.java │ └── GameListener.java │ ├── addon │ ├── teamshop │ │ └── upgrades │ │ │ ├── Upgrade.java │ │ │ ├── UpgradeType.java │ │ │ ├── FastDig.java │ │ │ ├── Heal.java │ │ │ ├── Defense.java │ │ │ ├── Trap.java │ │ │ ├── AlarmTrap.java │ │ │ ├── CounterOffensiveTrap.java │ │ │ ├── Sharpness.java │ │ │ └── Protection.java │ ├── PlaySound.java │ ├── SpawnNoBuild.java │ ├── TimeTask.java │ ├── DeathMode.java │ ├── SelectTeam.java │ ├── GameChest.java │ ├── LobbyBlock.java │ ├── NoBreakBed.java │ ├── HealthLevel.java │ ├── FastRespawn.java │ ├── HidePlayer.java │ ├── WitherBow.java │ ├── LobbyScoreBoard.java │ ├── Actionbar.java │ ├── ChatFormat.java │ ├── Rejoin.java │ ├── ResourceUpgrade.java │ └── Graffiti.java │ ├── manager │ ├── ArenaManager.java │ ├── HolographicManager.java │ ├── PlaceholderManager.java │ └── EditHolographicManager.java │ ├── events │ ├── BedwarsTeamDeadEvent.java │ ├── BoardAddonPlayerRespawnEvent.java │ ├── BoardAddonDeathModeEvent.java │ ├── BoardAddonSetHealthEvent.java │ ├── BoardAddonPlayerRemoveRejoinEvent.java │ ├── BoardAddonPlayerRejoinedEvent.java │ ├── BoardAddonPlayerInvisibilityEvent.java │ ├── BoardAddonPlayerOpenItemShopEvent.java │ ├── BoardAddonPlayerOpenTeamShopEvent.java │ ├── BoardAddonResourceUpgradeEvent.java │ ├── BoardAddonPlayerRejoinEvent.java │ ├── BoardAddonPlayerAddRejoinEvent.java │ └── BoardAddonPlayerShootWitherBowEvent.java │ ├── storage │ └── PlayerGameStorage.java │ ├── commands │ ├── CommandTabCompleter.java │ └── BedwarsRelCommandTabCompleter.java │ └── network │ └── UpdateCheck.java └── README.md /images/shop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/shop.png -------------------------------------------------------------------------------- /images/locale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/locale.png -------------------------------------------------------------------------------- /images/language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/language.png -------------------------------------------------------------------------------- /images/set_shop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/set_shop.png -------------------------------------------------------------------------------- /images/add_diamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/add_diamond.png -------------------------------------------------------------------------------- /images/edit_bwr_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/edit_bwr_config.png -------------------------------------------------------------------------------- /images/diamond_generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/diamond_generator.png -------------------------------------------------------------------------------- /images/replace_language.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/images/replace_language.png -------------------------------------------------------------------------------- /src/main/resources/images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/HEAD/src/main/resources/images/1.jpg -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/menu/MenuType.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.menu; 2 | 3 | public enum MenuType { 4 | EDIT, EDIT_TEAM, EDIT_TEAM_BED, EDIT_TEAM_SPAWN, EDIT_SPAWNER, EDIT_TEAM_SPAWNER, EDIT_GAME_SPAWNER, TEAM_SHOP, TEAM_SHOP_TRAP 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/images/README.txt: -------------------------------------------------------------------------------- 1 | 该文件夹用于存放"喷漆涂鸦"图片. 2 | 建议图片大小128*128像素. 3 | 当有多张图片时,每次随机涂鸦一张图片. 4 | 5 | This folder is used to store "Graffiti" images. 6 | The recommended image size is 128*128 pixels. 7 | When there are multiple images, the image will be randomly graffiti. 8 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/placeholder/Placeholder.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.placeholder; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | import io.github.bedwarsrel.game.Game; 6 | import io.github.bedwarsrel.game.Team; 7 | 8 | public abstract class Placeholder { 9 | 10 | public abstract String onPlayerPlaceholderRequest(Game game, Player player); 11 | 12 | public abstract String onGamePlaceholderRequest(Game game); 13 | 14 | public abstract String onTeamPlaceholderRequest(Team team); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/PlaceholderAPIUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.entity.Player; 5 | 6 | import me.clip.placeholderapi.PlaceholderAPI; 7 | 8 | public class PlaceholderAPIUtil { 9 | 10 | public static String setPlaceholders(Player player, String text) { 11 | if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { 12 | return PlaceholderAPI.setPlaceholders(player, text); 13 | } 14 | return text; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/config/EnumLocale.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.config; 2 | 3 | public enum EnumLocale { 4 | EN_US("en_US"), 5 | ZH_CN("zh_CN"), 6 | ZH_TW("zh_TW"); 7 | 8 | private String name; 9 | 10 | private EnumLocale(String name) { 11 | this.name = name; 12 | } 13 | 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public static EnumLocale getByName(String n) { 19 | for (EnumLocale type : values()) { 20 | if (type.getName().equals(n)) { 21 | return type; 22 | } 23 | } 24 | return null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/listener/XPEventListener.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.listener; 2 | 3 | import org.bukkit.event.EventHandler; 4 | import org.bukkit.event.EventPriority; 5 | import org.bukkit.event.Listener; 6 | import org.bukkit.event.player.PlayerPickupItemEvent; 7 | 8 | import ldcr.BedwarsXP.EventListeners; 9 | 10 | public class XPEventListener extends EventListeners implements Listener { 11 | 12 | @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) 13 | public void onItemPickup(PlayerPickupItemEvent e) { 14 | super.onItemPickup(e); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/Upgrade.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import io.github.bedwarsrel.game.Game; 4 | import io.github.bedwarsrel.game.Team; 5 | 6 | public interface Upgrade { 7 | 8 | public UpgradeType getType(); 9 | 10 | public String getName(); 11 | 12 | public Game getGame(); 13 | 14 | public Team getTeam(); 15 | 16 | public int getLevel(); 17 | 18 | public void setLevel(int level); 19 | 20 | public String getBuyer(); 21 | 22 | public void setBuyer(String buyer); 23 | 24 | public void runUpgrade(); 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/manager/ArenaManager.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.manager; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 6 | 7 | public class ArenaManager { 8 | 9 | private Map arenas = new HashMap(); 10 | 11 | public void addArena(String game, Arena arena) { 12 | arenas.put(game, arena); 13 | } 14 | 15 | public void removeArena(String game) { 16 | arenas.remove(game); 17 | } 18 | 19 | public Arena getArena(String game) { 20 | return arenas.get(game); 21 | } 22 | 23 | public Map getArenas() { 24 | return arenas; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/ServerJoinerUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import org.bukkit.entity.Player; 4 | import com.mcjtf.ServerJoiner.Main; 5 | import com.mcjtf.ServerJoiner.Settings; 6 | import com.mcjtf.ServerJoiner.data.ServerGUI; 7 | 8 | public class ServerJoinerUtil { 9 | 10 | public static void sendServer(Player player, String group) { 11 | if (Main.serverGroup.containsKey(group)) { 12 | ServerGUI gui = Main.guiMap.get(group); 13 | String server = gui.getAutoJoinServer(); 14 | if (server == null) { 15 | player.sendMessage(Settings.msg_no_room); 16 | return; 17 | } 18 | Main.send(player, server); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BedwarsTeamDeadEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | import io.github.bedwarsrel.game.Game; 6 | import io.github.bedwarsrel.game.Team; 7 | 8 | public class BedwarsTeamDeadEvent extends Event { 9 | 10 | private static HandlerList handlers = new HandlerList(); 11 | private Game game; 12 | private Team team; 13 | 14 | public BedwarsTeamDeadEvent(Game game, Team team) { 15 | this.game = game; 16 | this.team = team; 17 | } 18 | 19 | public Game getGame() { 20 | return game; 21 | } 22 | 23 | public Team getTeam() { 24 | return team; 25 | } 26 | 27 | public HandlerList getHandlers() { 28 | return handlers; 29 | } 30 | 31 | public static HandlerList getHandlerList() { 32 | return handlers; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerRespawnEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | import io.github.bedwarsrel.game.Game; 7 | 8 | public class BoardAddonPlayerRespawnEvent extends Event { 9 | 10 | private static HandlerList handlers = new HandlerList(); 11 | private Game game; 12 | private Player player; 13 | 14 | public BoardAddonPlayerRespawnEvent(Game game, Player player) { 15 | this.game = game; 16 | this.player = player; 17 | } 18 | 19 | public Game getGame() { 20 | return game; 21 | } 22 | 23 | public Player getPlayer() { 24 | return player; 25 | } 26 | 27 | public HandlerList getHandlers() { 28 | return handlers; 29 | } 30 | 31 | public static HandlerList getHandlerList() { 32 | return handlers; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/LocationUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import org.bukkit.Location; 4 | import org.bukkit.util.Vector; 5 | 6 | public class LocationUtil { 7 | 8 | public static Location getPosition(Location location1, Location location2) { 9 | double X = location1.getX() - location2.getX(); 10 | double Y = location1.getY() - location2.getY(); 11 | double Z = location1.getZ() - location2.getZ(); 12 | return new Location(location1.getWorld(), location1.getX() + X, location1.getY() + Y, location1.getZ() + Z, location1.getYaw(), location1.getPitch()); 13 | } 14 | 15 | public static Vector getPositionVector(Location location1, Location location2) { 16 | double X = location1.getX() - location2.getX(); 17 | double Y = location1.getY() - location2.getY(); 18 | double Z = location1.getZ() - location2.getZ(); 19 | return new Vector(X, Y, Z); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonDeathModeEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | import io.github.bedwarsrel.game.Game; 6 | 7 | public class BoardAddonDeathModeEvent extends Event { 8 | 9 | private static HandlerList handlers = new HandlerList(); 10 | private Game game; 11 | private Boolean cancelled = false; 12 | 13 | public BoardAddonDeathModeEvent(Game game) { 14 | this.game = game; 15 | } 16 | 17 | public Game getGame() { 18 | return game; 19 | } 20 | 21 | public boolean isCancelled() { 22 | return this.cancelled; 23 | } 24 | 25 | public void setCancelled(boolean cancel) { 26 | this.cancelled = cancel; 27 | } 28 | 29 | public HandlerList getHandlers() { 30 | return handlers; 31 | } 32 | 33 | public static HandlerList getHandlerList() { 34 | return handlers; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonSetHealthEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | import io.github.bedwarsrel.game.Game; 6 | 7 | public class BoardAddonSetHealthEvent extends Event { 8 | 9 | private static HandlerList handlers = new HandlerList(); 10 | private Game game; 11 | private Boolean cancelled = false; 12 | 13 | public BoardAddonSetHealthEvent(Game game) { 14 | this.game = game; 15 | } 16 | 17 | public Game getGame() { 18 | return game; 19 | } 20 | 21 | public boolean isCancelled() { 22 | return this.cancelled; 23 | } 24 | 25 | public void setCancelled(boolean cancel) { 26 | this.cancelled = cancel; 27 | } 28 | 29 | public HandlerList getHandlers() { 30 | return handlers; 31 | } 32 | 33 | public static HandlerList getHandlerList() { 34 | return handlers; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/ColorUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import org.bukkit.ChatColor; 6 | 7 | public class ColorUtil { 8 | 9 | public static String color(String s) { 10 | return ChatColor.translateAlternateColorCodes('&', s); 11 | } 12 | 13 | public static List colorList(List list) { 14 | List clist = new ArrayList(); 15 | for (String l : list) { 16 | clist.add(ChatColor.translateAlternateColorCodes('&', l)); 17 | } 18 | return clist; 19 | } 20 | 21 | public static String removeColor(String s) { 22 | return ChatColor.stripColor(s); 23 | } 24 | 25 | public static List removeListColor(List list) { 26 | List clist = new ArrayList(); 27 | for (String l : list) { 28 | clist.add(ChatColor.stripColor(l)); 29 | } 30 | return clist; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/NetworkUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | import java.net.MalformedURLException; 7 | import java.net.URL; 8 | import java.net.URLConnection; 9 | 10 | public class NetworkUtil { 11 | 12 | public static String getDocument(String urlString) { 13 | StringBuffer document = new StringBuffer(""); 14 | try { 15 | URL url = new URL(urlString); 16 | URLConnection conn = url.openConnection(); 17 | BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 18 | String line = null; 19 | while ((line = reader.readLine()) != null) { 20 | document.append(line + " "); 21 | } 22 | reader.close(); 23 | } catch (MalformedURLException e) { 24 | return null; 25 | } catch (IOException e) { 26 | return null; 27 | } 28 | return document.toString(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerRemoveRejoinEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | import io.github.bedwarsrel.game.Game; 6 | import me.ram.bedwarsscoreboardaddon.addon.Rejoin; 7 | 8 | public class BoardAddonPlayerRemoveRejoinEvent extends Event { 9 | 10 | private static HandlerList handlers = new HandlerList(); 11 | private Game game; 12 | private String player; 13 | private Rejoin rejoin; 14 | 15 | public BoardAddonPlayerRemoveRejoinEvent(Game game, String player, Rejoin rejoin) { 16 | this.game = game; 17 | this.player = player; 18 | this.rejoin = rejoin; 19 | } 20 | 21 | public Game getGame() { 22 | return game; 23 | } 24 | 25 | public String getPlayer() { 26 | return player; 27 | } 28 | 29 | public Rejoin getRejoin() { 30 | return rejoin; 31 | } 32 | 33 | public HandlerList getHandlers() { 34 | return handlers; 35 | } 36 | 37 | public static HandlerList getHandlerList() { 38 | return handlers; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerRejoinedEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | import io.github.bedwarsrel.game.Game; 7 | import me.ram.bedwarsscoreboardaddon.addon.Rejoin; 8 | 9 | public class BoardAddonPlayerRejoinedEvent extends Event { 10 | 11 | private static HandlerList handlers = new HandlerList(); 12 | private Game game; 13 | private Player player; 14 | private Rejoin rejoin; 15 | 16 | public BoardAddonPlayerRejoinedEvent(Game game, Player player, Rejoin rejoin) { 17 | this.game = game; 18 | this.player = player; 19 | this.rejoin = rejoin; 20 | } 21 | 22 | public Game getGame() { 23 | return game; 24 | } 25 | 26 | public Player getPlayer() { 27 | return player; 28 | } 29 | 30 | public Rejoin getRejoin() { 31 | return rejoin; 32 | } 33 | 34 | public HandlerList getHandlers() { 35 | return handlers; 36 | } 37 | 38 | public static HandlerList getHandlerList() { 39 | return handlers; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerInvisibilityEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | import io.github.bedwarsrel.game.Game; 8 | 9 | public class BoardAddonPlayerInvisibilityEvent extends Event { 10 | 11 | private static HandlerList handlers = new HandlerList(); 12 | private Game game; 13 | private Player player; 14 | private Boolean cancelled = false; 15 | 16 | public BoardAddonPlayerInvisibilityEvent(Game game, Player player) { 17 | this.game = game; 18 | this.player = player; 19 | } 20 | 21 | public Game getGame() { 22 | return game; 23 | } 24 | 25 | public Player getPlayer() { 26 | return player; 27 | } 28 | 29 | public boolean isCancelled() { 30 | return cancelled; 31 | } 32 | 33 | public void setCancelled(boolean cancel) { 34 | cancelled = cancel; 35 | } 36 | 37 | public HandlerList getHandlers() { 38 | return handlers; 39 | } 40 | 41 | public static HandlerList getHandlerList() { 42 | return handlers; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerOpenItemShopEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | import io.github.bedwarsrel.game.Game; 7 | 8 | public class BoardAddonPlayerOpenItemShopEvent extends Event { 9 | 10 | private static HandlerList handlers = new HandlerList(); 11 | private Game game; 12 | private Player player; 13 | private Boolean cancelled = false; 14 | 15 | public BoardAddonPlayerOpenItemShopEvent(Game game, Player player) { 16 | this.game = game; 17 | this.player = player; 18 | } 19 | 20 | public Game getGame() { 21 | return game; 22 | } 23 | 24 | public Player getPlayer() { 25 | return player; 26 | } 27 | 28 | public boolean isCancelled() { 29 | return this.cancelled; 30 | } 31 | 32 | public void setCancelled(boolean cancel) { 33 | this.cancelled = cancel; 34 | } 35 | 36 | public HandlerList getHandlers() { 37 | return handlers; 38 | } 39 | 40 | public static HandlerList getHandlerList() { 41 | return handlers; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerOpenTeamShopEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | import io.github.bedwarsrel.game.Game; 7 | 8 | public class BoardAddonPlayerOpenTeamShopEvent extends Event { 9 | 10 | private static HandlerList handlers = new HandlerList(); 11 | private Game game; 12 | private Player player; 13 | private Boolean cancelled = false; 14 | 15 | public BoardAddonPlayerOpenTeamShopEvent(Game game, Player player) { 16 | this.game = game; 17 | this.player = player; 18 | } 19 | 20 | public Game getGame() { 21 | return game; 22 | } 23 | 24 | public Player getPlayer() { 25 | return player; 26 | } 27 | 28 | public boolean isCancelled() { 29 | return this.cancelled; 30 | } 31 | 32 | public void setCancelled(boolean cancel) { 33 | this.cancelled = cancel; 34 | } 35 | 36 | public HandlerList getHandlers() { 37 | return handlers; 38 | } 39 | 40 | public static HandlerList getHandlerList() { 41 | return handlers; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/UpgradeType.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | public enum UpgradeType { 4 | 5 | FAST_DIG("FastDig", FastDig.class, false), 6 | SHARPNESS("Sharpness", FastDig.class, false), 7 | PROTECTION("Sharpness", Protection.class, false), 8 | HEAL("Heal", Heal.class, false), 9 | IRON_FORGE("IronForge", IronForge.class, false), 10 | TRAP("Trap", Trap.class, true), 11 | DEFENSE("Defense", Defense.class, true), 12 | COUNTER_OFFENSIVE_TRAP("CounterOffensiveTrap", CounterOffensiveTrap.class, true), 13 | ALARM_TRAP("AlarmTrap", AlarmTrap.class, true); 14 | 15 | private String name; 16 | private Class clazz; 17 | private boolean is_trap; 18 | 19 | private UpgradeType(String name, Class clazz, boolean is_trap) { 20 | this.name = name; 21 | this.clazz = clazz; 22 | this.is_trap = is_trap; 23 | } 24 | 25 | public String getName() { 26 | return name; 27 | } 28 | 29 | public Class getUpgradeClass() { 30 | return clazz; 31 | } 32 | 33 | public boolean isTrap() { 34 | return is_trap; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonResourceUpgradeEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import java.util.List; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | import io.github.bedwarsrel.game.Game; 7 | 8 | public class BoardAddonResourceUpgradeEvent extends Event { 9 | 10 | private static HandlerList handlers = new HandlerList(); 11 | private Game game; 12 | private List upgrade; 13 | private Boolean cancelled = false; 14 | 15 | public BoardAddonResourceUpgradeEvent(Game game, List upgrade) { 16 | this.game = game; 17 | this.upgrade = upgrade; 18 | } 19 | 20 | public Game getGame() { 21 | return game; 22 | } 23 | 24 | public List getUpgrade() { 25 | return upgrade; 26 | } 27 | 28 | public void setUpgrade(List upgrade) { 29 | this.upgrade = upgrade; 30 | } 31 | 32 | public boolean isCancelled() { 33 | return this.cancelled; 34 | } 35 | 36 | public void setCancelled(boolean cancel) { 37 | this.cancelled = cancel; 38 | } 39 | 40 | public HandlerList getHandlers() { 41 | return handlers; 42 | } 43 | 44 | public static HandlerList getHandlerList() { 45 | return handlers; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/manager/HolographicManager.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.manager; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.bukkit.entity.Player; 7 | 8 | import me.ram.bedwarsscoreboardaddon.api.HolographicAPI; 9 | 10 | public class HolographicManager { 11 | 12 | private List holographics; 13 | 14 | public HolographicManager() { 15 | holographics = new ArrayList(); 16 | } 17 | 18 | public void addHolographic(HolographicAPI holo) { 19 | if (!holographics.contains(holo)) { 20 | holographics.add(holo); 21 | } 22 | } 23 | 24 | public void removeHolographic(HolographicAPI holo) { 25 | if (holographics.contains(holo)) { 26 | holographics.remove(holo); 27 | } 28 | } 29 | 30 | public void deleteHolographic(HolographicAPI holo) { 31 | if (holographics.contains(holo)) { 32 | holo.remove(); 33 | holographics.remove(holo); 34 | } 35 | } 36 | 37 | public List getPlayerHolographic(Player player) { 38 | List list = new ArrayList(); 39 | for (HolographicAPI holo : holographics) { 40 | if (holo.getPlayers().contains(player)) { 41 | list.add(holo); 42 | } 43 | } 44 | return list; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerRejoinEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | import io.github.bedwarsrel.game.Game; 7 | import me.ram.bedwarsscoreboardaddon.addon.Rejoin; 8 | 9 | public class BoardAddonPlayerRejoinEvent extends Event { 10 | 11 | private static HandlerList handlers = new HandlerList(); 12 | private Game game; 13 | private Player player; 14 | private Boolean cancelled = false; 15 | private Rejoin rejoin; 16 | 17 | public BoardAddonPlayerRejoinEvent(Game game, Player player, Rejoin rejoin) { 18 | this.game = game; 19 | this.player = player; 20 | this.rejoin = rejoin; 21 | } 22 | 23 | public Game getGame() { 24 | return game; 25 | } 26 | 27 | public Player getPlayer() { 28 | return player; 29 | } 30 | 31 | public Rejoin getRejoin() { 32 | return rejoin; 33 | } 34 | 35 | public boolean isCancelled() { 36 | return cancelled; 37 | } 38 | 39 | public void setCancelled(boolean cancel) { 40 | cancelled = cancel; 41 | } 42 | 43 | public HandlerList getHandlers() { 44 | return handlers; 45 | } 46 | 47 | public static HandlerList getHandlerList() { 48 | return handlers; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerAddRejoinEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | import io.github.bedwarsrel.game.Game; 8 | import me.ram.bedwarsscoreboardaddon.addon.Rejoin; 9 | 10 | public class BoardAddonPlayerAddRejoinEvent extends Event { 11 | 12 | private static HandlerList handlers = new HandlerList(); 13 | private Game game; 14 | private Player player; 15 | private Boolean cancelled = false; 16 | private Rejoin rejoin; 17 | 18 | public BoardAddonPlayerAddRejoinEvent(Game game, Player player, Rejoin rejoin) { 19 | this.game = game; 20 | this.player = player; 21 | this.rejoin = rejoin; 22 | } 23 | 24 | public Game getGame() { 25 | return game; 26 | } 27 | 28 | public Player getPlayer() { 29 | return player; 30 | } 31 | 32 | public Rejoin getRejoin() { 33 | return rejoin; 34 | } 35 | 36 | public boolean isCancelled() { 37 | return cancelled; 38 | } 39 | 40 | public void setCancelled(boolean cancel) { 41 | cancelled = cancel; 42 | } 43 | 44 | public HandlerList getHandlers() { 45 | return handlers; 46 | } 47 | 48 | public static HandlerList getHandlerList() { 49 | return handlers; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/events/BoardAddonPlayerShootWitherBowEvent.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.events; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.entity.WitherSkull; 5 | import org.bukkit.event.Event; 6 | import org.bukkit.event.HandlerList; 7 | import io.github.bedwarsrel.game.Game; 8 | 9 | public class BoardAddonPlayerShootWitherBowEvent extends Event { 10 | 11 | private static HandlerList handlers = new HandlerList(); 12 | private Game game; 13 | private Player player; 14 | private WitherSkull witherSkull; 15 | private Boolean cancelled = false; 16 | 17 | public BoardAddonPlayerShootWitherBowEvent(Game game, Player player, WitherSkull witherSkull) { 18 | this.game = game; 19 | this.player = player; 20 | this.witherSkull = witherSkull; 21 | } 22 | 23 | public Game getGame() { 24 | return game; 25 | } 26 | 27 | public Player getPlayer() { 28 | return player; 29 | } 30 | 31 | public WitherSkull getWitherSkull() { 32 | return witherSkull; 33 | } 34 | 35 | public boolean isCancelled() { 36 | return this.cancelled; 37 | } 38 | 39 | public void setCancelled(boolean cancel) { 40 | this.cancelled = cancel; 41 | } 42 | 43 | public HandlerList getHandlers() { 44 | return handlers; 45 | } 46 | 47 | public static HandlerList getHandlerList() { 48 | return handlers; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/FastDig.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.potion.PotionEffect; 5 | import org.bukkit.potion.PotionEffectType; 6 | 7 | import io.github.bedwarsrel.game.Game; 8 | import io.github.bedwarsrel.game.Team; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | import me.ram.bedwarsscoreboardaddon.config.Config; 12 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 13 | 14 | public class FastDig implements Upgrade { 15 | 16 | @Getter 17 | private Game game; 18 | @Getter 19 | private Team team; 20 | @Getter 21 | @Setter 22 | private int level; 23 | @Getter 24 | @Setter 25 | private String buyer; 26 | 27 | public FastDig(Game game, Team team, int level) { 28 | this.game = game; 29 | this.team = team; 30 | this.level = level; 31 | } 32 | 33 | public UpgradeType getType() { 34 | return UpgradeType.FAST_DIG; 35 | } 36 | 37 | public String getName() { 38 | return Config.teamshop_upgrade_name.get(getType()); 39 | } 40 | 41 | public void runUpgrade() { 42 | if (level < 1) { 43 | return; 44 | } 45 | for (Player p : team.getPlayers()) { 46 | if (!BedwarsUtil.isSpectator(game, p)) { 47 | p.addPotionEffect(new PotionEffect(PotionEffectType.FAST_DIGGING, 30, getLevel() - 1), true); 48 | } 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/storage/PlayerGameStorage.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.storage; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | import io.github.bedwarsrel.game.Game; 6 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 7 | 8 | public class PlayerGameStorage { 9 | 10 | private Arena arena; 11 | private Map totalkills; 12 | private Map kills; 13 | private Map finalkills; 14 | private Map dies; 15 | private Map beds; 16 | 17 | public PlayerGameStorage(Arena arena) { 18 | this.arena = arena; 19 | totalkills = new HashMap(); 20 | kills = new HashMap(); 21 | finalkills = new HashMap(); 22 | dies = new HashMap(); 23 | beds = new HashMap(); 24 | } 25 | 26 | public Arena getArena() { 27 | return arena; 28 | } 29 | 30 | public Game getGame() { 31 | return arena.getGame(); 32 | } 33 | 34 | public Map getPlayerTotalKills() { 35 | return totalkills; 36 | } 37 | 38 | public Map getPlayerKills() { 39 | return kills; 40 | } 41 | 42 | public Map getPlayerFinalKills() { 43 | return finalkills; 44 | } 45 | 46 | public Map getPlayerDies() { 47 | return dies; 48 | } 49 | 50 | public Map getPlayerBeds() { 51 | return beds; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/UnicodeUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import java.util.regex.Pattern; 4 | 5 | public final class UnicodeUtil { 6 | 7 | private static final String singlePattern = "[0-9|a-f|A-F]"; 8 | private static final String pattern = singlePattern + singlePattern + singlePattern + singlePattern; 9 | 10 | private static String ustartToCn(final String str) { 11 | StringBuilder sb = new StringBuilder().append("0x").append(str.substring(2, 6)); 12 | Integer codeInteger = Integer.decode(sb.toString()); 13 | int code = codeInteger.intValue(); 14 | char c = (char) code; 15 | return String.valueOf(c); 16 | } 17 | 18 | private static boolean isStartWithUnicode(final String str) { 19 | if (null == str || str.length() == 0) { 20 | return false; 21 | } 22 | if (!str.startsWith("\\u")) { 23 | return false; 24 | } 25 | if (str.length() < 6) { 26 | return false; 27 | } 28 | String content = str.substring(2, 6); 29 | boolean isMatch = Pattern.matches(pattern, content); 30 | return isMatch; 31 | } 32 | 33 | public static String unicodeToCn(final String str) { 34 | StringBuilder sb = new StringBuilder(); 35 | int length = str.length(); 36 | for (int i = 0; i < length;) { 37 | String tmpStr = str.substring(i); 38 | if (isStartWithUnicode(tmpStr)) { 39 | sb.append(ustartToCn(tmpStr)); 40 | i += 6; 41 | } else { 42 | sb.append(str.substring(i, i + 1)); 43 | i++; 44 | } 45 | } 46 | return sb.toString(); 47 | } 48 | } -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/BedwarsUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | import io.github.bedwarsrel.BedwarsRel; 6 | import io.github.bedwarsrel.game.Game; 7 | import io.github.bedwarsrel.game.Team; 8 | import me.ram.bedwarsscoreboardaddon.Main; 9 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 10 | 11 | public class BedwarsUtil { 12 | 13 | public static boolean isRespawning(Player player) { 14 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 15 | if (game == null) { 16 | return false; 17 | } 18 | return isRespawning(game, player); 19 | } 20 | 21 | public static boolean isRespawning(Game game, Player player) { 22 | Arena arena = Main.getInstance().getArenaManager().getArena(game.getName()); 23 | if (arena == null) { 24 | return false; 25 | } 26 | return arena.getRespawn().isRespawning(player); 27 | } 28 | 29 | public static boolean isSpectator(Player player) { 30 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 31 | if (game == null) { 32 | return false; 33 | } 34 | return isSpectator(game, player); 35 | } 36 | 37 | public static boolean isSpectator(Game game, Player player) { 38 | return game.isSpectator(player) || isRespawning(game, player); 39 | } 40 | 41 | public static boolean isDieOut(Game game, Team team) { 42 | if (!team.isDead(game)) { 43 | return false; 44 | } 45 | for (Player player : team.getPlayers()) { 46 | if (!game.isSpectator(player)) { 47 | return false; 48 | } 49 | } 50 | return true; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | description: | 2 | ############################################## 3 | # # 4 | # BedwarsScoreBoardAddon # 5 | # # 6 | # This is a plugin running on BedwarsRel # 7 | # It can expand your BedWars function # 8 | # Make your BedWars more fun! # 9 | # # 10 | ############################################## 11 | name: BedwarsScoreBoardAddon 12 | main: me.ram.bedwarsscoreboardaddon.Main 13 | version: ${versionstring} 14 | author: Ram 15 | website: https://github.com/TheRamU/BedwarsScoreBoardAddon 16 | depends: [BedwarsRel, ProtocolLib] 17 | softdepends: [Citizens, PlaceholderAPI, ServerJoiner, WorldEdit] 18 | 19 | commands: 20 | bedwarsscoreboardaddon: 21 | description: Base command. 22 | aliases: [bwsba] 23 | shout: 24 | description: Shout to everyone. 25 | rejoin: 26 | description: Rejoin the game. 27 | 28 | permissions: 29 | bedwarsscoreboardaddon.reload: 30 | default: op 31 | bedwarsscoreboardaddon.updatecheck: 32 | default: op 33 | bedwarsscoreboardaddon.edit: 34 | default: op 35 | bedwarsscoreboardaddon.teleport: 36 | default: op 37 | bedwarsscoreboardaddon.shop.list: 38 | default: op 39 | bedwarsscoreboardaddon.shop.set: 40 | default: op 41 | bedwarsscoreboardaddon.shop.remove: 42 | default: op 43 | bedwarsscoreboardaddon.spawner.list: 44 | default: op 45 | bedwarsscoreboardaddon.spawner.set: 46 | default: op 47 | bedwarsscoreboardaddon.spawner.remove: 48 | default: op 49 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/PlaySound.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.List; 4 | import java.util.Random; 5 | import org.bukkit.Sound; 6 | import org.bukkit.entity.Player; 7 | import io.github.bedwarsrel.game.Game; 8 | import me.ram.bedwarsscoreboardaddon.config.Config; 9 | 10 | public class PlaySound { 11 | 12 | public static void playSound(Game game, List list) { 13 | if (Config.play_sound_enabled) { 14 | String sound = getRandomSound(list); 15 | if (sound != null) { 16 | String[] ary = sound.split(","); 17 | Sound playsound = getSound(ary[0]); 18 | if (playsound == null) { 19 | return; 20 | } 21 | for (Player player : game.getPlayers()) { 22 | player.playSound(player.getLocation(), playsound, Float.valueOf(ary[1]), Float.valueOf(ary[2])); 23 | } 24 | } 25 | } 26 | } 27 | 28 | public static void playSound(Player player, List list) { 29 | if (Config.play_sound_enabled) { 30 | String sound = getRandomSound(list); 31 | if (sound == null) { 32 | return; 33 | } 34 | String[] ary = sound.split(","); 35 | Sound playsound = getSound(ary[0]); 36 | if (playsound == null) { 37 | return; 38 | } 39 | player.playSound(player.getLocation(), playsound, Float.valueOf(ary[1]), Float.valueOf(ary[2])); 40 | } 41 | } 42 | 43 | private static String getRandomSound(List list) { 44 | if (list.size() > 0) { 45 | Random random = new Random(); 46 | int n = random.nextInt(list.size()); 47 | return list.get(n); 48 | } 49 | return null; 50 | } 51 | 52 | private static Sound getSound(String name) { 53 | try { 54 | Sound sound = Sound.valueOf(name); 55 | return sound; 56 | } catch (Exception e) { 57 | return null; 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/Heal.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import org.bukkit.Effect; 4 | import org.bukkit.GameMode; 5 | import org.bukkit.Location; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.potion.PotionEffect; 8 | import org.bukkit.potion.PotionEffectType; 9 | 10 | import io.github.bedwarsrel.game.Game; 11 | import io.github.bedwarsrel.game.Team; 12 | import lombok.Getter; 13 | import lombok.Setter; 14 | import me.ram.bedwarsscoreboardaddon.config.Config; 15 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 16 | 17 | public class Heal implements Upgrade { 18 | 19 | @Getter 20 | private Game game; 21 | @Getter 22 | private Team team; 23 | @Getter 24 | @Setter 25 | private int level; 26 | @Getter 27 | @Setter 28 | private String buyer; 29 | private int i; 30 | 31 | public Heal(Game game, Team team, int level) { 32 | this.game = game; 33 | this.team = team; 34 | this.level = level; 35 | i = 0; 36 | } 37 | 38 | public UpgradeType getType() { 39 | return UpgradeType.HEAL; 40 | } 41 | 42 | public String getName() { 43 | return Config.teamshop_upgrade_name.get(getType()); 44 | } 45 | 46 | public void runUpgrade() { 47 | if (level < 1) { 48 | return; 49 | } 50 | for (Player player : team.getPlayers()) { 51 | if (!BedwarsUtil.isSpectator(game, player) && player.getGameMode() != GameMode.SPECTATOR) { 52 | if (team.getTargetFeetBlock().distance(player.getLocation()) <= Config.teamshop_upgrade_heal_trigger_range) { 53 | player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 30, 1), true); 54 | } 55 | } 56 | } 57 | if (i >= 6) { 58 | i = 0; 59 | Location location = team.getTargetHeadBlock().clone().add(0.5, 1, 0.5); 60 | for (Player player : team.getPlayers()) { 61 | for (int i = 0; i < 10; i++) { 62 | player.playEffect(location.clone().add((Math.random() - Math.random()) * Config.teamshop_upgrade_heal_trigger_range, (Math.random() - Math.random()) * Config.teamshop_upgrade_heal_trigger_range, (Math.random() - Math.random()) * Config.teamshop_upgrade_heal_trigger_range), Effect.HAPPY_VILLAGER, 0); 63 | } 64 | } 65 | } 66 | i++; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/Defense.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import org.bukkit.GameMode; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | import io.github.bedwarsrel.game.Game; 9 | import io.github.bedwarsrel.game.Team; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import me.ram.bedwarsscoreboardaddon.Main; 13 | import me.ram.bedwarsscoreboardaddon.addon.teamshop.TeamShop; 14 | import me.ram.bedwarsscoreboardaddon.config.Config; 15 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 16 | 17 | public class Defense implements Upgrade { 18 | 19 | @Getter 20 | private Game game; 21 | @Getter 22 | private Team team; 23 | @Getter 24 | @Setter 25 | private int level; 26 | @Getter 27 | @Setter 28 | private String buyer; 29 | 30 | public Defense(Game game, Team team, int level) { 31 | this.game = game; 32 | this.team = team; 33 | this.level = level; 34 | } 35 | 36 | public UpgradeType getType() { 37 | return UpgradeType.DEFENSE; 38 | } 39 | 40 | public String getName() { 41 | return Config.teamshop_upgrade_name.get(getType()); 42 | } 43 | 44 | public void runUpgrade() { 45 | if (level < 1) { 46 | return; 47 | } 48 | TeamShop teamShop = Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop(); 49 | for (Player player : game.getPlayers()) { 50 | if (BedwarsUtil.isSpectator(game, player) || player.getGameMode() == GameMode.SPECTATOR) { 51 | continue; 52 | } 53 | if (team.getTargetFeetBlock().distanceSquared(player.getLocation()) <= Math.pow(Config.teamshop_upgrade_defense_trigger_range, 2) && team != game.getPlayerTeam(player)) { 54 | if (teamShop.isCoolingPlayer(team, player) || teamShop.isImmunePlayer(player)) { 55 | continue; 56 | } 57 | level = 0; 58 | player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 200, 0), true); 59 | teamShop.removeTrap(this); 60 | teamShop.addCoolingPlayer(team, player); 61 | if (team.getPlayers().size() > 0) { 62 | Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop().updateTeamShop(team.getPlayers().get(0)); 63 | } 64 | break; 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/ItemUtil.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import java.util.List; 4 | import java.util.Set; 5 | 6 | import org.bukkit.Material; 7 | import org.bukkit.inventory.ItemFlag; 8 | import org.bukkit.inventory.ItemStack; 9 | import org.bukkit.inventory.meta.ItemMeta; 10 | 11 | public class ItemUtil { 12 | 13 | public static ItemStack createItem(String name) { 14 | try { 15 | return new ItemStack(Material.valueOf(name)); 16 | } catch (Exception e) { 17 | } 18 | return new ItemStack(Material.AIR); 19 | } 20 | 21 | public static ItemStack createItem(String name, int amount) { 22 | try { 23 | return new ItemStack(Material.valueOf(name), amount); 24 | } catch (Exception e) { 25 | } 26 | return new ItemStack(Material.AIR); 27 | } 28 | 29 | public static ItemStack createItem(String name, int amount, short damage) { 30 | try { 31 | return new ItemStack(Material.valueOf(name), amount, damage); 32 | } catch (Exception e) { 33 | } 34 | return new ItemStack(Material.AIR); 35 | } 36 | 37 | public static void setItemName(ItemStack item, String name) { 38 | ItemMeta meta = item.getItemMeta(); 39 | meta.setDisplayName(name); 40 | item.setItemMeta(meta); 41 | } 42 | 43 | public static void setItemLore(ItemStack item, List lore) { 44 | ItemMeta meta = item.getItemMeta(); 45 | meta.setLore(lore); 46 | item.setItemMeta(meta); 47 | } 48 | 49 | public static void setItemUnbreak(ItemStack item, boolean unbreak) { 50 | ItemMeta meta = item.getItemMeta(); 51 | try { 52 | meta.setUnbreakable(unbreak); 53 | } catch (Exception e) { 54 | meta.spigot().setUnbreakable(unbreak); 55 | } 56 | item.setItemMeta(meta); 57 | } 58 | 59 | public static void addItemFlags(ItemStack item, ItemFlag... flags) { 60 | ItemMeta meta = item.getItemMeta(); 61 | meta.addItemFlags(flags); 62 | item.setItemMeta(meta); 63 | } 64 | 65 | public String getItemName(ItemStack item) { 66 | ItemMeta meta = item.getItemMeta(); 67 | if (!meta.hasDisplayName()) { 68 | return item.getType().name(); 69 | } 70 | return item.getItemMeta().getDisplayName(); 71 | } 72 | 73 | public List getItemLore(ItemStack item) { 74 | return item.getItemMeta().getLore(); 75 | } 76 | 77 | public Set getItemFlags(ItemStack item) { 78 | return item.getItemMeta().getItemFlags(); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/SpawnNoBuild.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.List; 4 | 5 | import org.bukkit.Location; 6 | import org.bukkit.block.Block; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.EventHandler; 9 | import org.bukkit.event.EventPriority; 10 | import org.bukkit.event.Listener; 11 | import org.bukkit.event.block.BlockPlaceEvent; 12 | import io.github.bedwarsrel.BedwarsRel; 13 | import io.github.bedwarsrel.game.Game; 14 | import io.github.bedwarsrel.game.GameState; 15 | import io.github.bedwarsrel.game.ResourceSpawner; 16 | import io.github.bedwarsrel.game.Team; 17 | import me.ram.bedwarsscoreboardaddon.config.Config; 18 | 19 | public class SpawnNoBuild implements Listener { 20 | 21 | @EventHandler(priority = EventPriority.HIGHEST) 22 | public void onPlace(BlockPlaceEvent e) { 23 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(e.getPlayer()); 24 | if (game == null) { 25 | return; 26 | } 27 | if (game.getState() != GameState.RUNNING) { 28 | return; 29 | } 30 | Block block = e.getBlock(); 31 | Player player = e.getPlayer(); 32 | if (Config.spawn_no_build_spawn_enabled) { 33 | for (Team team : game.getTeams().values()) { 34 | if (team.getSpawnLocation().distanceSquared(block.getLocation().clone().add(0.5, 0, 0.5)) <= Math.pow(Config.spawn_no_build_spawn_range, 2)) { 35 | e.setCancelled(true); 36 | player.sendMessage(Config.spawn_no_build_message); 37 | return; 38 | } 39 | } 40 | } 41 | if (Config.spawn_no_build_resource_enabled) { 42 | for (ResourceSpawner spawner : game.getResourceSpawners()) { 43 | if (spawner.getLocation().distanceSquared(block.getLocation().clone().add(0.5, 0, 0.5)) <= Math.pow(Config.spawn_no_build_resource_range, 2)) { 44 | e.setCancelled(true); 45 | player.sendMessage(Config.spawn_no_build_message); 46 | return; 47 | } 48 | } 49 | if (!Config.game_team_spawner.containsKey(game.getName())) { 50 | return; 51 | } 52 | for (List locs : Config.game_team_spawner.get(game.getName()).values()) { 53 | for (Location loc : locs) { 54 | if (loc.distanceSquared(block.getLocation().clone().add(0.5, 0, 0.5)) <= Math.pow(Config.spawn_no_build_resource_range, 2)) { 55 | e.setCancelled(true); 56 | player.sendMessage(Config.spawn_no_build_message); 57 | return; 58 | } 59 | } 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/TimeTask.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.List; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.command.CommandSender; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.scheduler.BukkitRunnable; 8 | import io.github.bedwarsrel.game.Game; 9 | import lombok.Getter; 10 | import me.ram.bedwarsscoreboardaddon.Main; 11 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 12 | import me.ram.bedwarsscoreboardaddon.config.Config; 13 | import me.ram.bedwarsscoreboardaddon.utils.ColorUtil; 14 | 15 | public class TimeTask { 16 | 17 | @Getter 18 | private Game game; 19 | @Getter 20 | private Arena arena; 21 | 22 | public TimeTask(Arena arena) { 23 | this.arena = arena; 24 | this.game = arena.getGame(); 25 | for (String cmd : Config.timecommand_startcommand) { 26 | if (cmd.equals("")) { 27 | continue; 28 | } 29 | if (cmd.contains("{player}")) { 30 | for (Player player : game.getPlayers()) { 31 | Bukkit.getServer().dispatchCommand((CommandSender) Bukkit.getServer().getConsoleSender(), ColorUtil.color(cmd.replace("{player}", player.getName()))); 32 | } 33 | } else { 34 | Bukkit.getServer().dispatchCommand((CommandSender) Bukkit.getServer().getConsoleSender(), ColorUtil.color(cmd)); 35 | } 36 | } 37 | for (String cmds : Main.getInstance().getConfig().getConfigurationSection("timecommand").getKeys(false)) { 38 | arena.addGameTask(new BukkitRunnable() { 39 | int gametime = Main.getInstance().getConfig().getInt("timecommand." + cmds + ".gametime"); 40 | List cmdlist = Main.getInstance().getConfig().getStringList("timecommand." + cmds + ".command"); 41 | 42 | @Override 43 | public void run() { 44 | if (game.getTimeLeft() <= gametime) { 45 | for (String cmd : cmdlist) { 46 | if (cmd.equals("")) { 47 | continue; 48 | } 49 | if (cmd.contains("{player}")) { 50 | for (Player player : game.getPlayers()) { 51 | Bukkit.getServer().dispatchCommand((CommandSender) Bukkit.getServer().getConsoleSender(), ColorUtil.color(cmd.replace("{player}", player.getName()))); 52 | } 53 | } else { 54 | Bukkit.getServer().dispatchCommand((CommandSender) Bukkit.getServer().getConsoleSender(), ColorUtil.color(cmd)); 55 | } 56 | } 57 | cancel(); 58 | } 59 | } 60 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/menu/MenuManager.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.menu; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.inventory.Inventory; 10 | 11 | public class MenuManager { 12 | 13 | private Map players; 14 | private Map player_inv; 15 | private Map> player_value; 16 | 17 | public MenuManager() { 18 | players = new HashMap(); 19 | player_inv = new HashMap(); 20 | player_value = new HashMap>(); 21 | } 22 | 23 | public void addPlayer(Player player, MenuType type, Inventory inventory) { 24 | Inventory inv = player.getOpenInventory().getTopInventory(); 25 | if (inv == null || !inv.equals(inventory)) { 26 | return; 27 | } 28 | players.put(player, type); 29 | player_inv.put(player, inventory); 30 | } 31 | 32 | public void addPlayer(Player player, MenuType type, Inventory inventory, Map value) { 33 | Inventory inv = player.getOpenInventory().getTopInventory(); 34 | if (inv == null || !inv.equals(inventory)) { 35 | return; 36 | } 37 | players.put(player, type); 38 | player_inv.put(player, inventory); 39 | player_value.put(player, value); 40 | } 41 | 42 | public void removePlayer(Player player) { 43 | if (players.containsKey(player)) { 44 | players.remove(player); 45 | } 46 | if (player_inv.containsKey(player)) { 47 | player_inv.remove(player); 48 | } 49 | if (player_value.containsKey(player)) { 50 | player_value.remove(player); 51 | } 52 | } 53 | 54 | public Inventory getInventory(Player player) { 55 | if (player_inv.containsKey(player)) { 56 | return player_inv.get(player); 57 | } 58 | return null; 59 | } 60 | 61 | public Map getValue(Player player) { 62 | if (player_value.containsKey(player)) { 63 | return player_value.get(player); 64 | } 65 | return null; 66 | } 67 | 68 | public boolean isOpen(Player player) { 69 | if (!players.containsKey(player)) { 70 | return false; 71 | } 72 | if (!player_inv.containsKey(player)) { 73 | return false; 74 | } 75 | Inventory inv = player.getOpenInventory().getTopInventory(); 76 | return inv != null && inv.equals(player_inv.get(player)); 77 | } 78 | 79 | public boolean isOpen(Player player, MenuType type) { 80 | if (!isOpen(player)) { 81 | return false; 82 | } 83 | return players.get(player).equals(type); 84 | } 85 | 86 | public List getPlayers() { 87 | List list = new ArrayList(); 88 | list.addAll(players.keySet()); 89 | return list; 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/Trap.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import org.bukkit.GameMode; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | import io.github.bedwarsrel.game.Game; 9 | import io.github.bedwarsrel.game.Team; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import me.ram.bedwarsscoreboardaddon.Main; 13 | import me.ram.bedwarsscoreboardaddon.addon.teamshop.TeamShop; 14 | import me.ram.bedwarsscoreboardaddon.config.Config; 15 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 16 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 17 | 18 | public class Trap implements Upgrade { 19 | 20 | @Getter 21 | private Game game; 22 | @Getter 23 | private Team team; 24 | @Getter 25 | @Setter 26 | private int level; 27 | @Getter 28 | @Setter 29 | private String buyer; 30 | 31 | public Trap(Game game, Team team, int level) { 32 | this.game = game; 33 | this.team = team; 34 | this.level = level; 35 | } 36 | 37 | public UpgradeType getType() { 38 | return UpgradeType.TRAP; 39 | } 40 | 41 | public String getName() { 42 | return Config.teamshop_upgrade_name.get(getType()); 43 | } 44 | 45 | public void runUpgrade() { 46 | if (level < 1) { 47 | return; 48 | } 49 | TeamShop teamShop = Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop(); 50 | for (Player player : game.getPlayers()) { 51 | if (BedwarsUtil.isSpectator(game, player) || player.getGameMode() == GameMode.SPECTATOR) { 52 | continue; 53 | } 54 | if (team != game.getPlayerTeam(player) && team.getTargetFeetBlock().distanceSquared(player.getLocation()) <= Math.pow(Config.teamshop_upgrade_trap_trigger_range, 2)) { 55 | if (teamShop.isCoolingPlayer(team, player) || teamShop.isImmunePlayer(player)) { 56 | continue; 57 | } 58 | level = 0; 59 | teamShop.removeTrap(this); 60 | teamShop.addCoolingPlayer(team, player); 61 | player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 100, 1), true); 62 | player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100, 1), true); 63 | if (!Config.teamshop_upgrade_trap_trigger_title.equals("") || !Config.teamshop_upgrade_trap_trigger_subtitle.equals("")) { 64 | for (Player teamplayers : team.getPlayers()) { 65 | Utils.sendTitle(teamplayers, 5, 80, 5, Config.teamshop_upgrade_trap_trigger_title, Config.teamshop_upgrade_trap_trigger_subtitle); 66 | } 67 | } 68 | if (team.getPlayers().size() > 0) { 69 | Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop().updateTeamShop(team.getPlayers().get(0)); 70 | } 71 | break; 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/DeathMode.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.Material; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.scheduler.BukkitRunnable; 7 | import io.github.bedwarsrel.BedwarsRel; 8 | import io.github.bedwarsrel.game.Game; 9 | import io.github.bedwarsrel.game.Team; 10 | import lombok.Getter; 11 | import me.ram.bedwarsscoreboardaddon.Main; 12 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 13 | import me.ram.bedwarsscoreboardaddon.config.Config; 14 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonDeathModeEvent; 15 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 16 | 17 | public class DeathMode { 18 | 19 | @Getter 20 | private Game game; 21 | @Getter 22 | private Arena arena; 23 | private String deathmode_time; 24 | 25 | public String getDeathmodeTime() { 26 | return deathmode_time; 27 | } 28 | 29 | public DeathMode(Arena arena) { 30 | this.arena = arena; 31 | this.game = arena.getGame(); 32 | arena.addGameTask(new BukkitRunnable() { 33 | Boolean isExecuted = false; 34 | 35 | @Override 36 | public void run() { 37 | int deathmodetime = game.getTimeLeft() - Config.deathmode_gametime; 38 | deathmode_time = deathmodetime / 60 + ":" + ((deathmodetime % 60 < 10) ? ("0" + deathmodetime % 60) : (deathmodetime % 60)); 39 | if (Config.deathmode_enabled) { 40 | if (isExecuted) { 41 | cancel(); 42 | return; 43 | } 44 | if (game.getTimeLeft() <= Config.deathmode_gametime) { 45 | isExecuted = true; 46 | BoardAddonDeathModeEvent deathModeEvent = new BoardAddonDeathModeEvent(game); 47 | Bukkit.getPluginManager().callEvent(deathModeEvent); 48 | if (deathModeEvent.isCancelled()) { 49 | cancel(); 50 | return; 51 | } 52 | for (Player player : game.getPlayers()) { 53 | if (!Config.deathmode_title.equals("") || !Config.deathmode_subtitle.equals("")) { 54 | Utils.sendTitle(player, 10, 80, 10, Config.deathmode_title, Config.deathmode_subtitle); 55 | } 56 | if (!Config.deathmode_message.equals("")) { 57 | player.sendMessage(Config.deathmode_message); 58 | } 59 | } 60 | for (Team team : game.getTeams().values()) { 61 | destroyBlock(game, team); 62 | } 63 | PlaySound.playSound(game, Config.play_sound_sound_deathmode); 64 | } 65 | } 66 | } 67 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 68 | } 69 | 70 | private void destroyBlock(Game game, Team team) { 71 | Material type = team.getTargetHeadBlock().getBlock().getType(); 72 | if (type.equals(game.getTargetMaterial())) { 73 | if (type.equals(Material.BED_BLOCK)) { 74 | if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { 75 | team.getTargetFeetBlock().getBlock().setType(Material.AIR); 76 | } else { 77 | team.getTargetHeadBlock().getBlock().setType(Material.AIR); 78 | } 79 | } else { 80 | team.getTargetHeadBlock().getBlock().setType(Material.AIR); 81 | } 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/manager/PlaceholderManager.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.manager; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import io.github.bedwarsrel.game.Game; 7 | import lombok.Getter; 8 | import me.ram.bedwarsscoreboardaddon.placeholder.Placeholder; 9 | 10 | public class PlaceholderManager { 11 | 12 | @Getter 13 | private Game game; 14 | private Map gamePlaceholder; 15 | private Map> teamPlaceholder; 16 | private Map> playerPlaceholder; 17 | 18 | public PlaceholderManager(Game game) { 19 | this.game = game; 20 | gamePlaceholder = new HashMap(); 21 | teamPlaceholder = new HashMap>(); 22 | playerPlaceholder = new HashMap>(); 23 | } 24 | 25 | public void registerGamePlaceholder(String identifier, Placeholder placeholder) { 26 | gamePlaceholder.put(identifier, placeholder); 27 | } 28 | 29 | public void unregisterGamePlaceholder(String identifier) { 30 | gamePlaceholder.remove(identifier); 31 | } 32 | 33 | public Map getGamePlaceholder() { 34 | return gamePlaceholder; 35 | } 36 | 37 | public void registerTeamPlaceholder(String team, String identifier, Placeholder placeholder) { 38 | Map placeholders = teamPlaceholder.getOrDefault(team, new HashMap()); 39 | placeholders.put(identifier, placeholder); 40 | teamPlaceholder.put(team, placeholders); 41 | } 42 | 43 | public void unregisterTeamPlaceholder(String team, String identifier) { 44 | Map placeholders = teamPlaceholder.getOrDefault(team, new HashMap()); 45 | placeholders.remove(identifier); 46 | teamPlaceholder.put(identifier, placeholders); 47 | } 48 | 49 | public Map getTeamPlaceholder(String team) { 50 | return teamPlaceholder.getOrDefault(team, new HashMap()); 51 | } 52 | 53 | public Map> getTeamPlaceholders() { 54 | return teamPlaceholder; 55 | } 56 | 57 | public void registerPlayerPlaceholder(String player, String identifier, Placeholder placeholder) { 58 | Map placeholders = teamPlaceholder.getOrDefault(player, new HashMap()); 59 | placeholders.put(identifier, placeholder); 60 | playerPlaceholder.put(player, placeholders); 61 | } 62 | 63 | public void unregisterPlayerPlaceholder(String player, String identifier) { 64 | Map placeholders = teamPlaceholder.getOrDefault(player, new HashMap()); 65 | placeholders.remove(identifier); 66 | playerPlaceholder.put(player, placeholders); 67 | } 68 | 69 | public Map getPlayerPlaceholder(String player) { 70 | return playerPlaceholder.getOrDefault(player, new HashMap()); 71 | } 72 | 73 | public Map> getPlayerPlaceholders() { 74 | return playerPlaceholder; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/SelectTeam.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.inventory.Inventory; 8 | import org.bukkit.inventory.ItemStack; 9 | import org.bukkit.inventory.meta.ItemMeta; 10 | import org.bukkit.material.Wool; 11 | import io.github.bedwarsrel.BedwarsRel; 12 | import io.github.bedwarsrel.game.Game; 13 | import io.github.bedwarsrel.game.Team; 14 | import me.ram.bedwarsscoreboardaddon.config.Config; 15 | 16 | public class SelectTeam { 17 | 18 | public static void openSelectTeam(Game game, Player player) { 19 | int size = 27 + (9 * (game.getTeams().values().size() / 7)); 20 | Inventory inventory = Bukkit.createInventory(null, size, BedwarsRel._l(player, "lobby.chooseteam")); 21 | int slot = 10; 22 | for (Team team : game.getTeams().values()) { 23 | switch (slot) { 24 | case 17: 25 | slot = 19; 26 | break; 27 | case 26: 28 | slot = 28; 29 | break; 30 | default: 31 | break; 32 | } 33 | Wool wool = new Wool(team.getColor().getDyeColor()); 34 | ItemStack itemStack = wool.toItemStack(1); 35 | ItemMeta itemMeta = itemStack.getItemMeta(); 36 | String color = team.getChatColor().toString(); 37 | String status = Config.select_team_status_select; 38 | if (team.getPlayers().contains(player)) { 39 | status = Config.select_team_status_inteam; 40 | } else if (team.getPlayers().size() >= team.getMaxPlayers()) { 41 | status = Config.select_team_status_team_full; 42 | } 43 | itemMeta.setDisplayName(Config.select_team_item_name.replace("{status}", status).replace("{team}", team.getName()).replace("{color}", color).replace("{players}", team.getPlayers().size() + "").replace("{maxplayers}", team.getMaxPlayers() + "")); 44 | List lore = new ArrayList(); 45 | for (String l : Config.select_team_item_lore) { 46 | if (l.contains("{players_list}")) { 47 | if (team.getPlayers().size() > 0) { 48 | for (Player p : team.getPlayers()) { 49 | lore.add(l.replace("{status}", status).replace("{team}", team.getName()).replace("{color}", color).replace("{players}", team.getPlayers().size() + "").replace("{maxplayers}", team.getMaxPlayers() + "").replace("{players_list}", p.getDisplayName())); 50 | } 51 | } else { 52 | lore.add(l.replace("{status}", status).replace("{team}", team.getName()).replace("{color}", color).replace("{players}", team.getPlayers().size() + "").replace("{maxplayers}", team.getMaxPlayers() + "").replace("{players_list}", Config.select_team_no_players)); 53 | } 54 | } else { 55 | lore.add(l.replace("{status}", status).replace("{team}", team.getName()).replace("{color}", color).replace("{players}", team.getPlayers().size() + "").replace("{maxplayers}", team.getMaxPlayers() + "")); 56 | } 57 | } 58 | itemMeta.setLore(lore); 59 | itemStack.setItemMeta(itemMeta); 60 | inventory.setItem(slot, itemStack); 61 | slot++; 62 | } 63 | player.closeInventory(); 64 | player.openInventory(inventory); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/main/resources/locale/zh_CN/language.yml: -------------------------------------------------------------------------------- 1 | #配置版本 (请勿修改) 2 | version: 4 3 | 4 | button: 5 | list_teleport: "&f[&e传送&f]" 6 | list_remove: "&f[&c删除&f]" 7 | show_text: 8 | list_teleport: "&e点击传送!" 9 | list_remove: "&c点击删除!" 10 | commands: 11 | help: 12 | - " &e/bwsba &7-&f 显示插件信息" 13 | - " &e/bwsba help &7-&f 显示帮助菜单" 14 | - " &e/bwsba shop &7-&f 商店设置" 15 | - " &e/bwsba spawner &7-&f 资源点设置" 16 | - " &e/bwsba edit <游戏> &7-&f 编辑游戏" 17 | - " &e/bwsba reload &7-&f 重载配置文件" 18 | - " &e/bwsba upcheck &7-&f 检测版本更新" 19 | message: 20 | prefix: "&b&lBWSBA &f>> " 21 | no_permission: "&c你没有使用该命令的权限!" 22 | reloaded: "&a配置文件重载完成!" 23 | not_player: "&c你不是一个玩家!" 24 | set_item_shop: "&a商店设置成功!" 25 | set_shop_error: "&f缺少必要前置: &aCitizens" 26 | failed_set_shop: "&c商店设置失败!" 27 | shop_list_error: "&c游戏不存在或未设置商店!" 28 | remove_shop: "&a商店移除成功!" 29 | failed_remove_shop: "&c商店不存在!" 30 | shop_list: "&f已设置商店列表:" 31 | add_spawner: "&a资源点添加成功!" 32 | remove_spawner: "&a资源点移除成功!" 33 | spawner_list: "&f队伍资源点列表:" 34 | spawner_list_error: "&c游戏不存在或未设置资源点!" 35 | failed_remove_spawner: "&c资源点不存在!" 36 | edit_game_error: "&c游戏不存在!" 37 | help: 38 | shop_list: "&e/bwsba shop list <游戏> &7-&f 已设置商店列表" 39 | remove_shop: "&e/bwsba shop remove &7-&f 移除一个商店" 40 | set_item_shop: "&e/bwsba shop set item <游戏> &7-&f 设置一个道具商店" 41 | set_team_shop: "&e/bwsba shop set team <游戏> &7-&f 设置一个队伍商店" 42 | spawner_list: "&e/bwsba spawner list <游戏> &7-&f 队伍资源点列表" 43 | remove_spawner: "&e/bwsba spawner remove &7-&f 移除队伍资源点" 44 | add_spawner: "&e/bwsba spawner add <游戏> <队伍> &7-&f 添加队伍资源点" 45 | edit_game: "&e/bwsba edit <游戏> &7-&f 编辑游戏" 46 | unknown: "未知指令! 使用 &e/bwsba help &f显示帮助菜单" 47 | inventory: 48 | edit_game: "编辑游戏" 49 | item: 50 | edit_game: 51 | name: 52 | menu_item: "&e游戏编辑菜单" 53 | align_angle_item: "&e快速对齐视角" 54 | align_location_item: "&e快速对齐位置" 55 | teleport_tool: "&e传送工具" 56 | back: "&f返回" 57 | set_lobby: "&f设置大厅" 58 | set_mix_players: "&f设置最少玩家人数" 59 | edit_team: "&f编辑队伍" 60 | set_bed: "&f设置队伍床" 61 | set_spawn: "&f设置队伍出生点" 62 | set_item_shop: "&f设置物品商店" 63 | set_team_shop: "&f设置队伍商店" 64 | set_spawner: "&f设置资源生成点" 65 | set_team_spawner: "&f队伍资源生成点" 66 | set_game_spawner: "&f游戏资源生成点" 67 | set_region_loc1: "&f设置游戏区域A" 68 | set_region_loc2: "&f设置游戏区域B" 69 | save_game: "&b保存游戏" 70 | start_game: "&a启用游戏" 71 | stop_game: "&c停止游戏" 72 | lore: 73 | set: "&e点击设置!" 74 | add: "&e点击添加!" 75 | remove: "&c点击移除!" 76 | complete: "&a已设置!" 77 | mix_players: "&e已设置 &c{players} &e人" 78 | max_players: "&e最大人数 &c{players} &e人" 79 | browse: "&e点击浏览!" 80 | anvil: 81 | edit_game: 82 | set_mix_players: "输入最小玩家人数" 83 | set_team_name: "输入队伍名称" 84 | set_team_max_players: "输入队伍最大玩家数" 85 | holographic: 86 | edit_game: 87 | loc1: "&a坐标A" 88 | loc2: "&a坐标B" 89 | lobby: "&a等待大厅" 90 | bed: "{team}&f床" 91 | spawn: "{team}&f出生点" 92 | spawner: "&a{resource}资源点" 93 | team_spawner: "{team}&f队伍资源点" 94 | shop: 95 | item: "&fID: &a{id} &e物品商店" 96 | team: "&fID: &a{id} &e队伍商店" 97 | -------------------------------------------------------------------------------- /src/main/resources/locale/zh_TW/language.yml: -------------------------------------------------------------------------------- 1 | #配置版本 (請勿修改) 2 | version: 4 3 | 4 | button: 5 | list_teleport: "&f[&e傳送&f]" 6 | list_remove: "&f[&c刪除&f]" 7 | show_text: 8 | list_teleport: "&e點擊傳送!" 9 | list_remove: "&c點擊刪除!" 10 | commands: 11 | help: 12 | - " &e/bwsba &7-&f 顯示插件信息" 13 | - " &e/bwsba help &7-&f 顯示幫助菜單" 14 | - " &e/bwsba shop &7-&f 商店設置" 15 | - " &e/bwsba spawner &7-&f 資源點設置" 16 | - " &e/bwsba edit <遊戲> &7-&f 編輯遊戲" 17 | - " &e/bwsba reload &7-&f 重載配置文件" 18 | - " &e/bwsba upcheck &7-&f 檢測版本更新" 19 | message: 20 | prefix: "&b&lBWSBA &f>> " 21 | no_permission: "&c你沒有使用該命令的權限!" 22 | reloaded: "&a配置文件重載完成!" 23 | not_player: "&c你不是一個玩家!" 24 | set_item_shop: "&a商店設置成功!" 25 | set_shop_error: "&f缺少必要前置: &aCitizens" 26 | failed_set_shop: "&c商店設置失敗!" 27 | shop_list_error: "&c遊戲不存在或未設置商店!" 28 | remove_shop: "&a商店移除成功!" 29 | failed_remove_shop: "&c商店不存在!" 30 | shop_list: "&f已設置商店列表:" 31 | add_spawner: "&a資源點添加成功!" 32 | remove_spawner: "&a資源點移除成功!" 33 | spawner_list: "&f隊伍資源點列表:" 34 | spawner_list_error: "&c遊戲不存在或未設置資源點!" 35 | failed_remove_spawner: "&c資源點不存在!" 36 | edit_game_error: "&c遊戲不存在!" 37 | help: 38 | shop_list: "&e/bwsba shop list <遊戲> &7-&f 已設置商店列表" 39 | remove_shop: "&e/bwsba shop remove &7-&f 移除一個商店" 40 | set_item_shop: "&e/bwsba shop set item <遊戲> &7-&f 設置一個道具商店" 41 | set_team_shop: "&e/bwsba shop set team <遊戲> &7-&f 設置一個隊伍商店" 42 | spawner_list: "&e/bwsba spawner list <遊戲> &7-&f 隊伍資源點列表" 43 | remove_spawner: "&e/bwsba spawner remove &7-&f 移除隊伍資源點" 44 | add_spawner: "&e/bwsba spawner add <遊戲> <隊伍> &7-&f 添加隊伍資源點" 45 | edit_game: "&e/bwsba edit <遊戲> &7-&f 編輯遊戲" 46 | unknown: "未知指令! 使用 &e/bwsba help &f顯示幫助菜單" 47 | inventory: 48 | edit_game: "編輯遊戲" 49 | item: 50 | edit_game: 51 | name: 52 | menu_item: "&e遊戲編輯菜單" 53 | align_angle_item: "&e快速對齊視角" 54 | align_location_item: "&e快速對齊位置" 55 | teleport_tool: "&e傳送工具" 56 | back: "&f返回" 57 | set_lobby: "&f設置大廳" 58 | set_mix_players: "&f設置最少玩家人數" 59 | edit_team: "&f編輯隊伍" 60 | set_bed: "&f設置隊伍床" 61 | set_spawn: "&f設置隊伍出生點" 62 | set_item_shop: "&f設置物品商店" 63 | set_team_shop: "&f設置隊伍商店" 64 | set_spawner: "&f設置資源生成點" 65 | set_team_spawner: "&f隊伍資源生成點" 66 | set_game_spawner: "&f遊戲資源生成點" 67 | set_region_loc1: "&f設置遊戲區域A" 68 | set_region_loc2: "&f設置遊戲區域B" 69 | save_game: "&b保存遊戲" 70 | start_game: "&a啟用遊戲" 71 | stop_game: "&c停止遊戲" 72 | lore: 73 | set: "&e點擊設置!" 74 | add: "&e點擊添加!" 75 | remove: "&c點擊移除!" 76 | complete: "&a已設置!" 77 | mix_players: "&e已設置 &c{players} &e人" 78 | max_players: "&e最大人數 &c{players} &e人" 79 | browse: "&e點擊瀏覽!" 80 | anvil: 81 | edit_game: 82 | set_mix_players: "輸入最小玩家人數" 83 | set_team_name: "輸入隊伍名稱" 84 | set_team_max_players: "輸入隊伍最大玩家數" 85 | holographic: 86 | edit_game: 87 | loc1: "&a坐標A" 88 | loc2: "&a坐標B" 89 | lobby: "&a等待大廳" 90 | bed: "{team}&f床" 91 | spawn: "{team}&f出生點" 92 | spawner: "&a{resource}資源點" 93 | team_spawner: "{team}&f隊伍資源點" 94 | shop: 95 | item: "&fID: &a{id} &e物品商店" 96 | team: "&fID: &a{id} &e隊伍商店" 97 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/AlarmTrap.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import org.bukkit.GameMode; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffectType; 6 | 7 | import io.github.bedwarsrel.game.Game; 8 | import io.github.bedwarsrel.game.Team; 9 | import lombok.Getter; 10 | import lombok.Setter; 11 | import me.ram.bedwarsscoreboardaddon.Main; 12 | import me.ram.bedwarsscoreboardaddon.addon.teamshop.TeamShop; 13 | import me.ram.bedwarsscoreboardaddon.config.Config; 14 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 15 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 16 | 17 | public class AlarmTrap implements Upgrade { 18 | 19 | @Getter 20 | private Game game; 21 | @Getter 22 | private Team team; 23 | @Getter 24 | @Setter 25 | private int level; 26 | @Getter 27 | @Setter 28 | private String buyer; 29 | 30 | public AlarmTrap(Game game, Team team, int level) { 31 | this.game = game; 32 | this.team = team; 33 | this.level = level; 34 | } 35 | 36 | public UpgradeType getType() { 37 | return UpgradeType.ALARM_TRAP; 38 | } 39 | 40 | public String getName() { 41 | return Config.teamshop_upgrade_name.get(getType()); 42 | } 43 | 44 | public void runUpgrade() { 45 | if (level < 1) { 46 | return; 47 | } 48 | TeamShop teamShop = Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop(); 49 | for (Player player : game.getPlayers()) { 50 | if (BedwarsUtil.isSpectator(game, player) || player.getGameMode() == GameMode.SPECTATOR) { 51 | continue; 52 | } 53 | if (team != game.getPlayerTeam(player) && team.getTargetFeetBlock().distanceSquared(player.getLocation()) <= Math.pow(Config.teamshop_upgrade_alarm_trap_trigger_range, 2) && player.hasPotionEffect(PotionEffectType.INVISIBILITY)) { 54 | if (teamShop.isCoolingPlayer(team, player) || teamShop.isImmunePlayer(player)) { 55 | continue; 56 | } 57 | level = 0; 58 | teamShop.removeTrap(this); 59 | teamShop.addCoolingPlayer(team, player); 60 | if (Config.invisibility_player_damage_show_player) { 61 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).getInvisiblePlayer().removePlayer(player); 62 | } else { 63 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).getInvisiblePlayer().showPlayerArmor(player); 64 | } 65 | if (!Config.teamshop_upgrade_alarm_trap_trigger_title.equals("") || !Config.teamshop_upgrade_alarm_trap_trigger_subtitle.equals("")) { 66 | Team t = game.getPlayerTeam(player); 67 | for (Player teamplayers : team.getPlayers()) { 68 | Utils.sendTitle(teamplayers, 5, 80, 5, Config.teamshop_upgrade_alarm_trap_trigger_title.replace("{player}", player.getName()).replace("{team}", t.getName()).replace("{team_color}", team.getChatColor().toString()), Config.teamshop_upgrade_alarm_trap_trigger_subtitle.replace("{player}", player.getName()).replace("{team}", t.getName()).replace("{team_color}", team.getChatColor().toString())); 69 | } 70 | } 71 | if (team.getPlayers().size() > 0) { 72 | Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop().updateTeamShop(team.getPlayers().get(0)); 73 | } 74 | break; 75 | } 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/GameChest.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import org.bukkit.Location; 7 | import org.bukkit.Material; 8 | import org.bukkit.block.Block; 9 | import org.bukkit.block.Chest; 10 | import org.bukkit.entity.Player; 11 | import org.bukkit.event.block.Action; 12 | import org.bukkit.event.player.PlayerInteractEvent; 13 | 14 | import io.github.bedwarsrel.game.Game; 15 | import io.github.bedwarsrel.game.Team; 16 | import lombok.Getter; 17 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 18 | import me.ram.bedwarsscoreboardaddon.config.Config; 19 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 20 | 21 | public class GameChest { 22 | 23 | @Getter 24 | private Game game; 25 | @Getter 26 | private Arena arena; 27 | @Getter 28 | private Map teamChests; 29 | 30 | public GameChest(Arena arena) { 31 | this.arena = arena; 32 | this.game = arena.getGame(); 33 | teamChests = new HashMap(); 34 | game.getPlayers().forEach(player -> { 35 | player.getEnderChest().clear(); 36 | }); 37 | } 38 | 39 | public Team getChestTeam(Block block) { 40 | for (Team team : teamChests.keySet()) { 41 | if (block.equals(teamChests.get(team))) { 42 | return team; 43 | } 44 | } 45 | return null; 46 | } 47 | 48 | public void clearChest() { 49 | game.getPlayers().forEach(player -> { 50 | player.getEnderChest().clear(); 51 | }); 52 | teamChests.values().forEach(block -> { 53 | if (block.getType().equals(Material.CHEST)) { 54 | ((Chest) block.getState()).getInventory().clear(); 55 | } 56 | }); 57 | } 58 | 59 | public void onPlayerLeave(Player player) { 60 | player.getEnderChest().clear(); 61 | } 62 | 63 | public void onInteract(PlayerInteractEvent e) { 64 | if (!Config.game_chest_enabled) { 65 | return; 66 | } 67 | if (!e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { 68 | return; 69 | } 70 | Player player = e.getPlayer(); 71 | if (!game.isInGame(player) || BedwarsUtil.isSpectator(game, player)) { 72 | return; 73 | } 74 | Block block = e.getClickedBlock(); 75 | if (!block.getType().equals(Material.CHEST) && !block.getType().equals(Material.ENDER_CHEST)) { 76 | return; 77 | } 78 | e.setCancelled(true); 79 | block.getState().update(); 80 | Team team = game.getPlayerTeam(player); 81 | Location location = block.getLocation().add(0.5, 0, 0.5); 82 | if (block.getType().equals(Material.ENDER_CHEST)) { 83 | e.setCancelled(false); 84 | } else if (block.getType().equals(Material.CHEST) && !game.getRegion().isPlacedBlock(block)) { 85 | for (Team t : game.getTeams().values()) { 86 | if (!teamChests.containsValue(block) && !teamChests.containsKey(t) && t.getSpawnLocation().distanceSquared(location) <= Math.pow(Config.game_chest_range, 2)) { 87 | ((Chest) block.getState()).getInventory().clear(); 88 | teamChests.put(t, block); 89 | } 90 | } 91 | Team t = getChestTeam(block); 92 | if (t == null) { 93 | return; 94 | } 95 | if (t.getName().equals(team.getName())) { 96 | e.setCancelled(false); 97 | return; 98 | } 99 | if (!BedwarsUtil.isDieOut(game, t)) { 100 | player.sendMessage(Config.game_chest_message.replace("{team}", t.getName())); 101 | return; 102 | } 103 | e.setCancelled(false); 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/LobbyBlock.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.Chunk; 8 | import org.bukkit.Location; 9 | import org.bukkit.Material; 10 | import org.bukkit.block.Block; 11 | import org.bukkit.entity.Player; 12 | import org.bukkit.scheduler.BukkitRunnable; 13 | 14 | import io.github.bedwarsrel.game.Game; 15 | import lombok.Getter; 16 | import me.ram.bedwarsscoreboardaddon.Main; 17 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 18 | import me.ram.bedwarsscoreboardaddon.config.Config; 19 | 20 | public class LobbyBlock { 21 | 22 | @Getter 23 | private Game game; 24 | @Getter 25 | private Arena arena; 26 | 27 | public LobbyBlock(Arena arena) { 28 | this.arena = arena; 29 | this.game = arena.getGame(); 30 | Location lobby = game.getLobby().clone(); 31 | if (!Config.lobby_block_enabled) { 32 | return; 33 | } 34 | Block block = lobby.getBlock(); 35 | if (block == null || block.getType().equals(Material.AIR)) { 36 | block = lobby.clone().add(0, -1, 0).getBlock(); 37 | } 38 | if (block == null || block.getType().equals(Material.AIR)) { 39 | return; 40 | } 41 | removeBlock(block.getLocation()); 42 | } 43 | 44 | private void removeBlock(Location loc) { 45 | List list = new ArrayList(); 46 | Location location = loc.clone(); 47 | Location location1 = location.clone().add(Config.lobby_block_position_1_x, Config.lobby_block_position_1_y, Config.lobby_block_position_1_z); 48 | Location location2 = location.clone().add(Config.lobby_block_position_2_x, Config.lobby_block_position_2_y, Config.lobby_block_position_2_z); 49 | for (int X : this.getAllNumber((int) location1.getX(), (int) location2.getX())) { 50 | location.setX(X); 51 | for (int Y : this.getAllNumber((int) location1.getY(), (int) location2.getY())) { 52 | location.setY(Y); 53 | for (int Z : this.getAllNumber((int) location1.getZ(), (int) location2.getZ())) { 54 | location.setZ(Z); 55 | Block block = location.getBlock(); 56 | if (block != null && !block.getType().equals(Material.AIR)) { 57 | list.add(block); 58 | } 59 | } 60 | } 61 | } 62 | Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> { 63 | for (Block b : list) { 64 | for (Player p : game.getPlayers()) { 65 | p.sendBlockChange(b.getLocation(), Material.AIR, (byte) 0); 66 | } 67 | } 68 | }); 69 | arena.addGameTask(new BukkitRunnable() { 70 | int i = 0; 71 | 72 | @Override 73 | public void run() { 74 | for (int j = 0; j < 50; j++) { 75 | if (i >= list.size()) { 76 | cancel(); 77 | return; 78 | } 79 | Block block = list.get(i); 80 | Chunk chunk = block.getChunk(); 81 | if (!chunk.isLoaded()) { 82 | chunk.load(true); 83 | } 84 | game.getRegion().addBreakedBlock(block); 85 | block.setType(Material.AIR); 86 | i++; 87 | } 88 | } 89 | }.runTaskTimer(Main.getInstance(), 0, 0)); 90 | } 91 | 92 | private List getAllNumber(int a, int b) { 93 | List nums = new ArrayList(); 94 | int min = a; 95 | int max = b; 96 | if (a > b) { 97 | min = b; 98 | max = a; 99 | } 100 | for (int i = min; i < max + 1; i++) { 101 | nums.add(i); 102 | } 103 | return nums; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/NoBreakBed.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import com.comphenix.protocol.*; 4 | import com.comphenix.protocol.wrappers.*; 5 | import io.github.bedwarsrel.game.Game; 6 | import io.github.bedwarsrel.game.GameState; 7 | import lombok.Getter; 8 | import me.ram.bedwarsscoreboardaddon.Main; 9 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 10 | import me.ram.bedwarsscoreboardaddon.config.Config; 11 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 12 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 13 | import org.bukkit.*; 14 | import org.bukkit.block.*; 15 | import org.bukkit.entity.Player; 16 | import org.bukkit.scheduler.BukkitRunnable; 17 | import com.comphenix.protocol.events.*; 18 | 19 | public class NoBreakBed { 20 | 21 | @Getter 22 | private Game game; 23 | @Getter 24 | private Arena arena; 25 | private boolean bre; 26 | private String formattime = "00:00"; 27 | private PacketListener packetListener; 28 | 29 | public NoBreakBed(Arena arena) { 30 | this.arena = arena; 31 | this.game = arena.getGame(); 32 | bre = false; 33 | if (!Config.nobreakbed_enabled) { 34 | return; 35 | } 36 | registerPacketListener(); 37 | arena.addGameTask(new BukkitRunnable() { 38 | @Override 39 | public void run() { 40 | int time = game.getTimeLeft() - Config.nobreakbed_gametime; 41 | String ftime = time / 60 + ":" + ((time % 60 < 10) ? ("0" + time % 60) : (time % 60)); 42 | formattime = ftime; 43 | if (game.getTimeLeft() <= Config.nobreakbed_gametime) { 44 | bre = true; 45 | if (Config.nobreakbed_enabled) { 46 | for (Player player : game.getPlayers()) { 47 | if (!Config.nobreakbed_title.equals("") || !Config.nobreakbed_subtitle.equals("")) { 48 | Utils.sendTitle(player, 10, 50, 10, Config.nobreakbed_title, Config.nobreakbed_subtitle); 49 | } 50 | if (!Config.nobreakbed_message.equals("")) { 51 | player.sendMessage(Config.nobreakbed_message); 52 | } 53 | } 54 | } 55 | cancel(); 56 | return; 57 | } 58 | } 59 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 60 | } 61 | 62 | public String getTime() { 63 | return formattime; 64 | } 65 | 66 | public void onEnd() { 67 | if (packetListener != null) { 68 | ProtocolLibrary.getProtocolManager().removePacketListener(packetListener); 69 | } 70 | } 71 | 72 | private void registerPacketListener() { 73 | packetListener = new PacketAdapter(Main.getInstance(), ListenerPriority.HIGHEST, new PacketType[] { PacketType.Play.Client.BLOCK_DIG }) { 74 | public void onPacketReceiving(PacketEvent e) { 75 | if (!Config.nobreakbed_enabled) { 76 | return; 77 | } 78 | Player player = e.getPlayer(); 79 | if (BedwarsUtil.isSpectator(game, player) || game.getState() != GameState.RUNNING) { 80 | return; 81 | } 82 | if (!bre && e.getPacketType() == PacketType.Play.Client.BLOCK_DIG) { 83 | PacketContainer packet = e.getPacket(); 84 | BlockPosition position = packet.getBlockPositionModifier().read(0); 85 | Block block = new Location(player.getWorld(), position.getX(), position.getY(), position.getZ()).getBlock(); 86 | if (!block.getType().equals(game.getTargetMaterial())) { 87 | return; 88 | } 89 | if (!packet.getPlayerDigTypes().read(0).equals(EnumWrappers.PlayerDigType.STOP_DESTROY_BLOCK)) { 90 | return; 91 | } 92 | player.sendMessage(Config.nobreakbed_nobreakmessage); 93 | e.setCancelled(true); 94 | block.getState().update(); 95 | } 96 | } 97 | }; 98 | ProtocolLibrary.getProtocolManager().addPacketListener(packetListener); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/HealthLevel.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.scheduler.BukkitRunnable; 8 | import io.github.bedwarsrel.game.Game; 9 | import lombok.Getter; 10 | import me.ram.bedwarsscoreboardaddon.Main; 11 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 12 | import me.ram.bedwarsscoreboardaddon.config.Config; 13 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonSetHealthEvent; 14 | import me.ram.bedwarsscoreboardaddon.utils.ColorUtil; 15 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 16 | 17 | public class HealthLevel { 18 | 19 | @Getter 20 | private Game game; 21 | @Getter 22 | private Arena arena; 23 | @Getter 24 | private Map levelTime; 25 | @Getter 26 | private Integer nowHealth; 27 | 28 | public HealthLevel(Arena arena) { 29 | this.arena = arena; 30 | this.game = arena.getGame(); 31 | levelTime = new HashMap(); 32 | nowHealth = 20; 33 | if (Config.sethealth_start_enabled) { 34 | nowHealth = Config.sethealth_start_health; 35 | arena.addGameTask(new BukkitRunnable() { 36 | @Override 37 | public void run() { 38 | for (Player player : game.getPlayers()) { 39 | player.setMaxHealth(Config.sethealth_start_health); 40 | player.setHealth(player.getMaxHealth()); 41 | } 42 | } 43 | }.runTaskLater(Main.getInstance(), 0L)); 44 | } 45 | for (String sh : Main.getInstance().getConfig().getConfigurationSection("sethealth").getKeys(false)) { 46 | if (!sh.equals("start")) { 47 | arena.addGameTask(new BukkitRunnable() { 48 | int gametime = Main.getInstance().getConfig().getInt("sethealth." + sh + ".gametime"); 49 | int maxhealth = Main.getInstance().getConfig().getInt("sethealth." + sh + ".health"); 50 | String title = Main.getInstance().getConfig().getString("sethealth." + sh + ".title"); 51 | String subtitle = Main.getInstance().getConfig().getString("sethealth." + sh + ".subtitle"); 52 | String message = Main.getInstance().getConfig().getString("sethealth." + sh + ".message"); 53 | Boolean isExecuted = false; 54 | 55 | @Override 56 | public void run() { 57 | if (isExecuted) { 58 | cancel(); 59 | return; 60 | } 61 | int remtime = game.getTimeLeft() - gametime; 62 | String formatremtime = remtime / 60 + ":" + ((remtime % 60 < 10) ? ("0" + remtime % 60) : (remtime % 60)); 63 | levelTime.put(sh, formatremtime); 64 | if (game.getTimeLeft() <= gametime) { 65 | isExecuted = true; 66 | BoardAddonSetHealthEvent setHealthEvent = new BoardAddonSetHealthEvent(game); 67 | Bukkit.getPluginManager().callEvent(setHealthEvent); 68 | if (setHealthEvent.isCancelled()) { 69 | cancel(); 70 | return; 71 | } 72 | nowHealth = maxhealth; 73 | for (Player player : game.getPlayers()) { 74 | double dhealth = maxhealth - player.getMaxHealth(); 75 | player.setMaxHealth(maxhealth); 76 | if (dhealth > 0) { 77 | double nhealth = player.getHealth() + dhealth; 78 | nhealth = nhealth > maxhealth ? maxhealth : nhealth; 79 | player.setHealth(nhealth); 80 | } 81 | if (!title.equals("") || !subtitle.equals("")) { 82 | Utils.sendTitle(player, 10, 50, 10, ColorUtil.color(title), ColorUtil.color(subtitle)); 83 | } 84 | if (!message.equals("")) { 85 | player.sendMessage(ColorUtil.color(message)); 86 | } 87 | } 88 | PlaySound.playSound(game, Config.play_sound_sound_sethealth); 89 | cancel(); 90 | } 91 | } 92 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 93 | } 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/CounterOffensiveTrap.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import org.bukkit.GameMode; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.potion.PotionEffect; 6 | import org.bukkit.potion.PotionEffectType; 7 | 8 | import io.github.bedwarsrel.game.Game; 9 | import io.github.bedwarsrel.game.Team; 10 | import lombok.Getter; 11 | import lombok.Setter; 12 | import me.ram.bedwarsscoreboardaddon.Main; 13 | import me.ram.bedwarsscoreboardaddon.addon.teamshop.TeamShop; 14 | import me.ram.bedwarsscoreboardaddon.config.Config; 15 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 16 | 17 | public class CounterOffensiveTrap implements Upgrade { 18 | 19 | @Getter 20 | private Game game; 21 | @Getter 22 | private Team team; 23 | @Getter 24 | @Setter 25 | private int level; 26 | @Getter 27 | @Setter 28 | private String buyer; 29 | 30 | public CounterOffensiveTrap(Game game, Team team, int level) { 31 | this.game = game; 32 | this.team = team; 33 | this.level = level; 34 | } 35 | 36 | public UpgradeType getType() { 37 | return UpgradeType.COUNTER_OFFENSIVE_TRAP; 38 | } 39 | 40 | public String getName() { 41 | return Config.teamshop_upgrade_name.get(getType()); 42 | } 43 | 44 | public void runUpgrade() { 45 | if (level < 1) { 46 | return; 47 | } 48 | TeamShop teamShop = Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop(); 49 | for (Player player : game.getPlayers()) { 50 | if (BedwarsUtil.isSpectator(game, player) || player.getGameMode() == GameMode.SPECTATOR) { 51 | continue; 52 | } 53 | if (team != game.getPlayerTeam(player) && team.getTargetFeetBlock().distanceSquared(player.getLocation()) <= Math.pow(Config.teamshop_upgrade_counter_offensive_trap_trigger_range, 2)) { 54 | if (teamShop.isCoolingPlayer(team, player) || teamShop.isImmunePlayer(player)) { 55 | continue; 56 | } 57 | level = 0; 58 | teamShop.removeTrap(this); 59 | teamShop.addCoolingPlayer(team, player); 60 | addEffect(); 61 | if (team.getPlayers().size() > 0) { 62 | Main.getInstance().getArenaManager().getArena(game.getName()).getTeamShop().updateTeamShop(team.getPlayers().get(0)); 63 | } 64 | break; 65 | } 66 | } 67 | } 68 | 69 | private void addEffect() { 70 | for (Player player : team.getPlayers()) { 71 | if (!player.getGameMode().equals(GameMode.SPECTATOR) && !BedwarsUtil.isSpectator(game, player) && team.getTargetFeetBlock().distance(player.getLocation()) <= Config.teamshop_upgrade_counter_offensive_trap_effect_range) { 72 | addPlayerEffect(player, PotionEffectType.SPEED, 200, 0); 73 | addPlayerEffect(player, PotionEffectType.JUMP, 200, 1); 74 | } 75 | } 76 | } 77 | 78 | private void addPlayerEffect(Player player, PotionEffectType type, int duration, int amplifier) { 79 | boolean add = true; 80 | if (player.hasPotionEffect(type)) { 81 | PotionEffect effect = getPotionEffect(player, type); 82 | int level = effect.getAmplifier(); 83 | if (level < amplifier) { 84 | add = true; 85 | } else if (level == amplifier && effect.getDuration() < duration) { 86 | add = true; 87 | } else { 88 | add = false; 89 | } 90 | } 91 | if (add) { 92 | player.addPotionEffect(new PotionEffect(type, duration, amplifier), true); 93 | } 94 | } 95 | 96 | private PotionEffect getPotionEffect(Player player, PotionEffectType type) { 97 | try { 98 | return player.getPotionEffect(type); 99 | } catch (Exception e) { 100 | } 101 | for (PotionEffect effect : player.getActivePotionEffects()) { 102 | if (effect.getType().equals(type)) { 103 | return effect; 104 | } 105 | } 106 | return null; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/main/resources/locale/en_US/language.yml: -------------------------------------------------------------------------------- 1 | #Config version (Don't edit!) 2 | version: 4 3 | 4 | button: 5 | list_teleport: "&f[&eTeleport&f]" 6 | list_remove: "&f[&cRemove&f]" 7 | show_text: 8 | list_teleport: "&eClick to teleport!" 9 | list_remove: "&cClick to remove!" 10 | commands: 11 | help: 12 | - " &e/bwsba &7-&f Plugin info" 13 | - " &e/bwsba help &7-&f Get help" 14 | - " &e/bwsba shop &7-&f Shop settings" 15 | - " &e/bwsba spawner &7-&f Team spawner settings" 16 | - " &e/bwsba edit &7-&f Edit game" 17 | - " &e/bwsba reload &7-&f Reload configuration" 18 | - " &e/bwsba upcheck &7-&f Update check" 19 | message: 20 | prefix: "&b&lBWSBA &f>> " 21 | no_permission: "&cNo permission to use this command!" 22 | reloaded: "&aReload completed!" 23 | not_player: "&cYou are not a player!" 24 | set_item_shop: "&aAdded!" 25 | set_shop_error: "&aCitizens &funloaded!" 26 | failed_set_shop: "&c&cFail to add!" 27 | shop_list_error: "&cGame does not exist or shop is not set!" 28 | remove_shop: "&aRemoved!" 29 | failed_remove_shop: "&cShop do not exist!" 30 | shop_list: "&fShop list:" 31 | add_spawner: "&aAdded!" 32 | remove_spawner: "&aRemoved!" 33 | spawner_list: "&fTeam spawner list:" 34 | spawner_list_error: "&cGame does not exist or spawner is not set!" 35 | failed_remove_spawner: "&cTeam spawner do not exist!" 36 | edit_game_error: "&cGame does not exist!" 37 | help: 38 | shop_list: "&e/bwsba shop list &7-&f Shop list" 39 | remove_shop: "&e/bwsba shop remove &7-&f Remove a shop" 40 | set_item_shop: "&e/bwsba shop set item &7-&f Add a item shop" 41 | set_team_shop: "&e/bwsba shop set team &7-&f Add a team shop" 42 | spawner_list: "&e/bwsba spawner list &7-&f Team spawner list" 43 | remove_spawner: "&e/bwsba spawner remove &7-&f Remove a team spawner" 44 | add_spawner: "&e/bwsba spawner add &7-&f Add a team spawner" 45 | edit_game: "&e/bwsba edit &7-&f Edit game" 46 | unknown: "Unknown command! Use &e/bwsba help &ffor help." 47 | inventory: 48 | edit_game: "EditGame" 49 | item: 50 | edit_game: 51 | name: 52 | menu_item: "&eGame Edit Menu" 53 | align_angle_item: "&eAlign Angle" 54 | align_location_item: "&eAlign Location" 55 | teleport_tool: "&eTeleport Tool" 56 | back: "&fBack" 57 | set_lobby: "&fSet lobby" 58 | set_mix_players: "&fSet mix players" 59 | edit_team: "&fEdit team" 60 | set_bed: "&fSet team bed" 61 | set_spawn: "&fSet team spawn" 62 | set_item_shop: "&fSet item shop" 63 | set_team_shop: "&fSet team shop" 64 | set_spawner: "&fSet resource spawner" 65 | set_team_spawner: "&fTeam resource spawner" 66 | set_game_spawner: "&fGame resource spawner" 67 | set_region_loc1: "&fSet region location A" 68 | set_region_loc2: "&fSet region location B" 69 | save_game: "&bSave Game" 70 | start_game: "&aStart Game" 71 | stop_game: "&cStop Game" 72 | lore: 73 | set: "&eClick to set!" 74 | add: "&eClick to add!" 75 | remove: "&cClick to remove!" 76 | complete: "&aComplete!" 77 | mix_players: "&eMin players &c{players}" 78 | max_players: "&eMax players &c{players}" 79 | browse: "&eClick Browse!" 80 | anvil: 81 | edit_game: 82 | set_mix_players: "Enter min players" 83 | set_team_name: "Enter team name" 84 | set_team_max_players: "Enter team max players" 85 | holographic: 86 | edit_game: 87 | loc1: "&aLocation A" 88 | loc2: "&aLocation B" 89 | lobby: "&aWaiting Lobby" 90 | bed: "{team} &fBed" 91 | spawn: "{team} &fSpawn" 92 | spawner: "&a{resource} Spawner" 93 | team_spawner: "{team}&f Team spawner" 94 | shop: 95 | item: "&fID: &a{id} &eItem Shop" 96 | team: "&fID: &a{id} &eTeam Shop" 97 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/FastRespawn.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.GameMode; 8 | import org.bukkit.Location; 9 | import org.bukkit.Material; 10 | import org.bukkit.entity.Player; 11 | import org.bukkit.event.EventHandler; 12 | import org.bukkit.event.EventPriority; 13 | import org.bukkit.event.Listener; 14 | import org.bukkit.event.entity.EntityDamageEvent; 15 | import org.bukkit.event.entity.PlayerDeathEvent; 16 | import org.bukkit.event.entity.EntityDamageEvent.DamageCause; 17 | import org.bukkit.event.player.PlayerRespawnEvent; 18 | import org.bukkit.inventory.ItemStack; 19 | import org.bukkit.inventory.PlayerInventory; 20 | 21 | import io.github.bedwarsrel.BedwarsRel; 22 | import io.github.bedwarsrel.game.Game; 23 | import io.github.bedwarsrel.game.GameState; 24 | import io.github.bedwarsrel.utils.SoundMachine; 25 | import me.ram.bedwarsscoreboardaddon.config.Config; 26 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 27 | 28 | public class FastRespawn implements Listener { 29 | 30 | @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) 31 | public void onDamage(EntityDamageEvent e) { 32 | if (!Config.fast_respawn) { 33 | return; 34 | } 35 | if (!(e.getEntity() instanceof Player)) { 36 | return; 37 | } 38 | Player player = (Player) e.getEntity(); 39 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 40 | if (game == null || !game.getState().equals(GameState.RUNNING)) { 41 | return; 42 | } 43 | if (BedwarsUtil.isSpectator(game, player) || player.getGameMode().equals(GameMode.SPECTATOR)) { 44 | return; 45 | } 46 | if (e.getDamage() <= 0) { 47 | return; 48 | } 49 | if (e.getFinalDamage() < player.getHealth() && !e.getCause().equals(DamageCause.VOID)) { 50 | return; 51 | } 52 | e.setCancelled(true); 53 | e.setDamage(0); 54 | Location location = player.getLocation(); 55 | location.getWorld().playSound(location, SoundMachine.get("HURT_FLESH", "ENTITY_PLAYER_HURT"), 1, 1); 56 | PlayerInventory inventory = player.getInventory(); 57 | List items = new ArrayList(); 58 | for (ItemStack item : inventory.getContents()) { 59 | if (item != null) { 60 | items.add(item); 61 | } 62 | } 63 | if (inventory.getHelmet() != null) { 64 | items.add(inventory.getHelmet()); 65 | } 66 | if (inventory.getChestplate() != null) { 67 | items.add(inventory.getChestplate()); 68 | } 69 | if (inventory.getLeggings() != null) { 70 | items.add(inventory.getLeggings()); 71 | } 72 | if (inventory.getBoots() != null) { 73 | items.add(inventory.getBoots()); 74 | } 75 | player.closeInventory(); 76 | PlayerDeathEvent deathEvent = new PlayerDeathEvent(player, items, 0, null); 77 | Bukkit.getPluginManager().callEvent(deathEvent); 78 | if (!deathEvent.getKeepInventory()) { 79 | inventory.clear(); 80 | inventory.setHelmet(new ItemStack(Material.AIR)); 81 | inventory.setChestplate(new ItemStack(Material.AIR)); 82 | inventory.setLeggings(new ItemStack(Material.AIR)); 83 | inventory.setBoots(new ItemStack(Material.AIR)); 84 | deathEvent.getDrops().forEach(item -> { 85 | if (item != null && !item.getType().equals(Material.AIR)) { 86 | location.getWorld().dropItemNaturally(location, item); 87 | } 88 | }); 89 | } 90 | player.getActivePotionEffects().forEach(effect -> { 91 | player.removePotionEffect(effect.getType()); 92 | }); 93 | player.setFoodLevel(20); 94 | player.setHealth(player.getMaxHealth()); 95 | PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(player, player.getWorld().getSpawnLocation(), false); 96 | Bukkit.getPluginManager().callEvent(respawnEvent); 97 | player.teleport(respawnEvent.getRespawnLocation()); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/Sharpness.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.bukkit.enchantments.Enchantment; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.inventory.ItemStack; 9 | import org.bukkit.inventory.meta.ItemMeta; 10 | 11 | import io.github.bedwarsrel.game.Game; 12 | import io.github.bedwarsrel.game.Team; 13 | import lombok.Getter; 14 | import lombok.Setter; 15 | import me.ram.bedwarsscoreboardaddon.config.Config; 16 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 17 | 18 | public class Sharpness implements Upgrade { 19 | 20 | @Getter 21 | private Game game; 22 | @Getter 23 | private Team team; 24 | @Getter 25 | @Setter 26 | private int level; 27 | @Getter 28 | @Setter 29 | private String buyer; 30 | 31 | public Sharpness(Game game, Team team, int level) { 32 | this.game = game; 33 | this.team = team; 34 | this.level = level; 35 | } 36 | 37 | public UpgradeType getType() { 38 | return UpgradeType.SHARPNESS; 39 | } 40 | 41 | public String getName() { 42 | return Config.teamshop_upgrade_name.get(getType()); 43 | } 44 | 45 | public void runUpgrade() { 46 | for (Player player : team.getPlayers()) { 47 | if (BedwarsUtil.isSpectator(game, player)) { 48 | continue; 49 | } 50 | int i = player.getInventory().getContents().length; 51 | ItemStack[] stacks = player.getInventory().getContents(); 52 | for (int j = 0; j < i; j++) { 53 | final ItemStack stack = stacks[j]; 54 | if (stack != null && (stack.getType().name().contains("_SWORD") || stack.getType().name().contains("_AXE"))) { 55 | ItemStack itemStack = stack; 56 | ItemMeta itemMeta = itemStack.getItemMeta(); 57 | if (level > 0) { 58 | if (itemMeta.getLore() == null) { 59 | setSharpness(player, itemStack, itemMeta, j, level, true); 60 | } else if (!itemMeta.getLore().contains("§s§1§0§0§0§" + level)) { 61 | setSharpness(player, itemStack, itemMeta, j, level, true); 62 | } 63 | } else if (itemMeta.getLore() != null) { 64 | if (itemMeta.getLore().contains("§s§1§0§0§0§1")) { 65 | setSharpness(player, itemStack, itemMeta, j, 1, false); 66 | } 67 | if (itemMeta.getLore().contains("§s§1§0§0§0§2")) { 68 | setSharpness(player, itemStack, itemMeta, j, 2, false); 69 | } 70 | } 71 | } 72 | } 73 | } 74 | } 75 | 76 | private void setSharpness(Player player, ItemStack itemStack, ItemMeta itemMeta, int j, int k, boolean b) { 77 | List lores = new ArrayList(); 78 | int ol = 0; 79 | if (itemMeta.getLore() != null) { 80 | for (String lore : itemMeta.getLore()) { 81 | lores.add(lore); 82 | if (lore.equals("§s§1§0§0§0§1")) { 83 | ol = 1; 84 | } 85 | if (lore.equals("§s§1§0§0§0§2")) { 86 | ol = 2; 87 | } 88 | } 89 | } 90 | if (b) { 91 | lores.remove("§s§1§0§0§0§1"); 92 | lores.remove("§s§1§0§0§0§2"); 93 | lores.add("§s§1§0§0§0§" + k); 94 | itemMeta.setLore(lores); 95 | itemStack.setItemMeta(itemMeta); 96 | int el = itemStack.getEnchantmentLevel(Enchantment.DAMAGE_ALL) - ol; 97 | itemStack.removeEnchantment(Enchantment.DAMAGE_ALL); 98 | int nl = el + k; 99 | if (nl > 0) { 100 | itemStack.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, nl); 101 | } 102 | } else { 103 | lores.remove("§s§1§0§0§0§1"); 104 | lores.remove("§s§1§0§0§0§2"); 105 | itemMeta.setLore(lores); 106 | itemStack.setItemMeta(itemMeta); 107 | int el = itemStack.getEnchantmentLevel(Enchantment.DAMAGE_ALL) - k; 108 | itemStack.removeEnchantment(Enchantment.DAMAGE_ALL); 109 | if (el > 0) { 110 | itemStack.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, el); 111 | } 112 | } 113 | player.getInventory().setItem(j, itemStack); 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/commands/CommandTabCompleter.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.commands; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Arrays; 5 | import java.util.List; 6 | import org.bukkit.command.Command; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.command.TabCompleter; 9 | import io.github.bedwarsrel.BedwarsRel; 10 | import io.github.bedwarsrel.game.Game; 11 | import me.ram.bedwarsscoreboardaddon.config.Config; 12 | 13 | public class CommandTabCompleter implements TabCompleter { 14 | 15 | @Override 16 | public List onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { 17 | List suggest = getSuggest(sender, args); 18 | String last = args[args.length - 1]; 19 | if (suggest != null && !last.equals("")) { 20 | List list = new ArrayList(); 21 | suggest.forEach(s -> { 22 | if (s.startsWith(last)) { 23 | list.add(s); 24 | } 25 | }); 26 | return list; 27 | } 28 | return suggest; 29 | } 30 | 31 | private List getSuggest(CommandSender sender, String[] args) { 32 | if (args.length == 1) { 33 | return Arrays.asList("help", "shop", "spawner", "edit", "reload", "upcheck"); 34 | } 35 | if (args.length == 2) { 36 | if (args[0].equalsIgnoreCase("shop")) { 37 | return Arrays.asList("list", "remove", "set"); 38 | } 39 | if (args[0].equalsIgnoreCase("spawner")) { 40 | return Arrays.asList("list", "remove", "add"); 41 | } 42 | if (args[0].equalsIgnoreCase("edit")) { 43 | return getGames(); 44 | } 45 | } else if (args.length == 3) { 46 | if (args[0].equalsIgnoreCase("shop") && args[1].equalsIgnoreCase("set")) { 47 | return Arrays.asList("item", "team"); 48 | } 49 | if (args[0].equalsIgnoreCase("shop") && args[1].equalsIgnoreCase("list") && sender.hasPermission("bedwarsscoreboardaddon.shop.list")) { 50 | return getGames(); 51 | } 52 | if (args[0].equalsIgnoreCase("shop") && args[1].equalsIgnoreCase("remove") && sender.hasPermission("bedwarsscoreboardaddon.shop.remove")) { 53 | List list = new ArrayList(); 54 | list.addAll(Config.game_shop_shops.keySet()); 55 | return list; 56 | } 57 | if (args[0].equalsIgnoreCase("spawner") && args[1].equalsIgnoreCase("list")) { 58 | return getGames(); 59 | } 60 | if (args[0].equalsIgnoreCase("spawner") && args[1].equalsIgnoreCase("list") && sender.hasPermission("bedwarsscoreboardaddon.spawner.list")) { 61 | return getGames(); 62 | } 63 | if (args[0].equalsIgnoreCase("spawner") && args[1].equalsIgnoreCase("add") && sender.hasPermission("bedwarsscoreboardaddon.spawner.add")) { 64 | return getGames(); 65 | } 66 | if (args[0].equalsIgnoreCase("spawner") && args[1].equalsIgnoreCase("remove") && sender.hasPermission("bedwarsscoreboardaddon.spawner.remove")) { 67 | List list = new ArrayList(); 68 | list.addAll(Config.game_team_spawners.keySet()); 69 | return list; 70 | } 71 | } else if (args.length == 4) { 72 | if (args[0].equalsIgnoreCase("shop") && args[1].equalsIgnoreCase("set") && (args[2].equalsIgnoreCase("item") || args[2].equalsIgnoreCase("team")) && sender.hasPermission("bedwarsscoreboardaddon.shop.set")) { 73 | return getGames(); 74 | } 75 | if (args[0].equalsIgnoreCase("spawner") && args[1].equalsIgnoreCase("add") && sender.hasPermission("bedwarsscoreboardaddon.spawner.add")) { 76 | String game = args[2]; 77 | return getTeams(game); 78 | } 79 | } 80 | return new ArrayList(); 81 | } 82 | 83 | private List getGames() { 84 | List list = new ArrayList(); 85 | BedwarsRel.getInstance().getGameManager().getGames().forEach(game -> { 86 | list.add(game.getName()); 87 | }); 88 | return list; 89 | } 90 | 91 | private List getTeams(String g) { 92 | List list = new ArrayList(); 93 | Game game = BedwarsRel.getInstance().getGameManager().getGame(g); 94 | if (game == null) { 95 | return list; 96 | } 97 | list.addAll(game.getTeams().keySet()); 98 | return list; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/HidePlayer.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.List; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.entity.PlayerDeathEvent; 9 | import org.bukkit.event.player.PlayerJoinEvent; 10 | import io.github.bedwarsrel.BedwarsRel; 11 | import io.github.bedwarsrel.events.BedwarsPlayerJoinedEvent; 12 | import io.github.bedwarsrel.events.BedwarsPlayerLeaveEvent; 13 | import io.github.bedwarsrel.game.Game; 14 | import io.github.bedwarsrel.game.GameManager; 15 | import io.github.bedwarsrel.game.GameState; 16 | import io.github.bedwarsrel.game.Team; 17 | import me.ram.bedwarsscoreboardaddon.Main; 18 | import me.ram.bedwarsscoreboardaddon.config.Config; 19 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 20 | 21 | public class HidePlayer implements Listener { 22 | 23 | @EventHandler 24 | public void onJoin(PlayerJoinEvent e) { 25 | if (!Config.hide_player) { 26 | return; 27 | } 28 | Player player = e.getPlayer(); 29 | GameManager man = BedwarsRel.getInstance().getGameManager(); 30 | Bukkit.getOnlinePlayers().forEach(p -> { 31 | if (man.getGameOfPlayer(p) != null) { 32 | hidePlayer(p, player); 33 | hidePlayer(player, p); 34 | } 35 | }); 36 | } 37 | 38 | @EventHandler 39 | public void onJoined(BedwarsPlayerJoinedEvent e) { 40 | if (!Config.hide_player) { 41 | return; 42 | } 43 | Game game = e.getGame(); 44 | Player player = e.getPlayer(); 45 | if (game.getState().equals(GameState.WAITING)) { 46 | List list = game.getPlayers(); 47 | Bukkit.getOnlinePlayers().forEach(p -> { 48 | if (list.contains(p)) { 49 | showPlayer(p, player); 50 | showPlayer(player, p); 51 | } else { 52 | hidePlayer(p, player); 53 | hidePlayer(player, p); 54 | } 55 | }); 56 | } else if (game.getState().equals(GameState.RUNNING)) { 57 | List list = game.getPlayers(); 58 | Bukkit.getOnlinePlayers().forEach(p -> { 59 | if (list.contains(p)) { 60 | if (BedwarsUtil.isSpectator(game, p)) { 61 | hidePlayer(p, player); 62 | hidePlayer(player, p); 63 | } else { 64 | hidePlayer(p, player); 65 | showPlayer(player, p); 66 | } 67 | } else { 68 | hidePlayer(p, player); 69 | hidePlayer(player, p); 70 | } 71 | }); 72 | } 73 | } 74 | 75 | @EventHandler 76 | public void onLeave(BedwarsPlayerLeaveEvent e) { 77 | if (!Config.hide_player) { 78 | return; 79 | } 80 | Player player = e.getPlayer(); 81 | GameManager man = BedwarsRel.getInstance().getGameManager(); 82 | Bukkit.getOnlinePlayers().forEach(p -> { 83 | if (man.getGameOfPlayer(p) == null) { 84 | showPlayer(p, player); 85 | showPlayer(player, p); 86 | } else { 87 | hidePlayer(p, player); 88 | hidePlayer(player, p); 89 | } 90 | }); 91 | } 92 | 93 | @EventHandler 94 | public void onDeath(PlayerDeathEvent e) { 95 | Player player = e.getEntity(); 96 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 97 | if (game == null) { 98 | return; 99 | } 100 | Team team = game.getPlayerTeam(player); 101 | if (team == null) { 102 | return; 103 | } 104 | if (team.isDead(game)) { 105 | Bukkit.getOnlinePlayers().forEach(p -> { 106 | hidePlayer(p, player); 107 | }); 108 | } 109 | } 110 | 111 | private void hidePlayer(Player p1, Player p2) { 112 | if (p1.getUniqueId().equals(p2.getUniqueId())) { 113 | return; 114 | } 115 | if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_12")) { 116 | p1.hidePlayer(Main.getInstance(), p2); 117 | } else { 118 | p1.hidePlayer(p2); 119 | } 120 | } 121 | 122 | private void showPlayer(Player p1, Player p2) { 123 | if (p1.getUniqueId().equals(p2.getUniqueId())) { 124 | return; 125 | } 126 | if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_12")) { 127 | p1.showPlayer(Main.getInstance(), p2); 128 | } else { 129 | p1.showPlayer(p2); 130 | } 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/WitherBow.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import org.bukkit.Effect; 4 | import org.bukkit.entity.Entity; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.entity.WitherSkull; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.Listener; 9 | import org.bukkit.event.entity.EntityDamageByEntityEvent; 10 | import org.bukkit.event.entity.EntityShootBowEvent; 11 | import org.bukkit.potion.PotionEffect; 12 | import org.bukkit.potion.PotionEffectType; 13 | import org.bukkit.scheduler.BukkitRunnable; 14 | import io.github.bedwarsrel.BedwarsRel; 15 | import io.github.bedwarsrel.events.BedwarsGameStartedEvent; 16 | import io.github.bedwarsrel.game.Game; 17 | import io.github.bedwarsrel.game.GameState; 18 | import me.ram.bedwarsscoreboardaddon.Main; 19 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 20 | import me.ram.bedwarsscoreboardaddon.config.Config; 21 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonPlayerShootWitherBowEvent; 22 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 23 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 24 | 25 | public class WitherBow implements Listener { 26 | 27 | @EventHandler 28 | public void onStarted(BedwarsGameStartedEvent e) { 29 | Game game = e.getGame(); 30 | Arena arena = Main.getInstance().getArenaManager().getArena(game.getName()); 31 | arena.addGameTask(new BukkitRunnable() { 32 | @Override 33 | public void run() { 34 | if (e.getGame().getTimeLeft() <= Config.witherbow_gametime && Config.witherbow_enabled) { 35 | if (!Config.witherbow_title.equals("") || !Config.witherbow_subtitle.equals("")) { 36 | game.getPlayers().forEach(player -> { 37 | Utils.sendTitle(player, 10, 50, 10, Config.witherbow_title, Config.witherbow_subtitle); 38 | }); 39 | } 40 | if (!Config.witherbow_message.equals("")) { 41 | game.getPlayers().forEach(player -> { 42 | player.sendMessage(Config.witherbow_message); 43 | }); 44 | } 45 | PlaySound.playSound(game, Config.play_sound_sound_enable_witherbow); 46 | cancel(); 47 | } 48 | } 49 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 50 | } 51 | 52 | @EventHandler 53 | public void onShoot(EntityShootBowEvent e) { 54 | if (!Config.witherbow_enabled) { 55 | return; 56 | } 57 | if (!(e.getEntity() instanceof Player)) { 58 | return; 59 | } 60 | Player player = (Player) e.getEntity(); 61 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 62 | if (game == null || game.getState() != GameState.RUNNING || BedwarsUtil.isSpectator(game, player) || game.getTimeLeft() > Config.witherbow_gametime) { 63 | return; 64 | } 65 | WitherSkull skull = player.launchProjectile(WitherSkull.class); 66 | BoardAddonPlayerShootWitherBowEvent shootWitherBowEvent = new BoardAddonPlayerShootWitherBowEvent(game, player, skull); 67 | BedwarsRel.getInstance().getServer().getPluginManager().callEvent(shootWitherBowEvent); 68 | if (shootWitherBowEvent.isCancelled()) { 69 | skull.remove(); 70 | return; 71 | } 72 | player.getWorld().playEffect(player.getLocation(), Effect.MOBSPAWNER_FLAMES, 5); 73 | PlaySound.playSound(player, Config.play_sound_sound_witherbow); 74 | skull.setYield(4.0f); 75 | skull.setVelocity(e.getProjectile().getVelocity()); 76 | skull.setShooter(player); 77 | e.setCancelled(true); 78 | player.updateInventory(); 79 | } 80 | 81 | @EventHandler 82 | public void onDamage(EntityDamageByEntityEvent e) { 83 | Entity entity = e.getEntity(); 84 | Entity damager = e.getDamager(); 85 | if (!(entity instanceof Player) || !(damager instanceof WitherSkull)) { 86 | return; 87 | } 88 | WitherSkull skull = (WitherSkull) damager; 89 | if (skull.getShooter() == null) { 90 | return; 91 | } 92 | Player shooter = (Player) skull.getShooter(); 93 | Player player = (Player) entity; 94 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 95 | if (game == null) { 96 | return; 97 | } 98 | if (BedwarsUtil.isSpectator(game, player) || BedwarsUtil.isSpectator(game, shooter)) { 99 | e.setCancelled(true); 100 | return; 101 | } 102 | if (game.getPlayerTeam(shooter).getName().equals(game.getPlayerTeam(player).getName())) { 103 | e.setCancelled(true); 104 | return; 105 | } 106 | player.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 100, 1)); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/listener/ShopListener.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.listener; 2 | 3 | import java.io.File; 4 | import java.io.IOException; 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | import org.bukkit.configuration.file.FileConfiguration; 9 | import org.bukkit.configuration.file.YamlConfiguration; 10 | import org.bukkit.entity.Player; 11 | import org.bukkit.event.EventHandler; 12 | import org.bukkit.event.EventPriority; 13 | import org.bukkit.event.Listener; 14 | 15 | import com.comphenix.protocol.PacketType; 16 | import com.comphenix.protocol.ProtocolLibrary; 17 | import com.comphenix.protocol.events.ListenerPriority; 18 | import com.comphenix.protocol.events.PacketAdapter; 19 | import com.comphenix.protocol.events.PacketContainer; 20 | import com.comphenix.protocol.events.PacketEvent; 21 | import com.comphenix.protocol.wrappers.WrappedDataWatcher; 22 | 23 | import io.github.bedwarsrel.BedwarsRel; 24 | import io.github.bedwarsrel.game.Game; 25 | import me.ram.bedwarsscoreboardaddon.Main; 26 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 27 | import me.ram.bedwarsscoreboardaddon.config.Config; 28 | import net.citizensnpcs.api.CitizensAPI; 29 | import net.citizensnpcs.api.event.CitizensEnableEvent; 30 | import net.citizensnpcs.api.event.NPCLeftClickEvent; 31 | import net.citizensnpcs.api.event.NPCRightClickEvent; 32 | import net.citizensnpcs.api.npc.NPC; 33 | 34 | public class ShopListener implements Listener { 35 | 36 | private WrappedDataWatcher.Serializer booleanserializer; 37 | 38 | public ShopListener() { 39 | if (!BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { 40 | booleanserializer = WrappedDataWatcher.Registry.get(Boolean.class); 41 | } 42 | packetListener(); 43 | } 44 | 45 | private void packetListener() { 46 | ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(Main.getInstance(), ListenerPriority.HIGHEST, new PacketType[] { PacketType.Play.Server.ENTITY_METADATA }) { 47 | @Override 48 | public void onPacketSending(PacketEvent e) { 49 | PacketContainer packet = e.getPacket(); 50 | int id = packet.getIntegers().read(0); 51 | if (isShopNPC(id)) { 52 | WrappedDataWatcher wrappedDataWatcher = new WrappedDataWatcher(); 53 | if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { 54 | wrappedDataWatcher.setObject(3, (byte) 0); 55 | } else { 56 | wrappedDataWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(3, booleanserializer), false); 57 | } 58 | packet.getWatchableCollectionModifier().write(0, wrappedDataWatcher.getWatchableObjects()); 59 | } 60 | } 61 | }); 62 | } 63 | 64 | @EventHandler(priority = EventPriority.LOWEST) 65 | public void onCitizensEnable(CitizensEnableEvent e) { 66 | File folder = Config.getNPCFile(); 67 | FileConfiguration npcconfig = YamlConfiguration.loadConfiguration(folder); 68 | if (npcconfig.getKeys(false).contains("npcs")) { 69 | List npcs = npcconfig.getStringList("npcs"); 70 | List gamenpcs = new ArrayList(); 71 | for (NPC npc : CitizensAPI.getNPCRegistry().sorted()) { 72 | if (npcs.contains(npc.getId() + "")) { 73 | gamenpcs.add(npc); 74 | } 75 | } 76 | for (NPC npc : gamenpcs) { 77 | CitizensAPI.getNPCRegistry().deregister(npc); 78 | } 79 | npcconfig.set("npcs", new ArrayList()); 80 | try { 81 | npcconfig.save(folder); 82 | } catch (IOException e1) { 83 | } 84 | } 85 | } 86 | 87 | @EventHandler(priority = EventPriority.HIGHEST) 88 | public void onNPCLeftClick(NPCLeftClickEvent e) { 89 | e.setCancelled(onNPCClick(e.getClicker(), e.getNPC(), e.isCancelled())); 90 | } 91 | 92 | @EventHandler(priority = EventPriority.HIGHEST) 93 | public void onNPCRightClick(NPCRightClickEvent e) { 94 | e.setCancelled(onNPCClick(e.getClicker(), e.getNPC(), e.isCancelled())); 95 | } 96 | 97 | private boolean onNPCClick(Player player, NPC npc, boolean isCancelled) { 98 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 99 | if (game == null) { 100 | return isCancelled; 101 | } 102 | return Main.getInstance().getArenaManager().getArena(game.getName()).getShop().onNPCClick(player, npc, isCancelled); 103 | } 104 | 105 | private boolean isShopNPC(int id) { 106 | for (Arena arena : Main.getInstance().getArenaManager().getArenas().values()) { 107 | if (arena.getShop() != null && arena.getShop().isShopNPC(id)) { 108 | return true; 109 | } 110 | } 111 | return false; 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/LobbyScoreBoard.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.ArrayList; 5 | import java.util.Date; 6 | import java.util.List; 7 | 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.event.EventHandler; 10 | import org.bukkit.event.Listener; 11 | import org.bukkit.scheduler.BukkitRunnable; 12 | import io.github.bedwarsrel.BedwarsRel; 13 | import io.github.bedwarsrel.events.BedwarsPlayerJoinedEvent; 14 | import io.github.bedwarsrel.game.Game; 15 | import io.github.bedwarsrel.game.GameState; 16 | import io.github.bedwarsrel.game.Team; 17 | import me.ram.bedwarsscoreboardaddon.Main; 18 | import me.ram.bedwarsscoreboardaddon.config.Config; 19 | import me.ram.bedwarsscoreboardaddon.utils.PlaceholderAPIUtil; 20 | import me.ram.bedwarsscoreboardaddon.utils.ScoreboardUtil; 21 | 22 | public class LobbyScoreBoard implements Listener { 23 | 24 | private String title = ""; 25 | 26 | private String getDate() { 27 | Date date = new Date(); 28 | SimpleDateFormat format = new SimpleDateFormat(Config.date_format); 29 | return format.format(date); 30 | } 31 | 32 | public LobbyScoreBoard() { 33 | new BukkitRunnable() { 34 | int i = 0; 35 | int tc = 0; 36 | 37 | @Override 38 | public void run() { 39 | i--; 40 | if (i <= 0) { 41 | i = Config.lobby_scoreboard_interval; 42 | title = Config.lobby_scoreboard_title.get(tc); 43 | tc++; 44 | if (tc >= Config.lobby_scoreboard_title.size()) { 45 | tc = 0; 46 | } 47 | } 48 | } 49 | }.runTaskTimer(Main.getInstance(), 0L, 1L); 50 | } 51 | 52 | @EventHandler 53 | public void onJoined(BedwarsPlayerJoinedEvent e) { 54 | if (!Config.lobby_scoreboard_enabled) { 55 | return; 56 | } 57 | Game game = e.getGame(); 58 | Player player = e.getPlayer(); 59 | BedwarsRel.getInstance().getConfig().set("lobby-scoreboard.content", getLines(player, game)); 60 | int tc = 0; 61 | new BukkitRunnable() { 62 | int i = 0; 63 | 64 | @Override 65 | public void run() { 66 | if (player.isOnline() && e.getGame().getPlayers().contains(player) && e.getGame().getState() == GameState.WAITING) { 67 | i--; 68 | if (i <= 0) { 69 | i = Config.lobby_scoreboard_interval; 70 | updateScoreboard(player, game, tc); 71 | } 72 | } else { 73 | this.cancel(); 74 | } 75 | } 76 | }.runTaskTimer(Main.getInstance(), 0L, 1L); 77 | } 78 | 79 | private void updateScoreboard(Player player, Game game, int tc) { 80 | BedwarsRel.getInstance().getConfig().set("lobby-scoreboard.title", title); 81 | ScoreboardUtil.setLobbyScoreboard(player, title.replace("{game}", game.getName()), getLines(player, game), game); 82 | } 83 | 84 | private List getLines(Player player, Game game) { 85 | List lines = new ArrayList(); 86 | String state = Config.lobby_scoreboard_state_waiting; 87 | String countdown = "null"; 88 | int needplayers = game.getMinPlayers() - game.getPlayers().size(); 89 | needplayers = needplayers < 0 ? 0 : needplayers; 90 | if (game.getLobbyCountdown() != null) { 91 | state = Config.lobby_scoreboard_state_countdown; 92 | int lobbytime = game.getLobbyCountdown().getLobbytime(); 93 | int counter = game.getLobbyCountdown().getCounter() + 1; 94 | counter = counter > lobbytime ? lobbytime : counter; 95 | countdown = counter + ""; 96 | } 97 | String team_name = ""; 98 | String team_color = ""; 99 | String team_initials = ""; 100 | String player_team_players = ""; 101 | Team team = game.getPlayerTeam(player); 102 | if (team != null) { 103 | team_name = team.getName(); 104 | team_color = team.getChatColor().toString(); 105 | team_initials = team.getChatColor().name().substring(0, 1); 106 | player_team_players = game.getPlayerTeam(player).getPlayers().size() + ""; 107 | } 108 | for (String li : Config.lobby_scoreboard_lines) { 109 | String l = li.replace("{date}", getDate()).replace("{state}", state).replace("{game}", game.getName()).replace("{players}", game.getPlayers().size() + "").replace("{maxplayers}", game.getMaxPlayers() + "").replace("{minplayers}", game.getMinPlayers() + "").replace("{needplayers}", needplayers + "").replace("{countdown}", countdown).replace("{team}", team_name).replace("{color}", team_color).replace("{team_initials}", team_initials).replace("{team_peoples}", player_team_players); 110 | l = PlaceholderAPIUtil.setPlaceholders(player, l); 111 | lines.add(getQuellLine(lines, l)); 112 | } 113 | return lines; 114 | } 115 | 116 | private String getQuellLine(List lines, String line) { 117 | String l = line; 118 | while (true) { 119 | if (!lines.contains(l)) { 120 | return l; 121 | } 122 | l += "§r"; 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/Actionbar.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.Date; 5 | 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.scheduler.BukkitRunnable; 9 | 10 | import io.github.bedwarsrel.game.Game; 11 | import io.github.bedwarsrel.game.Team; 12 | import lombok.Getter; 13 | import me.ram.bedwarsscoreboardaddon.Main; 14 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 15 | import me.ram.bedwarsscoreboardaddon.config.Config; 16 | import me.ram.bedwarsscoreboardaddon.manager.PlaceholderManager; 17 | import me.ram.bedwarsscoreboardaddon.utils.PlaceholderAPIUtil; 18 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 19 | 20 | public class Actionbar { 21 | 22 | @Getter 23 | private Arena arena; 24 | @Getter 25 | private Game game; 26 | @Getter 27 | private PlaceholderManager placeholderManager; 28 | 29 | public Actionbar(Arena arena) { 30 | this.game = arena.getGame(); 31 | placeholderManager = new PlaceholderManager(game); 32 | Main.getInstance().getArenaManager().getArena(game.getName()).addGameTask(new BukkitRunnable() { 33 | @Override 34 | public void run() { 35 | sendActionbar(); 36 | } 37 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 38 | } 39 | 40 | private void sendActionbar() { 41 | for (Player player : game.getPlayers()) { 42 | int wither = game.getTimeLeft() - Config.witherbow_gametime; 43 | String format = wither / 60 + ":" + ((wither % 60 < 10) ? ("0" + wither % 60) : (wither % 60)); 44 | String bowtime = null; 45 | if (wither > 0) { 46 | bowtime = format; 47 | } 48 | if (wither <= 0) { 49 | bowtime = Config.witherbow_already_starte; 50 | } 51 | if (game.getPlayerTeam(player) != null) { 52 | if (player.getLocation().getWorld().equals(game.getPlayerTeam(player).getSpawnLocation().getWorld())) { 53 | int alive_players = 0; 54 | for (Player p : game.getPlayers()) { 55 | if (!game.isSpectator(p)) { 56 | alive_players++; 57 | } 58 | } 59 | Team playerteam = game.getPlayerTeam(player); 60 | String ab = Config.actionbar; 61 | for (String identifier : placeholderManager.getGamePlaceholder().keySet()) { 62 | ab = ab.replace(identifier, placeholderManager.getGamePlaceholder().get(identifier).onGamePlaceholderRequest(game)); 63 | } 64 | if (playerteam == null || !placeholderManager.getTeamPlaceholders().containsKey(playerteam.getName())) { 65 | for (String teamname : placeholderManager.getTeamPlaceholders().keySet()) { 66 | for (String placeholder : placeholderManager.getTeamPlaceholders().get(teamname).keySet()) { 67 | ab = ab.replace(placeholder, ""); 68 | } 69 | } 70 | } else { 71 | for (String identifier : placeholderManager.getTeamPlaceholder(playerteam.getName()).keySet()) { 72 | ab = ab.replace(identifier, placeholderManager.getTeamPlaceholder(playerteam.getName()).get(identifier).onTeamPlaceholderRequest(playerteam)); 73 | } 74 | } 75 | if (placeholderManager.getPlayerPlaceholders().containsKey(player.getName())) { 76 | for (String identifier : placeholderManager.getPlayerPlaceholder(player.getName()).keySet()) { 77 | ab = ab.replace(identifier, placeholderManager.getPlayerPlaceholder(player.getName()).get(identifier).onPlayerPlaceholderRequest(game, player)); 78 | } 79 | } else { 80 | for (String playername : placeholderManager.getPlayerPlaceholders().keySet()) { 81 | for (String placeholder : placeholderManager.getPlayerPlaceholders().get(playername).keySet()) { 82 | ab = ab.replace(placeholder, ""); 83 | } 84 | } 85 | } 86 | ab = PlaceholderAPIUtil.setPlaceholders(player, ab); 87 | ab = ab.replace("{team_peoples}", game.getPlayerTeam(player).getPlayers().size() + "").replace("{bowtime}", bowtime).replace("{color}", game.getPlayerTeam(player).getChatColor() + "").replace("{team}", game.getPlayerTeam(player).getName()).replace("{range}", (int) player.getLocation().distance(game.getPlayerTeam(player).getSpawnLocation()) + "").replace("{time}", (game.getTimeLeft() / 60) + "").replace("{formattime}", getFormattedTimeLeft(game.getTimeLeft())).replace("{game}", game.getName()).replace("{date}", new SimpleDateFormat(Config.date_format).format(new Date())).replace("{online}", Bukkit.getOnlinePlayers().size() + "").replace("{alive_players}", alive_players + ""); 88 | Utils.sendPlayerActionbar(player, ab); 89 | } 90 | } 91 | } 92 | } 93 | 94 | private String getFormattedTimeLeft(int time) { 95 | int min = (int) Math.floor(time / 60); 96 | int sec = time % 60; 97 | String minStr = ((min < 10) ? ("0" + String.valueOf(min)) : String.valueOf(min)); 98 | String secStr = ((sec < 10) ? ("0" + String.valueOf(sec)) : String.valueOf(sec)); 99 | return minStr + ":" + secStr; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/ChatFormat.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.EventHandler; 5 | import org.bukkit.event.Listener; 6 | import org.bukkit.event.player.AsyncPlayerChatEvent; 7 | import org.bukkit.event.player.PlayerCommandPreprocessEvent; 8 | import io.github.bedwarsrel.BedwarsRel; 9 | import io.github.bedwarsrel.game.Game; 10 | import io.github.bedwarsrel.game.GameState; 11 | import io.github.bedwarsrel.game.Team; 12 | import me.ram.bedwarsscoreboardaddon.config.Config; 13 | import me.ram.bedwarsscoreboardaddon.utils.PlaceholderAPIUtil; 14 | 15 | public class ChatFormat implements Listener { 16 | 17 | @EventHandler 18 | public void onCmd(PlayerCommandPreprocessEvent e) { 19 | if (!Config.chat_format_enabled) { 20 | return; 21 | } 22 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(e.getPlayer()); 23 | if (game == null) { 24 | return; 25 | } 26 | Player player = e.getPlayer(); 27 | if (game.getState() != GameState.RUNNING || game.isSpectator(player)) { 28 | return; 29 | } 30 | if (e.getMessage().length() <= 7) { 31 | return; 32 | } 33 | 34 | String prefix = e.getMessage().substring(0, 7); 35 | if (!prefix.equals("/shout ")) { 36 | return; 37 | } 38 | e.setCancelled(true); 39 | if (!Config.chat_format_chat_all) { 40 | return; 41 | } 42 | String msg = PlaceholderAPIUtil.setPlaceholders(player, Config.chat_format_ingame_all); 43 | String playermsg = e.getMessage(); 44 | playermsg = playermsg.substring(7, playermsg.length()); 45 | for (Player p : game.getPlayers()) { 46 | p.sendMessage(msg.replace("{player}", player.getName()).replace("{message}", playermsg).replace("{color}", game.getPlayerTeam(player).getChatColor() + "").replace("{team}", game.getPlayerTeam(player).getName())); 47 | } 48 | } 49 | 50 | @EventHandler 51 | public void onChat(AsyncPlayerChatEvent e) { 52 | if (!Config.chat_format_enabled) { 53 | return; 54 | } 55 | Player player = e.getPlayer(); 56 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(player); 57 | if (game == null) { 58 | return; 59 | } 60 | e.setCancelled(true); 61 | if (game.getState() == GameState.WAITING) { 62 | if (Config.chat_format_chat_lobby) { 63 | if (game.getPlayerTeam(player) == null) { 64 | String msg = PlaceholderAPIUtil.setPlaceholders(player, Config.chat_format_lobby); 65 | msg = msg.replace("{player}", player.getName()).replace("{message}", e.getMessage()); 66 | for (Player p : game.getPlayers()) { 67 | p.sendMessage(msg); 68 | } 69 | } else { 70 | String msg = Config.chat_format_lobby_team; 71 | msg = PlaceholderAPIUtil.setPlaceholders(player, msg); 72 | Team team = game.getPlayerTeam(player); 73 | msg = msg.replace("{player}", player.getName()).replace("{message}", e.getMessage()).replace("{color}", team.getChatColor().toString()).replace("{team}", team.getName()); 74 | for (Player p : game.getPlayers()) { 75 | p.sendMessage(msg); 76 | } 77 | } 78 | } 79 | 80 | } else if (game.getState() == GameState.RUNNING) { 81 | if (game.isSpectator(player)) { 82 | if (Config.chat_format_chat_spectator) { 83 | String msg = Config.chat_format_spectator; 84 | msg = PlaceholderAPIUtil.setPlaceholders(player, msg); 85 | msg = msg.replace("{player}", player.getName()).replace("{message}", e.getMessage()); 86 | for (Player p : game.getPlayers()) { 87 | p.sendMessage(msg); 88 | } 89 | } 90 | } else { 91 | if (Config.chat_format_chat_all) { 92 | String prefix = ""; 93 | boolean all = false; 94 | for (String pref : Config.chat_format_all_prefix) { 95 | if (e.getMessage().startsWith(pref)) { 96 | all = true; 97 | prefix = pref; 98 | } 99 | } 100 | if (all) { 101 | String playermsg = e.getMessage(); 102 | playermsg = playermsg.substring(prefix.length(), playermsg.length()); 103 | String msg = Config.chat_format_ingame_all; 104 | msg = PlaceholderAPIUtil.setPlaceholders(player, msg); 105 | msg = msg.replace("{player}", player.getName()).replace("{message}", playermsg).replace("{color}", game.getPlayerTeam(player).getChatColor() + "").replace("{team}", game.getPlayerTeam(player).getName()); 106 | for (Player p : game.getPlayers()) { 107 | p.sendMessage(msg); 108 | } 109 | return; 110 | } 111 | } 112 | String msg = Config.chat_format_ingame; 113 | msg = PlaceholderAPIUtil.setPlaceholders(player, msg); 114 | msg = msg.replace("{player}", player.getName()).replace("{message}", e.getMessage()).replace("{color}", game.getPlayerTeam(player).getChatColor() + "").replace("{team}", game.getPlayerTeam(player).getName()); 115 | for (Player p : game.getPlayerTeam(player).getPlayers()) { 116 | p.sendMessage(msg); 117 | } 118 | } 119 | } 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/network/UpdateCheck.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.network; 2 | 3 | import java.util.Arrays; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.command.CommandSender; 10 | import org.bukkit.event.EventHandler; 11 | import org.bukkit.event.Listener; 12 | import org.bukkit.event.player.PlayerJoinEvent; 13 | import me.ram.bedwarsscoreboardaddon.Main; 14 | import me.ram.bedwarsscoreboardaddon.config.Config; 15 | import me.ram.bedwarsscoreboardaddon.config.EnumLocale; 16 | import me.ram.bedwarsscoreboardaddon.utils.NetworkUtil; 17 | import me.ram.bedwarsscoreboardaddon.utils.UnicodeUtil; 18 | 19 | public class UpdateCheck implements Listener { 20 | 21 | private static String version; 22 | private static String post; 23 | private static String[] update; 24 | private static Map> locale_urls; 25 | 26 | public UpdateCheck() { 27 | locale_urls = new HashMap>(); 28 | String url1 = "https://code.aliyun.com/TheRamU/Update/raw/master/BedwarsScoreBoardAddon-Chinese.txt"; 29 | String url2 = "https://raw.githubusercontent.com/TheRamU/Update/master/BedwarsScoreBoardAddon-Chinese.txt"; 30 | String url3 = "https://raw.githubusercontent.com/TheRamU/Update/master/BedwarsScoreBoardAddon-English.txt"; 31 | locale_urls.put(EnumLocale.ZH_CN, Arrays.asList(url1, url2)); 32 | locale_urls.put(EnumLocale.ZH_TW, Arrays.asList(url1, url2)); 33 | locale_urls.put(EnumLocale.EN_US, Arrays.asList(url3)); 34 | Bukkit.getScheduler().runTaskLater(Main.getInstance(), () -> { 35 | if (Config.update_check_enabled) { 36 | Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> { 37 | connectUrl(); 38 | Bukkit.getScheduler().runTaskLater(Main.getInstance(), () -> { 39 | if (Config.update_check_enabled && version != null && post != null && update != null && !version.equals(Main.getVersion())) { 40 | sendInfo(Bukkit.getConsoleSender(), version, post, update); 41 | } 42 | }, 100L); 43 | }); 44 | } 45 | Bukkit.getScheduler().runTaskTimerAsynchronously(Main.getInstance(), () -> { 46 | if (Config.update_check_enabled) { 47 | connectUrl(); 48 | } 49 | }, 20 * 86400, 20 * 86400); 50 | }, 5); 51 | } 52 | 53 | @EventHandler 54 | public void playerJoin(PlayerJoinEvent e) { 55 | if (Config.update_check_enabled && Config.update_check_report && version != null && post != null && update != null) { 56 | if (e.getPlayer().hasPermission("bedwarsscoreboardaddon.updatecheck") && !version.equals(Main.getVersion())) { 57 | sendInfo(e.getPlayer(), version, post, update); 58 | } 59 | } 60 | } 61 | 62 | public static void upCheck(CommandSender sender) { 63 | sender.sendMessage((String) Main.getInstance().getLocaleConfig().getLanguage("update_checking")); 64 | Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> { 65 | if (connectUrl()) { 66 | if (version.equals(Main.getVersion())) { 67 | sender.sendMessage((String) Main.getInstance().getLocaleConfig().getLanguage("no_update")); 68 | } else { 69 | sendInfo(sender, version, post, update); 70 | } 71 | } else { 72 | sender.sendMessage((String) Main.getInstance().getLocaleConfig().getLanguage("update_check_failed")); 73 | } 74 | }); 75 | } 76 | 77 | private static void sendInfo(CommandSender sender, String ver, String p, String[] u) { 78 | Bukkit.getScheduler().runTaskLater(Main.getInstance(), () -> { 79 | sender.sendMessage("§f====================================================="); 80 | sender.sendMessage("§7 "); 81 | sender.sendMessage(" §aBedwarsScoreBoardAddon"); 82 | sender.sendMessage("§7 "); 83 | sender.sendMessage(" §e" + Main.getInstance().getLocaleConfig().getLanguage("update_info")); 84 | sender.sendMessage("§7 "); 85 | sender.sendMessage(" §f" + Main.getInstance().getLocaleConfig().getLanguage("running_version") + ": §a" + Main.getVersion()); 86 | sender.sendMessage(" §f" + Main.getInstance().getLocaleConfig().getLanguage("update_version") + ": §a" + ver); 87 | sender.sendMessage("§7 "); 88 | sender.sendMessage(" §f" + Main.getInstance().getLocaleConfig().getLanguage("updates") + ": "); 89 | for (int i = 0; i < u.length; i++) { 90 | sender.sendMessage(" §f" + (i + 1) + ". §e" + UnicodeUtil.unicodeToCn(u[i])); 91 | } 92 | sender.sendMessage("§7 "); 93 | sender.sendMessage(" §f" + Main.getInstance().getLocaleConfig().getLanguage("update_download") + ": §b§n" + UnicodeUtil.unicodeToCn(p)); 94 | sender.sendMessage(""); 95 | sender.sendMessage("§f====================================================="); 96 | }, 5L); 97 | } 98 | 99 | private static boolean connectUrl() { 100 | String document = getDocument(); 101 | if (document != null && !document.equals("")) { 102 | String[] info = document.split(","); 103 | version = info[0]; 104 | post = info[1]; 105 | update = info[2].split(";"); 106 | return true; 107 | } 108 | return false; 109 | } 110 | 111 | private static String getDocument() { 112 | List list = locale_urls.get(Main.getInstance().getLocaleConfig().getPluginLocale()); 113 | for (String url : list) { 114 | String document = NetworkUtil.getDocument(url); 115 | if (document != null) { 116 | return document; 117 | } 118 | } 119 | return null; 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/teamshop/upgrades/Protection.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon.teamshop.upgrades; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import org.bukkit.enchantments.Enchantment; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.inventory.ItemStack; 9 | import org.bukkit.inventory.meta.ItemMeta; 10 | 11 | import io.github.bedwarsrel.game.Game; 12 | import io.github.bedwarsrel.game.Team; 13 | import lombok.Getter; 14 | import lombok.Setter; 15 | import me.ram.bedwarsscoreboardaddon.config.Config; 16 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 17 | 18 | public class Protection implements Upgrade { 19 | 20 | @Getter 21 | private Game game; 22 | @Getter 23 | private Team team; 24 | @Getter 25 | @Setter 26 | private int level; 27 | @Getter 28 | @Setter 29 | private String buyer; 30 | 31 | public Protection(Game game, Team team, int level) { 32 | this.game = game; 33 | this.team = team; 34 | this.level = level; 35 | } 36 | 37 | public UpgradeType getType() { 38 | return UpgradeType.PROTECTION; 39 | } 40 | 41 | public String getName() { 42 | return Config.teamshop_upgrade_name.get(getType()); 43 | } 44 | 45 | public void runUpgrade() { 46 | for (Player player : team.getPlayers()) { 47 | if (BedwarsUtil.isSpectator(game, player)) { 48 | continue; 49 | } 50 | int i = player.getInventory().getContents().length + 4; 51 | ItemStack[] stacks = player.getInventory().getContents(); 52 | for (int m = 0; m < i; m++) { 53 | int j = m - 4; 54 | ItemStack stack = null; 55 | if (j >= 0) { 56 | stack = stacks[j]; 57 | } else if (j == -1) { 58 | stack = player.getInventory().getHelmet(); 59 | } else if (j == -2) { 60 | stack = player.getInventory().getChestplate(); 61 | } else if (j == -3) { 62 | stack = player.getInventory().getLeggings(); 63 | } else if (j == -4) { 64 | stack = player.getInventory().getBoots(); 65 | } 66 | if (stack != null && (stack.getType().name().endsWith("_HELMET") || stack.getType().name().endsWith("_CHESTPLATE") || stack.getType().name().endsWith("_LEGGINGS") || stack.getType().name().endsWith("_BOOTS"))) { 67 | ItemStack itemStack = stack; 68 | ItemMeta itemMeta = itemStack.getItemMeta(); 69 | if (level > 0) { 70 | if (itemMeta.getLore() == null) { 71 | setProtection(player, itemStack, itemMeta, j, level, true); 72 | } else if (!itemMeta.getLore().contains("§a§1§0§0§0§" + level)) { 73 | setProtection(player, itemStack, itemMeta, j, level, true); 74 | } 75 | } else if (itemMeta.getLore() != null) { 76 | if (itemMeta.getLore().contains("§a§1§0§0§0§1")) { 77 | setProtection(player, itemStack, itemMeta, j, 1, false); 78 | } else if (itemMeta.getLore().contains("§a§1§0§0§0§2")) { 79 | setProtection(player, itemStack, itemMeta, j, 2, false); 80 | } else if (itemMeta.getLore().contains("§a§1§0§0§0§3")) { 81 | setProtection(player, itemStack, itemMeta, j, 3, false); 82 | } else if (itemMeta.getLore().contains("§a§1§0§0§0§4")) { 83 | setProtection(player, itemStack, itemMeta, j, 4, false); 84 | } 85 | } 86 | } 87 | } 88 | } 89 | } 90 | 91 | private void setProtection(Player player, ItemStack itemStack, ItemMeta itemMeta, int j, int k, boolean b) { 92 | List lores = new ArrayList(); 93 | int ol = 0; 94 | if (itemMeta.getLore() != null) { 95 | for (String lore : itemMeta.getLore()) { 96 | lores.add(lore); 97 | if (lore.equals("§a§1§0§0§0§1")) { 98 | ol = 1; 99 | } 100 | if (lore.equals("§a§1§0§0§0§2")) { 101 | ol = 2; 102 | } 103 | if (lore.equals("§a§1§0§0§0§3")) { 104 | ol = 3; 105 | } 106 | if (lore.equals("§a§1§0§0§0§4")) { 107 | ol = 4; 108 | } 109 | } 110 | } 111 | if (b) { 112 | lores.remove("§a§1§0§0§0§1"); 113 | lores.remove("§a§1§0§0§0§2"); 114 | lores.remove("§a§1§0§0§0§3"); 115 | lores.remove("§a§1§0§0§0§4"); 116 | lores.add("§a§1§0§0§0§" + k); 117 | itemMeta.setLore(lores); 118 | itemStack.setItemMeta(itemMeta); 119 | int el = itemStack.getEnchantmentLevel(Enchantment.PROTECTION_ENVIRONMENTAL) - ol; 120 | itemStack.removeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL); 121 | int nl = el + k; 122 | if (nl > 0) { 123 | itemStack.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, nl); 124 | } 125 | } else { 126 | lores.remove("§a§1§0§0§0§1"); 127 | lores.remove("§a§1§0§0§0§2"); 128 | lores.remove("§a§1§0§0§0§3"); 129 | lores.remove("§a§1§0§0§0§4"); 130 | itemMeta.setLore(lores); 131 | itemStack.setItemMeta(itemMeta); 132 | int el = itemStack.getEnchantmentLevel(Enchantment.PROTECTION_ENVIRONMENTAL) - k; 133 | itemStack.removeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL); 134 | if (el > 0) { 135 | itemStack.addUnsafeEnchantment(Enchantment.PROTECTION_ENVIRONMENTAL, el); 136 | } 137 | } 138 | if (j >= 0) { 139 | player.getInventory().setItem(j, itemStack); 140 | } else if (j == -1) { 141 | player.getInventory().setHelmet(itemStack); 142 | } else if (j == -2) { 143 | player.getInventory().setChestplate(itemStack); 144 | } else if (j == -3) { 145 | player.getInventory().setLeggings(itemStack); 146 | } else if (j == -4) { 147 | player.getInventory().setBoots(itemStack); 148 | } 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/manager/EditHolographicManager.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.manager; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.entity.Player; 11 | 12 | import io.github.bedwarsrel.BedwarsRel; 13 | import io.github.bedwarsrel.game.Game; 14 | import io.github.bedwarsrel.game.ResourceSpawner; 15 | import io.github.bedwarsrel.game.Team; 16 | import me.ram.bedwarsscoreboardaddon.api.HolographicAPI; 17 | import me.ram.bedwarsscoreboardaddon.config.Config; 18 | 19 | public class EditHolographicManager { 20 | 21 | private Map> holos; 22 | 23 | public EditHolographicManager() { 24 | holos = new HashMap>(); 25 | } 26 | 27 | public void displayGameLocation(Player player, String g) { 28 | if (holos.containsKey(player)) { 29 | remove(player); 30 | } 31 | holos.put(player, new ArrayList()); 32 | List list = holos.get(player); 33 | Game game = BedwarsRel.getInstance().getGameManager().getGame(g); 34 | if (game != null) { 35 | if (game.getLoc1() != null) { 36 | HolographicAPI holo = new HolographicAPI(game.getLoc1().clone().add(0, -1.75, 0), Config.getLanguage("holographic.edit_game.loc1")); 37 | list.add(holo); 38 | holo.display(player); 39 | } 40 | if (game.getLoc2() != null) { 41 | HolographicAPI holo = new HolographicAPI(game.getLoc2().clone().add(0, -1.75, 0), Config.getLanguage("holographic.edit_game.loc2")); 42 | list.add(holo); 43 | holo.display(player); 44 | } 45 | if (game.getLobby() != null) { 46 | HolographicAPI holo = new HolographicAPI(game.getLobby().clone().add(0, -1.75, 0), Config.getLanguage("holographic.edit_game.lobby")); 47 | list.add(holo); 48 | holo.display(player); 49 | } 50 | for (Team team : game.getTeams().values()) { 51 | if (team.getTargetHeadBlock() != null) { 52 | HolographicAPI holo = new HolographicAPI(team.getTargetHeadBlock().clone().add(0.5, -1.5, 0.5), Config.getLanguage("holographic.edit_game.bed").replace("{team}", team.getChatColor() + team.getName())); 53 | list.add(holo); 54 | holo.display(player); 55 | } 56 | if (team.getSpawnLocation() != null) { 57 | HolographicAPI holo = new HolographicAPI(team.getSpawnLocation().clone().add(0, -1.75, 0), Config.getLanguage("holographic.edit_game.spawn").replace("{team}", team.getChatColor() + team.getName())); 58 | list.add(holo); 59 | holo.display(player); 60 | } 61 | } 62 | if (Config.game_team_spawner.containsKey(g)) { 63 | for (Team team : game.getTeams().values()) { 64 | if (Config.game_team_spawner.get(g).containsKey(team.getName())) { 65 | Config.game_team_spawner.get(g).get(team.getName()).forEach(loc -> { 66 | Location location = loc.clone(); 67 | HolographicAPI holo = new HolographicAPI(location.add(0, -1.75, 0), Config.getLanguage("holographic.edit_game.team_spawner").replace("{team}", team.getChatColor() + team.getName())); 68 | list.add(holo); 69 | holo.display(player); 70 | }); 71 | } 72 | } 73 | } 74 | for (ResourceSpawner spawner : game.getResourceSpawners()) { 75 | HolographicAPI holo = new HolographicAPI(spawner.getLocation().clone().add(0, -1.75, 0), Config.getLanguage("holographic.edit_game.spawner").replace("{resource}", spawner.getName())); 76 | list.add(holo); 77 | holo.display(player); 78 | } 79 | } 80 | if (Config.game_shop_item.containsKey(g)) { 81 | for (String loc : Config.game_shop_item.get(g)) { 82 | Location location = toLocation(loc); 83 | if (location != null) { 84 | try { 85 | Config.game_shop_shops.forEach((id, pl) -> { 86 | if (pl.equals(g + ".shop.item - " + loc)) { 87 | HolographicAPI holo = new HolographicAPI(location.clone().add(0, -1.75, 0), Config.getLanguage("holographic.shop.item").replace("{id}", id)); 88 | list.add(holo); 89 | holo.display(player); 90 | } 91 | }); 92 | } catch (Exception e) { 93 | } 94 | } 95 | } 96 | } 97 | if (Config.game_shop_team.containsKey(g)) { 98 | for (String loc : Config.game_shop_team.get(g)) { 99 | Location location = toLocation(loc); 100 | if (location != null) { 101 | try { 102 | Config.game_shop_shops.forEach((id, pl) -> { 103 | if (pl.equals(g + ".shop.team - " + loc)) { 104 | HolographicAPI holo = new HolographicAPI(location.clone().add(0, -1.75, 0), Config.getLanguage("holographic.shop.team").replace("{id}", id)); 105 | list.add(holo); 106 | holo.display(player); 107 | } 108 | }); 109 | } catch (Exception e) { 110 | } 111 | } 112 | } 113 | } 114 | } 115 | 116 | public void remove(Player player) { 117 | if (holos.containsKey(player)) { 118 | holos.get(player).forEach(holo -> { 119 | holo.remove(); 120 | }); 121 | holos.remove(player); 122 | } 123 | } 124 | 125 | public void removeAll() { 126 | holos.keySet().forEach(player -> { 127 | holos.get(player).forEach(holo -> { 128 | holo.remove(); 129 | }); 130 | }); 131 | holos.clear(); 132 | } 133 | 134 | private Location toLocation(String loc) { 135 | try { 136 | String[] ary = loc.split(", "); 137 | if (Bukkit.getWorld(ary[0]) != null) { 138 | Location location = new Location(Bukkit.getWorld(ary[0]), Double.valueOf(ary[1]), Double.valueOf(ary[2]), Double.valueOf(ary[3])); 139 | if (ary.length > 4) { 140 | location.setYaw(Float.valueOf(ary[4])); 141 | location.setPitch(Float.valueOf(ary[5])); 142 | } 143 | return location; 144 | } 145 | } catch (Exception e) { 146 | return null; 147 | } 148 | return null; 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |


🛏
BedwarsScoreBoardAddon

3 | 4 | ## 📌 介绍/What's this? 5 | 6 | 🪐 7 | 8 | 这是一个依赖BedwarsRel运行的插件,它可以拓展你的起床战争,为你的起床战争增添更多乐趣 9 | 10 | This is a plugin running on BedwarsRel. It can expand your BedWars function. Make your BedWars like Hypixel! 11 | 12 | ## ✅ 下载/Donwloads 13 | 14 | > 插件/Plugin: 15 | - 下载地址: https://www.mcbbs.net/thread-814322-1-1.html 16 | - Download: https://www.spigotmc.org/resources/74991/ 17 | 18 | > 前置依赖/Depends: 19 | - [BedwarsRel 1.3.6](https://www.spigotmc.org/resources/6799/) 20 | - [ProtocolLib](https://www.spigotmc.org/resources/1997/) 21 | - [Citizens](https://dev.bukkit.org/bukkit-plugins/citizens) 22 | 23 | > 依赖/Soft Depends: 24 | - [PlaceholderAPI](https://www.spigotmc.org/resources/6245/) 25 | - [ServerJoiner](https://www.spigotmc.org/resources/53694/) 26 | - [BedwarsXP](https://www.mcbbs.net/thread-667617-1-1.html) 27 | - [WorldEdit](https://dev.bukkit.org/projects/worldedit) 28 | 29 | ## 📒 命令/Commands 30 |
31 | 点击查看命令 32 | 33 | | 命令 | 描述 | 权限 | 34 | | --------- | ----- | ------- | 35 | | /bwsba | 显示插件信息 | | | 36 | | /bwsba help | 显示帮助菜单 | | 37 | | /bwsba reload | 重新载入配置文件 | bedwarsscoreboardaddon.reload | 38 | | /bwsba upcheck | 检查版本更新 | bedwarsscoreboardaddon.updatecheck | 39 | | /bwsba edit <游戏> | 编辑游戏 | bedwarsscoreboardaddon.edit | 40 | | /bwsba shop list <游戏> | 已设置商店列表 | bedwarsscoreboardaddon.shop.list | 41 | | /bwsba shop remove | 移除一个商店 | bedwarsscoreboardaddon.shop.remove | 42 | | /bwsba shop set item <游戏> | 设置一个道具商店 | bedwarsscoreboardaddon.shop.set | 43 | | /bwsba shop set team <游戏> | 设置一个队伍商店 | bedwarsscoreboardaddon.shop.set | 44 | | /bwsba spawner list <游戏> | 队伍资源点列表 | bedwarsscoreboardaddon.spawner.list | 45 | | /bwsba spawner remove | 移除队伍资源点 | bedwarsscoreboardaddon.remove.list | 46 | | /bwsba spawner add <游戏> <队伍> | 添加队伍资源点 | bedwarsscoreboardaddon.add.list | 47 |
48 |
49 | Click to show the commands 50 | 51 | | Command | Description | Permission | 52 | | --------- | ----- | ------- | 53 | | /bwsba | Plugin info | | | 54 | | /bwsba help | Get help | | 55 | | /bwsba reload | Reload configuration | bedwarsscoreboardaddon.reload | 56 | | /bwsba upcheck | Update check | bedwarsscoreboardaddon.updatecheck | 57 | | /bwsba edit | Edit game | bedwarsscoreboardaddon.edit | 58 | | /bwsba shop list | Shop list | bedwarsscoreboardaddon.shop.list | 59 | | /bwsba shop remove | Remove a shop | bedwarsscoreboardaddon.shop.remove | 60 | | /bwsba shop set item | Add a item shop | bedwarsscoreboardaddon.shop.set | 61 | | /bwsba shop set team | Add a team shop | bedwarsscoreboardaddon.shop.set | 62 | | /bwsba spawner list | Team spawner list | bedwarsscoreboardaddon.spawner.list | 63 | | /bwsba spawner remove | Remove a team spawner | bedwarsscoreboardaddon.remove.list | 64 | | /bwsba spawner add | Add a team spawner | bedwarsscoreboardaddon.add.list | 65 |
66 | 67 | ## ⚙ 安装与设置/Install & Settings 68 | ### > 安装/Install 69 | 70 | ```ini 71 | 1.确保服务器安装了前置插件BedwarsRel 1.3.6, ProtocolLib, Citizens 72 | 73 | 3.将下载的插件(Jar文件)放入服务器目录下的 "plugins" 文件夹内 74 | 75 | 5.重启(启动)服务器 76 | ``` 77 | 78 | ```ini 79 | 1.Confirm your server is running BedwarsRel 1.3.6, ProtocolLib, Citizens 80 | 81 | 3.Put the downloaded plugin (Jar file) into the "plugins" folder under the server root directory 82 | 83 | 5.Restart(Start) server 84 | ``` 85 | 86 | ### > 切换语言/Change Language 87 | 88 | ```ini 89 | 1.打开目录 "plugins\BedwarsScoreBoardAddon\locale\" 90 | 1.Open folder "plugins\BedwarsScoreBoardAddon\locale\" 91 | ``` 92 | 93 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/locale.png) 94 | 95 | ```ini 96 | 2.找到要切换的语言并进入目录 97 | 2.Find the language you want to change, and enter this folder 98 | ``` 99 | 100 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/language.png) 101 | 102 | ```ini 103 | 3.将目录下的所有文件复制,替换掉 "plugins\BedwarsScoreBoardAddon\" 目录下的原文件 104 | 3.Copy all files in this folder, replace the original file in the "plugins\BedwarsScoreBoardAddon\" folder 105 | ``` 106 | 107 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/replace_language.png) 108 | 109 | ```ini 110 | 4.执行指令 "/bwsba reload" 重载配置文件 111 | 4.Use command "/bwsba reload" to reload configuration 112 | ``` 113 | 114 | ### > 添加商店/Add Shop 115 | 116 | ```ini 117 | 1.执行命令 "/bwsba edit <游戏>" 进入游戏编辑模式,点击 "设置游戏/队伍商店" 118 | 1.Use command "/bwsba edit " to enter game edit mode,Click "Set item/team shop" 119 | ``` 120 | 121 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/set_shop.png) 122 | 123 | ```ini 124 | 2.执行命令 "/bw join <游戏>" 进行测试 125 | 2.Use command "/bw join " to test 126 | ``` 127 | 128 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/shop.png) 129 | 130 | ### > 添加钻石资源/Add Diamond Resources 131 | 132 | ```ini 133 | 1.编辑文件 "plugins/BedwarsRel/config.yml",在 "resource" 中添加: 134 | 1.Edit file ""plugins/BedwarsRel/config.yml", Find "resource", add: 135 | 136 | diamond: 137 | item: 138 | - type: DIAMOND 139 | meta: 140 | ==: ItemMeta 141 | meta-type: UNSPECIFIC 142 | display-name: "§bDiamond" 143 | spawn-interval: 30000 144 | spread: 0.0 145 | 146 | ``` 147 | 148 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/edit_bwr_config.png) 149 | 150 | ```ini 151 | 2.执行命令 "/bwsba edit <游戏>" 进入游戏编辑模式,点击 "设置资源生成点-游戏资源生成点-钻石" 152 | 3.Use command "/bwsba edit " to enter game edit mode,Click "Set resource spawner-Game resource spawner-Diamond" 153 | ``` 154 | 155 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/add_diamond.png) 156 | 157 | ```ini 158 | 2.执行命令 "/bw join <游戏>" 进行测试 159 | 2.Use command "/bw join " to test 160 | ``` 161 | 162 | ![](https://raw.githubusercontent.com/TheRamU/BedwarsScoreBoardAddon/master/images/diamond_generator.png) 163 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/Rejoin.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.UUID; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.GameMode; 10 | import org.bukkit.Material; 11 | import org.bukkit.entity.Player; 12 | import org.bukkit.inventory.ItemStack; 13 | import org.bukkit.scheduler.BukkitRunnable; 14 | import org.bukkit.util.Vector; 15 | import io.github.bedwarsrel.BedwarsRel; 16 | import io.github.bedwarsrel.game.Game; 17 | import io.github.bedwarsrel.game.GameState; 18 | import io.github.bedwarsrel.game.PlayerSettings; 19 | import io.github.bedwarsrel.game.Team; 20 | import lombok.Getter; 21 | import me.ram.bedwarsscoreboardaddon.Main; 22 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 23 | import me.ram.bedwarsscoreboardaddon.config.Config; 24 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonPlayerAddRejoinEvent; 25 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonPlayerRejoinEvent; 26 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonPlayerRejoinedEvent; 27 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonPlayerRemoveRejoinEvent; 28 | import me.ram.bedwarsscoreboardaddon.utils.Utils; 29 | 30 | public class Rejoin { 31 | 32 | @Getter 33 | private Game game; 34 | @Getter 35 | private Arena arena; 36 | private Map players; 37 | private Map> teams; 38 | 39 | public Rejoin(Arena arena) { 40 | this.arena = arena; 41 | this.game = arena.getGame(); 42 | players = new HashMap(); 43 | teams = new HashMap>(); 44 | } 45 | 46 | public void addPlayer(Player player) { 47 | Team team = game.getPlayerTeam(player); 48 | if (team == null) { 49 | return; 50 | } 51 | BoardAddonPlayerAddRejoinEvent event = new BoardAddonPlayerAddRejoinEvent(game, player, this); 52 | Bukkit.getPluginManager().callEvent(event); 53 | if (!event.isCancelled()) { 54 | players.put(player.getName(), new RejoinData(player, game, this)); 55 | List list = teams.getOrDefault(team.getName(), new ArrayList<>()); 56 | list.add(player.getName()); 57 | teams.put(team.getName(), list); 58 | } 59 | } 60 | 61 | public void removeTeam(String team) { 62 | if (teams.containsKey(team)) { 63 | for (String player : teams.get(team)) { 64 | removePlayer(player); 65 | } 66 | teams.remove(team); 67 | } 68 | } 69 | 70 | public void removePlayer(String player) { 71 | if (players.containsKey(player)) { 72 | players.remove(player); 73 | Bukkit.getPluginManager().callEvent(new BoardAddonPlayerRemoveRejoinEvent(game, player, this)); 74 | } 75 | } 76 | 77 | public Map getPlayers() { 78 | return players; 79 | } 80 | 81 | public void rejoin(Player player) { 82 | if (players.containsKey(player.getName())) { 83 | BoardAddonPlayerRejoinEvent event = new BoardAddonPlayerRejoinEvent(game, player, this); 84 | Bukkit.getPluginManager().callEvent(event); 85 | if (!event.isCancelled()) { 86 | players.get(player.getName()).rejoin(); 87 | } 88 | } 89 | } 90 | 91 | public static class RejoinData { 92 | private UUID uuid; 93 | private Game game; 94 | private Rejoin rejoin; 95 | private String teamname; 96 | private PlayerSettings playersettings; 97 | private List armors; 98 | 99 | public RejoinData(Player player, Game game, Rejoin rejoin) { 100 | Team team = game.getPlayerTeam(player); 101 | if (team == null) { 102 | return; 103 | } 104 | teamname = team.getName(); 105 | uuid = player.getUniqueId(); 106 | this.game = game; 107 | this.rejoin = rejoin; 108 | playersettings = game.getPlayerSettings(player); 109 | armors = new ArrayList(); 110 | if (Config.giveitem_keeparmor) { 111 | if (player.getInventory().getHelmet() != null) { 112 | armors.add(player.getInventory().getHelmet()); 113 | } else { 114 | armors.add(new ItemStack(Material.AIR)); 115 | } 116 | if (player.getInventory().getChestplate() != null) { 117 | armors.add(player.getInventory().getChestplate()); 118 | } else { 119 | armors.add(new ItemStack(Material.AIR)); 120 | } 121 | if (player.getInventory().getLeggings() != null) { 122 | armors.add(player.getInventory().getLeggings()); 123 | } else { 124 | armors.add(new ItemStack(Material.AIR)); 125 | } 126 | if (player.getInventory().getBoots() != null) { 127 | armors.add(player.getInventory().getBoots()); 128 | } else { 129 | armors.add(new ItemStack(Material.AIR)); 130 | } 131 | } 132 | } 133 | 134 | public void rejoin() { 135 | if (teamname == null) { 136 | return; 137 | } 138 | Player player = Bukkit.getPlayer(uuid); 139 | if (player == null || !player.isOnline()) { 140 | return; 141 | } 142 | BedwarsRel.getInstance().getGameManager().addGamePlayer(player, game); 143 | if (!game.getPlayers().contains(player)) { 144 | game.getPlayers().add(player); 145 | } 146 | game.getFreePlayers().remove(player); 147 | game.getPlayerSettings().put(player, playersettings); 148 | Team team = game.getTeam(teamname); 149 | if (team == null) { 150 | return; 151 | } 152 | team.addPlayer(player); 153 | player.setVelocity(new Vector(0, 0, 0)); 154 | player.setGameMode(GameMode.SPECTATOR); 155 | for (Player p : game.getPlayers()) { 156 | p.sendMessage(Config.rejoin_message_rejoin.replace("{player}", player.getName())); 157 | } 158 | Utils.clearTitle(player); 159 | new BukkitRunnable() { 160 | @Override 161 | public void run() { 162 | if (player.isOnline() && game.getState() == GameState.RUNNING && game.getPlayers().contains(player)) { 163 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 164 | player.getInventory().clear(); 165 | player.getInventory().setHelmet(new ItemStack(Material.AIR)); 166 | player.getInventory().setChestplate(new ItemStack(Material.AIR)); 167 | player.getInventory().setLeggings(new ItemStack(Material.AIR)); 168 | player.getInventory().setBoots(new ItemStack(Material.AIR)); 169 | GiveItem.giveItem(player, team, true); 170 | if (Config.compass_enabled) { 171 | Compass.giveCompass(player); 172 | } 173 | if (Config.giveitem_keeparmor && armors.size() > 0) { 174 | player.getInventory().setHelmet(armors.get(0)); 175 | player.getInventory().setChestplate(armors.get(1)); 176 | player.getInventory().setLeggings(armors.get(2)); 177 | player.getInventory().setBoots(armors.get(3)); 178 | } 179 | Arena arena = Main.getInstance().getArenaManager().getArenas().get(game.getName()); 180 | player.setMaxHealth(arena.getHealthLevel().getNowHealth()); 181 | player.setHealth(player.getMaxHealth()); 182 | if (Config.respawn_enabled) { 183 | Respawn respawn = arena.getRespawn(); 184 | respawn.onRespawn(player, true); 185 | } else { 186 | player.setVelocity(new Vector(0, 0, 0)); 187 | player.teleport(team.getSpawnLocation()); 188 | } 189 | } 190 | } 191 | } 192 | }.runTaskLater(Main.getInstance(), 16L); 193 | Bukkit.getPluginManager().callEvent(new BoardAddonPlayerRejoinedEvent(game, player, rejoin)); 194 | } 195 | } 196 | } 197 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/commands/BedwarsRelCommandTabCompleter.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.commands; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Arrays; 5 | import java.util.List; 6 | import org.bukkit.Material; 7 | import org.bukkit.command.Command; 8 | import org.bukkit.command.CommandSender; 9 | import org.bukkit.command.TabCompleter; 10 | import io.github.bedwarsrel.BedwarsRel; 11 | import io.github.bedwarsrel.game.Game; 12 | import io.github.bedwarsrel.game.Team; 13 | import io.github.bedwarsrel.game.TeamColor; 14 | 15 | public class BedwarsRelCommandTabCompleter implements TabCompleter { 16 | 17 | @Override 18 | public List onTabComplete(CommandSender sender, Command cmd, String label, String[] args) { 19 | List suggest = getSuggest(sender, args); 20 | String last = args[args.length - 1]; 21 | if (suggest != null && !last.equals("")) { 22 | List list = new ArrayList(); 23 | suggest.forEach(s -> { 24 | if (s.startsWith(last)) { 25 | list.add(s); 26 | } 27 | }); 28 | return list; 29 | } 30 | return suggest; 31 | } 32 | 33 | private List getSuggest(CommandSender sender, String[] args) { 34 | if (args.length == 1) { 35 | return Arrays.asList("help", "setspawner", "addgame", "start", "stop", "addteam", "save", "setregion", "join", "setspawn", "setlobby", "settarget", "setbed", "leave", "reload", "setmainlobby", "list", "regionname", "removeteam", "removegame", "clearspawner", "gametime", "stats", "setminplayers", "setgameblock", "setbuilder", "setautobalance", "kick", "addteamjoin", "addholo", "removeholo", "debugpaste", "itemspaste"); 36 | } 37 | List games = new ArrayList(); 38 | BedwarsRel.getInstance().getGameManager().getGames().forEach(game -> { 39 | games.add(game.getName()); 40 | }); 41 | if (args.length == 2) { 42 | if (args[0].equalsIgnoreCase("setspawner")) { 43 | if (sender.hasPermission("bw.setup")) { 44 | return games; 45 | } 46 | } else if (args[0].equalsIgnoreCase("start")) { 47 | if (sender.hasPermission("bw.setup")) { 48 | return games; 49 | } 50 | } else if (args[0].equalsIgnoreCase("addteam")) { 51 | if (sender.hasPermission("bw.setup")) { 52 | return games; 53 | } 54 | } else if (args[0].equalsIgnoreCase("save")) { 55 | if (sender.hasPermission("bw.setup")) { 56 | return games; 57 | } 58 | } else if (args[0].equalsIgnoreCase("setregion")) { 59 | if (sender.hasPermission("bw.setup")) { 60 | return games; 61 | } 62 | } else if (args[0].equalsIgnoreCase("join")) { 63 | return games; 64 | } else if (args[0].equalsIgnoreCase("setspawn")) { 65 | if (sender.hasPermission("bw.setup")) { 66 | return games; 67 | } 68 | } else if (args[0].equalsIgnoreCase("setlobby")) { 69 | if (sender.hasPermission("bw.setup")) { 70 | return games; 71 | } 72 | } else if (args[0].equalsIgnoreCase("settarget")) { 73 | if (sender.hasPermission("bw.setup")) { 74 | return games; 75 | } 76 | } else if (args[0].equalsIgnoreCase("setbed")) { 77 | if (sender.hasPermission("bw.setup")) { 78 | return games; 79 | } 80 | } else if (args[0].equalsIgnoreCase("setmainlobby")) { 81 | if (sender.hasPermission("bw.setup")) { 82 | return games; 83 | } 84 | } else if (args[0].equalsIgnoreCase("regionname")) { 85 | if (sender.hasPermission("bw.setup")) { 86 | return games; 87 | } 88 | } else if (args[0].equalsIgnoreCase("removeteam")) { 89 | if (sender.hasPermission("bw.setup")) { 90 | return games; 91 | } 92 | } else if (args[0].equalsIgnoreCase("removegame")) { 93 | if (sender.hasPermission("bw.setup")) { 94 | return games; 95 | } 96 | } else if (args[0].equalsIgnoreCase("clearspawner")) { 97 | if (sender.hasPermission("bw.setup")) { 98 | return games; 99 | } 100 | } else if (args[0].equalsIgnoreCase("gametime")) { 101 | if (sender.hasPermission("bw.setup")) { 102 | return games; 103 | } 104 | } else if (args[0].equalsIgnoreCase("stats")) { 105 | if (sender.hasPermission("bw.base")) { 106 | return null; 107 | } 108 | } else if (args[0].equalsIgnoreCase("stop")) { 109 | if (sender.hasPermission("bw.base")) { 110 | return games; 111 | } 112 | } else if (args[0].equalsIgnoreCase("setminplayers")) { 113 | if (sender.hasPermission("bw.setup")) { 114 | return games; 115 | } 116 | } else if (args[0].equalsIgnoreCase("setgameblock")) { 117 | if (sender.hasPermission("bw.setup")) { 118 | return games; 119 | } 120 | } else if (args[0].equalsIgnoreCase("setbuilder")) { 121 | if (sender.hasPermission("bw.setup")) { 122 | return games; 123 | } 124 | } else if (args[0].equalsIgnoreCase("setautobalance")) { 125 | if (sender.hasPermission("bw.setup")) { 126 | return games; 127 | } 128 | } else if (args[0].equalsIgnoreCase("kick")) { 129 | if (sender.hasPermission("bw.kick")) { 130 | return null; 131 | } 132 | } else if (args[0].equalsIgnoreCase("addteamjoin")) { 133 | if (sender.hasPermission("bw.setup")) { 134 | return games; 135 | } 136 | } 137 | } 138 | if (args.length == 3) { 139 | Game game = BedwarsRel.getInstance().getGameManager().getGame(args[1]); 140 | List teams = new ArrayList(); 141 | if (game != null) { 142 | for (Team team : game.getTeams().values()) { 143 | teams.add(team.getName()); 144 | } 145 | } 146 | if (args[0].equalsIgnoreCase("setspawner")) { 147 | if (sender.hasPermission("bw.setup")) { 148 | List list = new ArrayList(BedwarsRel.getInstance().getConfig().getConfigurationSection("resource").getKeys(false)); 149 | return list; 150 | } 151 | } else if (args[0].equalsIgnoreCase("setregion")) { 152 | if (sender.hasPermission("bw.setup")) { 153 | return Arrays.asList("loc1", "loc2"); 154 | } 155 | } else if (args[0].equalsIgnoreCase("setspawn")) { 156 | if (sender.hasPermission("bw.setup")) { 157 | return teams; 158 | } 159 | } else if (args[0].equalsIgnoreCase("settarget")) { 160 | if (sender.hasPermission("bw.setup")) { 161 | return teams; 162 | } 163 | } else if (args[0].equalsIgnoreCase("setbed")) { 164 | if (sender.hasPermission("bw.setup")) { 165 | return teams; 166 | } 167 | } else if (args[0].equalsIgnoreCase("removeteam")) { 168 | if (sender.hasPermission("bw.setup")) { 169 | return teams; 170 | } 171 | } else if (args[0].equalsIgnoreCase("setgameblock")) { 172 | if (sender.hasPermission("bw.setup")) { 173 | List list = new ArrayList(); 174 | for (Material type : Material.values()) { 175 | list.add(type.name()); 176 | } 177 | return list; 178 | } 179 | } else if (args[0].equalsIgnoreCase("setbuilder")) { 180 | if (sender.hasPermission("bw.setup")) { 181 | return null; 182 | } 183 | } else if (args[0].equalsIgnoreCase("addteamjoin")) { 184 | if (sender.hasPermission("bw.setup")) { 185 | return teams; 186 | } 187 | } 188 | } 189 | if (args.length == 4) { 190 | if (args[0].equalsIgnoreCase("addteam")) { 191 | if (sender.hasPermission("bw.setup")) { 192 | List list = new ArrayList(); 193 | for (TeamColor teamColor : TeamColor.values()) { 194 | list.add(teamColor.name()); 195 | } 196 | return list; 197 | } 198 | } 199 | } 200 | return new ArrayList(); 201 | } 202 | } 203 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/ResourceUpgrade.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.HashMap; 4 | import java.util.List; 5 | import java.util.Map; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.Location; 8 | import org.bukkit.Material; 9 | import org.bukkit.block.Block; 10 | import org.bukkit.block.Chest; 11 | import org.bukkit.configuration.ConfigurationSection; 12 | import org.bukkit.configuration.file.FileConfiguration; 13 | import org.bukkit.entity.Entity; 14 | import org.bukkit.entity.Item; 15 | import org.bukkit.entity.Player; 16 | import org.bukkit.inventory.ItemStack; 17 | import org.bukkit.scheduler.BukkitRunnable; 18 | import org.bukkit.util.Vector; 19 | 20 | import io.github.bedwarsrel.BedwarsRel; 21 | import io.github.bedwarsrel.events.BedwarsResourceSpawnEvent; 22 | import io.github.bedwarsrel.game.Game; 23 | import io.github.bedwarsrel.game.ResourceSpawner; 24 | import lombok.Getter; 25 | import me.ram.bedwarsscoreboardaddon.Main; 26 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 27 | import me.ram.bedwarsscoreboardaddon.config.Config; 28 | import me.ram.bedwarsscoreboardaddon.events.BoardAddonResourceUpgradeEvent; 29 | import me.ram.bedwarsscoreboardaddon.utils.ColorUtil; 30 | 31 | public class ResourceUpgrade { 32 | 33 | @Getter 34 | private Game game; 35 | @Getter 36 | private Arena arena; 37 | private Map interval; 38 | private Map spawn_time; 39 | private Map upg_time; 40 | private Map levels; 41 | 42 | public Map getUpgTime() { 43 | return upg_time; 44 | } 45 | 46 | public Map getSpawnTime() { 47 | return spawn_time; 48 | } 49 | 50 | public Map getLevel() { 51 | return levels; 52 | } 53 | 54 | public ResourceUpgrade(Arena arena) { 55 | this.arena = arena; 56 | this.game = arena.getGame(); 57 | interval = new HashMap(); 58 | spawn_time = new HashMap(); 59 | upg_time = new HashMap(); 60 | levels = new HashMap(); 61 | for (ResourceSpawner spawner : game.getResourceSpawners()) { 62 | for (ItemStack itemStack : spawner.getResources()) { 63 | levels.put(itemStack.getType(), "I"); 64 | interval.put(itemStack.getType(), (int) (spawner.getInterval() / 50)); 65 | } 66 | Location sloc = spawner.getLocation(); 67 | for (ItemStack itemStack : spawner.getResources()) { 68 | arena.addGameTask(new BukkitRunnable() { 69 | Location loc = new Location(sloc.getWorld(), sloc.getX(), sloc.getY(), sloc.getZ()); 70 | int i = 0; 71 | 72 | @Override 73 | public void run() { 74 | spawn_time.put(itemStack.getType(), ((int) (i / 20) + 1)); 75 | if (i <= 0) { 76 | i = interval.get(itemStack.getType()); 77 | int es = 0; 78 | for (Entity entity : loc.getWorld().getNearbyEntities(loc, 2, 2, 2)) { 79 | if (entity instanceof Item) { 80 | Item item = (Item) entity; 81 | if (item.getItemStack().getType().equals(itemStack.getType())) { 82 | es += item.getItemStack().getAmount(); 83 | } 84 | } 85 | } 86 | boolean drop = true; 87 | if (Config.resourcelimit_enabled) { 88 | for (String[] rl : Config.resourcelimit_limit) { 89 | if (rl[0].equals(itemStack.getType().name()) && es >= Integer.valueOf(rl[1])) { 90 | drop = false; 91 | } 92 | } 93 | } 94 | Block block = loc.getBlock(); 95 | Boolean inchest = block.getType().equals(Material.CHEST) && BedwarsRel.getInstance().getBooleanConfig("spawn-resources-in-chest", true); 96 | if (drop || inchest) { 97 | BedwarsResourceSpawnEvent event = new BedwarsResourceSpawnEvent(game, loc, itemStack.clone()); 98 | Bukkit.getPluginManager().callEvent(event); 99 | if (!event.isCancelled()) { 100 | if (inchest && spawner.canContainItem(((Chest) block.getState()).getInventory(), itemStack)) { 101 | ((Chest) block.getState()).getInventory().addItem(itemStack.clone()); 102 | } else if (drop) { 103 | ConfigurationSection config = Main.getInstance().getConfig().getConfigurationSection("holographic.resource.resources"); 104 | String res_name = getResourceName(itemStack.getTypeId()); 105 | double i = res_name == null || !config.getBoolean(res_name + ".drop", false) ? 0 : config.getDouble(res_name + ".height", 0.0); 106 | i = i > 0 ? i : 0.325; 107 | Item item = loc.getWorld().dropItem(loc.clone().add(0, i, 0), itemStack); 108 | item.setPickupDelay(0); 109 | Vector vector = item.getVelocity(); 110 | vector.multiply(spawner.getSpread()); 111 | vector.setY(0); 112 | item.setVelocity(vector); 113 | } 114 | } 115 | } 116 | } 117 | i--; 118 | } 119 | }.runTaskTimer(Main.getInstance(), 0L, 1L)); 120 | } 121 | } 122 | for (String rs : Main.getInstance().getConfig().getConfigurationSection("resourceupgrade").getKeys(false)) { 123 | arena.addGameTask(new BukkitRunnable() { 124 | int gametime = Main.getInstance().getConfig().getInt("resourceupgrade." + rs + ".gametime"); 125 | List upgrade = Main.getInstance().getConfig().getStringList("resourceupgrade." + rs + ".upgrade"); 126 | String message = Main.getInstance().getConfig().getString("resourceupgrade." + rs + ".message"); 127 | Boolean isExecuted = false; 128 | 129 | @Override 130 | public void run() { 131 | if (isExecuted) { 132 | cancel(); 133 | return; 134 | } 135 | int remtime = game.getTimeLeft() - gametime; 136 | String formatremtime = remtime / 60 + ":" + ((remtime % 60 < 10) ? ("0" + remtime % 60) : (remtime % 60)); 137 | upg_time.put(rs, formatremtime); 138 | if (game.getTimeLeft() <= gametime) { 139 | isExecuted = true; 140 | BoardAddonResourceUpgradeEvent resourceUpgradeEvent = new BoardAddonResourceUpgradeEvent(game, upgrade); 141 | Bukkit.getPluginManager().callEvent(resourceUpgradeEvent); 142 | if (resourceUpgradeEvent.isCancelled()) { 143 | cancel(); 144 | return; 145 | } 146 | for (String upg : resourceUpgradeEvent.getUpgrade()) { 147 | String[] ary = upg.split(","); 148 | if (levels.containsKey(Material.valueOf(ary[0]))) { 149 | levels.put(Material.valueOf(ary[0]), getLevel(levels.get(Material.valueOf(ary[0])))); 150 | interval.put(Material.valueOf(ary[0]), Integer.valueOf(ary[1])); 151 | } 152 | } 153 | for (Player player : game.getPlayers()) { 154 | player.sendMessage(ColorUtil.color(message)); 155 | } 156 | PlaySound.playSound(game, Config.play_sound_sound_upgrade); 157 | cancel(); 158 | } 159 | } 160 | }.runTaskTimer(Main.getInstance(), 0L, 21L)); 161 | } 162 | } 163 | 164 | private String getResourceName(int id) { 165 | FileConfiguration config = Main.getInstance().getConfig(); 166 | for (String r : Config.holographic_resource) { 167 | if (id == config.getInt("holographic.resource.resources." + r + ".item", 0)) { 168 | return r; 169 | } 170 | } 171 | return null; 172 | } 173 | 174 | private String getLevel(String level) { 175 | switch (level) { 176 | case "I": 177 | return "II"; 178 | case "II": 179 | return "III"; 180 | case "III": 181 | return "IV"; 182 | case "IV": 183 | return "V"; 184 | case "V": 185 | return "VI"; 186 | case "VI": 187 | return "VII"; 188 | case "VII": 189 | return "VIII"; 190 | case "VIII": 191 | return "IX"; 192 | case "IX": 193 | return "X"; 194 | case "X": 195 | return "X"; 196 | default: 197 | return "I"; 198 | } 199 | } 200 | } 201 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/utils/Utils.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.utils; 2 | 3 | import java.lang.reflect.Constructor; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.entity.Player; 6 | import io.github.bedwarsrel.BedwarsRel; 7 | 8 | public class Utils { 9 | 10 | public static void sendMessage(Player player, Player placeholderPlayer, String text) { 11 | player.sendMessage(PlaceholderAPIUtil.setPlaceholders(placeholderPlayer, text)); 12 | } 13 | 14 | public static void sendPlayerActionbar(Player player, String text) { 15 | text = PlaceholderAPIUtil.setPlaceholders(player, text); 16 | try { 17 | Class.forName("io.github.bedwarsrel.com." + BedwarsRel.getInstance().getCurrentVersion().toLowerCase() + ".ActionBar").getDeclaredMethod("sendActionBar", Player.class, String.class).invoke(null, player, text); 18 | } catch (Exception e) { 19 | } 20 | } 21 | 22 | public static void sendFullTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) { 23 | sendTitle(player, fadeIn, stay, fadeOut, title, subtitle); 24 | } 25 | 26 | public static void sendPacket(Player player, Object packet) { 27 | try { 28 | Object handle = player.getClass().getMethod("getHandle", (Class[]) new Class[0]).invoke(player, new Object[0]); 29 | Object playerConnection = handle.getClass().getField("playerConnection").get(handle); 30 | playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet); 31 | } catch (Exception e) { 32 | e.printStackTrace(); 33 | } 34 | } 35 | 36 | public static Class getNMSClass(String name) { 37 | String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; 38 | try { 39 | return Class.forName("net.minecraft.server." + version + "." + name); 40 | } catch (Exception e) { 41 | e.printStackTrace(); 42 | return null; 43 | } 44 | } 45 | 46 | public static Class getClass(String name) { 47 | String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; 48 | try { 49 | return Class.forName("org.bukkit.craftbukkit." + version + "." + name); 50 | } catch (Exception e) { 51 | e.printStackTrace(); 52 | return null; 53 | } 54 | } 55 | 56 | public static void sendTitle(Player player, Player PlaceholderPlayer, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) { 57 | try { 58 | if (title != null) { 59 | title = PlaceholderAPIUtil.setPlaceholders(PlaceholderPlayer, title); 60 | Object e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null); 61 | Object chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}"); 62 | Constructor subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); 63 | Object titlePacket = subtitleConstructor.newInstance(e, chatTitle, fadeIn, stay, fadeOut); 64 | sendPacket(player, titlePacket); 65 | e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null); 66 | chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}"); 67 | subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")); 68 | titlePacket = subtitleConstructor.newInstance(e, chatTitle); 69 | sendPacket(player, titlePacket); 70 | } 71 | if (subtitle != null) { 72 | subtitle = PlaceholderAPIUtil.setPlaceholders(PlaceholderPlayer, subtitle); 73 | Object e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null); 74 | Object chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}"); 75 | Constructor subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); 76 | Object subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeIn, stay, fadeOut); 77 | sendPacket(player, subtitlePacket); 78 | e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null); 79 | chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + subtitle + "\"}"); 80 | subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); 81 | subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeIn, stay, fadeOut); 82 | sendPacket(player, subtitlePacket); 83 | } 84 | } catch (Exception e) { 85 | e.printStackTrace(); 86 | } 87 | } 88 | 89 | public static void sendTitle(Player player, Integer fadeIn, Integer stay, Integer fadeOut, String title, String subtitle) { 90 | try { 91 | if (title != null) { 92 | Object e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null); 93 | Object chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}"); 94 | Constructor subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); 95 | Object titlePacket = subtitleConstructor.newInstance(e, chatTitle, fadeIn, stay, fadeOut); 96 | sendPacket(player, titlePacket); 97 | e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TITLE").get(null); 98 | chatTitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}"); 99 | subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent")); 100 | titlePacket = subtitleConstructor.newInstance(e, chatTitle); 101 | sendPacket(player, titlePacket); 102 | } 103 | if (subtitle != null) { 104 | Object e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("TIMES").get(null); 105 | Object chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + title + "\"}"); 106 | Constructor subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); 107 | Object subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeIn, stay, fadeOut); 108 | sendPacket(player, subtitlePacket); 109 | e = getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0].getField("SUBTITLE").get(null); 110 | chatSubtitle = getNMSClass("IChatBaseComponent").getDeclaredClasses()[0].getMethod("a", String.class).invoke(null, "{\"text\":\"" + subtitle + "\"}"); 111 | subtitleConstructor = getNMSClass("PacketPlayOutTitle").getConstructor(getNMSClass("PacketPlayOutTitle").getDeclaredClasses()[0], getNMSClass("IChatBaseComponent"), Integer.TYPE, Integer.TYPE, Integer.TYPE); 112 | subtitlePacket = subtitleConstructor.newInstance(e, chatSubtitle, fadeIn, stay, fadeOut); 113 | sendPacket(player, subtitlePacket); 114 | } 115 | } catch (Exception e) { 116 | e.printStackTrace(); 117 | } 118 | } 119 | 120 | public static void clearTitle(Player player) { 121 | sendTitle(player, 0, 0, 0, "", ""); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/addon/Graffiti.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.addon; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.Random; 8 | 9 | import org.bukkit.Bukkit; 10 | import org.bukkit.Color; 11 | import org.bukkit.GameMode; 12 | import org.bukkit.Location; 13 | import org.bukkit.Material; 14 | import org.bukkit.Rotation; 15 | import org.bukkit.entity.Entity; 16 | import org.bukkit.entity.Hanging; 17 | import org.bukkit.entity.ItemFrame; 18 | import org.bukkit.entity.Player; 19 | import org.bukkit.event.hanging.HangingBreakByEntityEvent; 20 | import org.bukkit.event.hanging.HangingBreakEvent; 21 | import org.bukkit.event.player.PlayerInteractEntityEvent; 22 | import org.bukkit.inventory.ItemStack; 23 | import org.bukkit.map.MapView; 24 | import org.bukkit.scheduler.BukkitRunnable; 25 | 26 | import com.comphenix.protocol.PacketType; 27 | import com.comphenix.protocol.ProtocolLibrary; 28 | import com.comphenix.protocol.ProtocolManager; 29 | import com.comphenix.protocol.events.PacketContainer; 30 | import com.comphenix.protocol.wrappers.EnumWrappers.Particle; 31 | 32 | import io.github.bedwarsrel.game.Game; 33 | import lombok.Getter; 34 | import me.ram.bedwarsscoreboardaddon.Main; 35 | import me.ram.bedwarsscoreboardaddon.api.HolographicAPI; 36 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 37 | import me.ram.bedwarsscoreboardaddon.config.Config; 38 | import me.ram.bedwarsscoreboardaddon.utils.BedwarsUtil; 39 | 40 | public class Graffiti { 41 | 42 | @Getter 43 | private Game game; 44 | @Getter 45 | private Arena arena; 46 | private Map holographics; 47 | private List itemFrames; 48 | 49 | public Graffiti(Arena arena) { 50 | this.arena = arena; 51 | this.game = arena.getGame(); 52 | itemFrames = new ArrayList(); 53 | holographics = new HashMap(); 54 | if (Config.graffiti_enabled) { 55 | Location loc1 = game.getLoc1(); 56 | Location loc2 = game.getLoc2(); 57 | Location centre = loc1.clone().add(loc2).multiply(0.5); 58 | int x = Math.abs(loc1.getBlockX() - loc2.getBlockX()); 59 | int y = Math.abs(loc1.getBlockY() - loc2.getBlockY()); 60 | int z = Math.abs(loc1.getBlockZ() - loc2.getBlockZ()); 61 | arena.addGameTask(new BukkitRunnable() { 62 | 63 | @Override 64 | public void run() { 65 | for (Entity entity : centre.getWorld().getNearbyEntities(centre, x, y, z)) { 66 | if (entity instanceof ItemFrame && !entity.isDead()) { 67 | ItemFrame frame = (ItemFrame) entity; 68 | frame.setItem(new ItemStack(Material.AIR)); 69 | frame.setRotation(Rotation.NONE); 70 | if (!Config.graffiti_holographic_enabled) { 71 | continue; 72 | } 73 | Location loc1 = frame.getLocation().getBlock().getLocation(); 74 | Location loc2 = frame.getLocation().getBlock().getRelative(frame.getAttachedFace()).getLocation(); 75 | Location loc = loc1.add(loc2.subtract(loc1).multiply(0.375)).add(0.5, -2.25, 0.5); 76 | HolographicAPI holo = new HolographicAPI(loc, Config.graffiti_holographic_text); 77 | game.getPlayers().forEach(p -> { 78 | holo.display(p); 79 | }); 80 | holographics.put(frame, holo); 81 | } 82 | } 83 | } 84 | }.runTaskAsynchronously(Main.getInstance())); 85 | } 86 | } 87 | 88 | public void reset() { 89 | itemFrames.forEach(itemFrame -> { 90 | if (!itemFrame.isDead()) { 91 | itemFrame.setItem(new ItemStack(Material.AIR)); 92 | itemFrame.setCustomNameVisible(false); 93 | } 94 | }); 95 | holographics.values().forEach(holo -> { 96 | holo.remove(); 97 | }); 98 | } 99 | 100 | public void onPlayerJoin(Player player) { 101 | holographics.values().forEach(holo -> { 102 | if (!holo.isRemoved()) { 103 | holo.display(player); 104 | } 105 | }); 106 | } 107 | 108 | public void onHangingBreak(HangingBreakEvent e) { 109 | if (!Config.graffiti_enabled) { 110 | return; 111 | } 112 | Hanging hanging = e.getEntity(); 113 | if (!(e.getEntity() instanceof ItemFrame)) { 114 | return; 115 | } 116 | if (!game.getRegion().isInRegion(hanging.getLocation())) { 117 | return; 118 | } 119 | e.setCancelled(true); 120 | ItemFrame frame = (ItemFrame) hanging; 121 | if (isDraw(frame)) { 122 | return; 123 | } 124 | if (!(e instanceof HangingBreakByEntityEvent)) { 125 | return; 126 | } 127 | HangingBreakByEntityEvent event = (HangingBreakByEntityEvent) e; 128 | Entity remover = event.getRemover(); 129 | if (!(remover instanceof Player)) { 130 | return; 131 | } 132 | Player player = (Player) remover; 133 | if (!game.isInGame(player) || BedwarsUtil.isSpectator(game, player) || player.getGameMode().equals(GameMode.SPECTATOR)) { 134 | return; 135 | } 136 | drawImage(frame); 137 | } 138 | 139 | public void onInteractEntity(PlayerInteractEntityEvent e) { 140 | if (!Config.graffiti_enabled) { 141 | return; 142 | } 143 | Player player = e.getPlayer(); 144 | if (!game.isInGame(player) || BedwarsUtil.isSpectator(game, player) || player.getGameMode().equals(GameMode.SPECTATOR)) { 145 | return; 146 | } 147 | if (!(e.getRightClicked() instanceof ItemFrame)) { 148 | return; 149 | } 150 | e.setCancelled(true); 151 | ItemFrame frame = (ItemFrame) e.getRightClicked(); 152 | if (!game.getRegion().isInRegion(frame.getLocation())) { 153 | return; 154 | } 155 | if (isDraw(frame)) { 156 | return; 157 | } 158 | drawImage(frame); 159 | } 160 | 161 | private void drawImage(ItemFrame frame) { 162 | frame.setItem(new ItemStack(Material.MAP, 1, getRandomMap().getId())); 163 | itemFrames.add(frame); 164 | if (holographics.containsKey(frame)) { 165 | holographics.get(frame).remove(); 166 | } 167 | Location loc1 = frame.getLocation().getBlock().getLocation(); 168 | Location loc2 = frame.getLocation().getBlock().getRelative(frame.getAttachedFace().getOppositeFace()).getLocation(); 169 | Location loc = loc1.add(loc2.subtract(loc1).multiply(0.5)).add(0.5, 0.5, 0.5); 170 | for (int i = 0; i < 4; i++) { 171 | sendParticles(loc.clone().add(getRandomNumber(), getRandomNumber() * 4, getRandomNumber()), 1f, 0, Color.GRAY, false); 172 | } 173 | sendParticles(loc.clone().add(getRandomNumber(), getRandomNumber() * 4, getRandomNumber()), 1.5f, 1, Color.YELLOW, false); 174 | } 175 | 176 | private MapView getRandomMap() { 177 | if (Config.image_maps.size() > 0) { 178 | Random random = new Random(); 179 | int n = random.nextInt(Config.image_maps.size()); 180 | return Config.image_maps.get(n); 181 | } 182 | MapView map = Bukkit.createMap(game.getRegion().getWorld()); 183 | map.setCenterX(Integer.MAX_VALUE); 184 | map.setCenterZ(Integer.MAX_VALUE); 185 | return map; 186 | } 187 | 188 | private double getRandomNumber() { 189 | return (Math.random() - Math.random()) * 0.125; 190 | } 191 | 192 | private boolean isDraw(ItemFrame frame) { 193 | ItemStack item = frame.getItem(); 194 | return item != null && item.getType().equals(Material.MAP); 195 | } 196 | 197 | private void sendParticles(Location location, float depth, int data, Color color, boolean isLong) { 198 | ProtocolManager man = ProtocolLibrary.getProtocolManager(); 199 | PacketContainer packet = man.createPacket(PacketType.Play.Server.WORLD_PARTICLES); 200 | packet.getParticles().write(0, Particle.SPELL_MOB); 201 | packet.getFloat().write(0, (float) location.getX()); 202 | packet.getFloat().write(1, (float) location.getY()); 203 | packet.getFloat().write(2, (float) location.getZ()); 204 | packet.getFloat().write(3, (float) color.getRed() / 255F); 205 | packet.getFloat().write(4, (float) color.getGreen() / 255F); 206 | packet.getFloat().write(5, (float) color.getBlue() / 255F); 207 | packet.getFloat().write(6, depth); 208 | packet.getIntegers().write(0, data); 209 | packet.getBooleans().write(0, isLong); 210 | game.getPlayers().forEach(p -> { 211 | try { 212 | man.sendServerPacket(p, packet); 213 | } catch (Exception e) { 214 | } 215 | }); 216 | } 217 | } 218 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/listener/GameListener.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.listener; 2 | 3 | import java.util.Map; 4 | 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.Material; 7 | import org.bukkit.entity.Player; 8 | import org.bukkit.event.EventHandler; 9 | import org.bukkit.event.EventPriority; 10 | import org.bukkit.event.Listener; 11 | import org.bukkit.scheduler.BukkitRunnable; 12 | import org.bukkit.scoreboard.Scoreboard; 13 | 14 | import com.comphenix.protocol.PacketType; 15 | import com.comphenix.protocol.ProtocolLibrary; 16 | import com.comphenix.protocol.ProtocolManager; 17 | import com.comphenix.protocol.events.PacketContainer; 18 | 19 | import io.github.bedwarsrel.BedwarsRel; 20 | import io.github.bedwarsrel.events.BedwarsGameEndEvent; 21 | import io.github.bedwarsrel.events.BedwarsGameOverEvent; 22 | import io.github.bedwarsrel.events.BedwarsGameStartedEvent; 23 | import io.github.bedwarsrel.events.BedwarsOpenShopEvent; 24 | import io.github.bedwarsrel.events.BedwarsOpenTeamSelectionEvent; 25 | import io.github.bedwarsrel.events.BedwarsPlayerJoinedEvent; 26 | import io.github.bedwarsrel.events.BedwarsPlayerKilledEvent; 27 | import io.github.bedwarsrel.events.BedwarsPlayerLeaveEvent; 28 | import io.github.bedwarsrel.events.BedwarsTargetBlockDestroyedEvent; 29 | import io.github.bedwarsrel.game.Game; 30 | import io.github.bedwarsrel.game.GameState; 31 | import io.github.bedwarsrel.game.Team; 32 | import me.ram.bedwarsscoreboardaddon.Main; 33 | import me.ram.bedwarsscoreboardaddon.addon.SelectTeam; 34 | import me.ram.bedwarsscoreboardaddon.arena.Arena; 35 | import me.ram.bedwarsscoreboardaddon.config.Config; 36 | import me.ram.bedwarsscoreboardaddon.events.BedwarsTeamDeadEvent; 37 | import me.ram.bedwarsscoreboardaddon.utils.ScoreboardUtil; 38 | 39 | public class GameListener implements Listener { 40 | @EventHandler(priority = EventPriority.LOWEST) 41 | public void onStarted(BedwarsGameStartedEvent e) { 42 | Game game = e.getGame(); 43 | Map scoreboards = ScoreboardUtil.getScoreboards(); 44 | for (Player player : game.getPlayers()) { 45 | if (scoreboards.containsKey(player)) { 46 | ScoreboardUtil.removePlayer(player); 47 | } 48 | } 49 | new Arena(game); 50 | new BukkitRunnable() { 51 | @Override 52 | public void run() { 53 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 54 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).getScoreBoard().updateScoreboard(); 55 | } 56 | } 57 | }.runTaskLater(Main.getInstance(), 2L); 58 | } 59 | 60 | @EventHandler 61 | public void onOver(BedwarsGameOverEvent e) { 62 | Game game = e.getGame(); 63 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 64 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onOver(e); 65 | } 66 | } 67 | 68 | @EventHandler 69 | public void onPlayerJoined(BedwarsPlayerJoinedEvent e) { 70 | Player player = e.getPlayer(); 71 | Game game = e.getGame(); 72 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 73 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onPlayerJoined(player); 74 | } 75 | if (game.getState() == GameState.WAITING) { 76 | for (Arena arena : Main.getInstance().getArenaManager().getArenas().values()) { 77 | arena.getRejoin().removePlayer(player.getName()); 78 | } 79 | } 80 | Main.getInstance().getEditHolographicManager().remove(player); 81 | } 82 | 83 | @EventHandler 84 | public void onPlayerLeave(BedwarsPlayerLeaveEvent e) { 85 | Game game = e.getGame(); 86 | Team team = e.getTeam(); 87 | if (team == null) { 88 | return; 89 | } 90 | Player player = e.getPlayer(); 91 | int players = 0; 92 | for (Player p : team.getPlayers()) { 93 | if (!game.isSpectator(p)) { 94 | players++; 95 | } 96 | } 97 | if (game.getState() == GameState.RUNNING && !game.isSpectator(player) && players <= 1) { 98 | Bukkit.getPluginManager().callEvent(new BedwarsTeamDeadEvent(game, team)); 99 | if (Config.rejoin_enabled) { 100 | destroyBlock(game, team); 101 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 102 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).getRejoin().removeTeam(team.getName()); 103 | } 104 | } 105 | } 106 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 107 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onPlayerLeave(e.getPlayer()); 108 | } 109 | if (player.isOnline()) { 110 | ProtocolManager m = ProtocolLibrary.getProtocolManager(); 111 | try { 112 | PacketContainer packet = m.createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); 113 | packet.getIntegers().write(0, 1); 114 | packet.getStrings().write(0, "bwsba-game-list"); 115 | packet.getStrings().write(1, "bwsba-game-list"); 116 | m.sendServerPacket(player, packet); 117 | } catch (Exception ex) { 118 | ex.printStackTrace(); 119 | } 120 | try { 121 | PacketContainer packet = m.createPacket(PacketType.Play.Server.SCOREBOARD_OBJECTIVE); 122 | packet.getIntegers().write(0, 1); 123 | packet.getStrings().write(0, "bwsba-game-name"); 124 | packet.getStrings().write(1, "bwsba-game-name"); 125 | m.sendServerPacket(player, packet); 126 | } catch (Exception ex) { 127 | ex.printStackTrace(); 128 | } 129 | } 130 | Main.getInstance().getEditHolographicManager().remove(player); 131 | ScoreboardUtil.removePlayer(player); 132 | } 133 | 134 | @EventHandler(priority = EventPriority.HIGHEST) 135 | public void onEnd(BedwarsGameEndEvent e) { 136 | Game game = e.getGame(); 137 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 138 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onEnd(); 139 | } 140 | Main.getInstance().getArenaManager().removeArena(game.getName()); 141 | Bukkit.getScheduler().runTask(Main.getInstance(), () -> { 142 | game.getPlayers().forEach(p -> { 143 | try { 144 | game.playerLeave(p, false); 145 | } catch (Exception ex) { 146 | } 147 | }); 148 | }); 149 | } 150 | 151 | @EventHandler(priority = EventPriority.HIGHEST) 152 | public void onOpenShop(BedwarsOpenShopEvent e) { 153 | Game game = e.getGame(); 154 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 155 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onOpenShop(e); 156 | } 157 | } 158 | 159 | @EventHandler 160 | public void onTargetBlockDestroyed(BedwarsTargetBlockDestroyedEvent e) { 161 | Game game = e.getGame(); 162 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 163 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onTargetBlockDestroyed(e); 164 | new BukkitRunnable() { 165 | @Override 166 | public void run() { 167 | if (Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 168 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).getScoreBoard().updateScoreboard(); 169 | } 170 | } 171 | }.runTaskLater(Main.getInstance(), 1L); 172 | } 173 | } 174 | 175 | @EventHandler 176 | public void onPlayerKilled(BedwarsPlayerKilledEvent e) { 177 | Game game = BedwarsRel.getInstance().getGameManager().getGameOfPlayer(e.getKiller()); 178 | if (game != null && Main.getInstance().getArenaManager().getArenas().containsKey(game.getName())) { 179 | Main.getInstance().getArenaManager().getArenas().get(game.getName()).onPlayerKilled(e); 180 | } 181 | } 182 | 183 | @EventHandler(priority = EventPriority.HIGHEST) 184 | public void onOpenTeamSelection(BedwarsOpenTeamSelectionEvent e) { 185 | if (!Config.select_team_enabled) { 186 | return; 187 | } 188 | e.setCancelled(true); 189 | SelectTeam.openSelectTeam(e.getGame(), (Player) e.getPlayer()); 190 | } 191 | 192 | private void destroyBlock(Game game, Team team) { 193 | Material type = team.getTargetHeadBlock().getBlock().getType(); 194 | if (type.equals(game.getTargetMaterial())) { 195 | if (type.equals(Material.BED_BLOCK)) { 196 | if (BedwarsRel.getInstance().getCurrentVersion().startsWith("v1_8")) { 197 | team.getTargetFeetBlock().getBlock().setType(Material.AIR); 198 | } else { 199 | team.getTargetHeadBlock().getBlock().setType(Material.AIR); 200 | } 201 | } else { 202 | team.getTargetHeadBlock().getBlock().setType(Material.AIR); 203 | } 204 | } 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /src/main/java/me/ram/bedwarsscoreboardaddon/config/LocaleConfig.java: -------------------------------------------------------------------------------- 1 | package me.ram.bedwarsscoreboardaddon.config; 2 | 3 | import java.io.File; 4 | import java.io.FileOutputStream; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.util.HashMap; 8 | import java.util.Locale; 9 | import java.util.Map; 10 | 11 | import org.bukkit.configuration.file.YamlConfiguration; 12 | 13 | import lombok.Getter; 14 | import me.ram.bedwarsscoreboardaddon.Main; 15 | 16 | public class LocaleConfig { 17 | 18 | @Getter 19 | private EnumLocale pluginLocale; 20 | private Map language; 21 | 22 | public LocaleConfig() { 23 | language = new HashMap(); 24 | } 25 | 26 | private void loadLanguage() { 27 | switch (pluginLocale) { 28 | case ZH_CN: 29 | language.put("version", "版本"); 30 | language.put("author", "作者"); 31 | language.put("website", "网站"); 32 | language.put("loading", "§f开始加载插件..."); 33 | language.put("loading_failed", "§c插件加载失败!"); 34 | language.put("bedwarsrel_incompatible", "§c错误: §f暂不兼容该版本 §aBedwarsRel§f!"); 35 | language.put("no_bedwarsrel", "§c错误: §f缺少必要前置 §aBedwarsRel"); 36 | language.put("no_citizens", "§f你必须安装 §cCitizens §f才能启用商店!"); 37 | language.put("no_protocollib", "§c错误: §f缺少必要前置 §aProtocolLib"); 38 | language.put("bedwarsxp", "§c错误: §f暂不支持该版本§aBedwarsXP"); 39 | language.put("config_failed", "§c错误: §f配置文件加载失败!"); 40 | language.put("register_listener", "§f正在注册监听器..."); 41 | language.put("listener_success", "§a监听器注册成功!"); 42 | language.put("listener_failed", "§c错误: §f监听器注册失败!"); 43 | language.put("register_command", "§f正在注册指令..."); 44 | language.put("command_success", "§a指令注册成功!"); 45 | language.put("command_failed", "§c错误: §f指令注册失败!"); 46 | language.put("load_success", "§a插件加载成功!"); 47 | language.put("loading_config", "§f正在加载配置文件..."); 48 | language.put("saved_config", "§a默认配置文件已保存!"); 49 | language.put("config_success", "§a配置文件加载成功!"); 50 | language.put("update_checking", "§b§lBWSBA §f>> §a正在检测更新..."); 51 | language.put("no_update", "§b§lBWSBA §f>> §a您使用的已是最新版本!"); 52 | language.put("update_check_failed", "§b§lBWSBA §f>> §c检测更新失败,请检查服务器网络连接!"); 53 | language.put("update_info", "检测到版本更新!"); 54 | language.put("running_version", "当前版本"); 55 | language.put("update_version", "更新版本"); 56 | language.put("updates", "更新内容"); 57 | language.put("update_download", "更新地址"); 58 | break; 59 | case EN_US: 60 | language.put("version", "Version"); 61 | language.put("author", "Author"); 62 | language.put("website", "Website"); 63 | language.put("loading", "§fInitialization..."); 64 | language.put("loading_failed", "§cInitialization failed!"); 65 | language.put("bedwarsrel_incompatible", "§cError: §fTemporarily incompatible with this version of §aBedwarsRel§f!"); 66 | language.put("no_bedwarsrel", "§cError: §aBedwarsRel §fnot loaded!"); 67 | language.put("no_citizens", "§fYou must load §cCitizens§f to enable the shop!"); 68 | language.put("no_protocollib", "§cError: §aProtocolLib §fnot loaded!"); 69 | language.put("bedwarsxp", "§cError: §fNot compatible with this version of §aBedwarsXP"); 70 | language.put("config_failed", "§cError: §fConfiguration load exception!"); 71 | language.put("register_listener", "§fRegistering listener..."); 72 | language.put("listener_success", "§aRegistered listener!"); 73 | language.put("listener_failed", "§cError: §fListener registration exception!"); 74 | language.put("register_command", "§fRegister commands..."); 75 | language.put("command_success", "§aRegistered commands!"); 76 | language.put("command_failed", "§cError: §fCommand registration exception!"); 77 | language.put("load_success", "§aComplete!"); 78 | language.put("loading_config", "§fLoading configuration..."); 79 | language.put("saved_config", "§aConfiguration saved!"); 80 | language.put("config_success", "§aConfiguration loaded!"); 81 | language.put("update_checking", "§b§lBWSBA §f>> §aUpdate check..."); 82 | language.put("no_update", "§b§lBWSBA §f>> §aYou are running the latest version!"); 83 | language.put("update_check_failed", "§b§lBWSBA §f>> §cUpdate check failed! Please check the server network!"); 84 | language.put("update_info", "There are version update!"); 85 | language.put("running_version", "Running version"); 86 | language.put("update_version", "Update version"); 87 | language.put("updates", "Updates"); 88 | language.put("update_download", "Download"); 89 | break; 90 | case ZH_TW: 91 | language.put("version", "版本"); 92 | language.put("author", "作者"); 93 | language.put("website", "網站"); 94 | language.put("loading", "§f開始加載插件..."); 95 | language.put("loading_failed", "§c插件加載失敗!"); 96 | language.put("bedwarsrel_incompatible", "§c錯誤: §f暫不兼容該版本 §aBedwarsRel§f!"); 97 | language.put("no_bedwarsrel", "§c錯誤: §f缺少必要前置 §aBedwarsRel"); 98 | language.put("no_citizens", "§f你必須安裝 §cCitizens §f才能啟用商店!"); 99 | language.put("no_protocollib", "§c錯誤: §f缺少必要前置 §aProtocolLib"); 100 | language.put("bedwarsxp", "§c錯誤: §f暫不支持該版本§aBedwarsXP"); 101 | language.put("config_failed", "§c錯誤: §f配置文件加載失敗!"); 102 | language.put("register_listener", "§f正在註冊監聽器..."); 103 | language.put("listener_success", "§a監聽器註冊成功!"); 104 | language.put("listener_failed", "§c錯誤: §f監聽器註冊失敗!"); 105 | language.put("register_command", "§f正在註冊指令..."); 106 | language.put("command_success", "§a指令註冊成功!"); 107 | language.put("command_failed", "§c錯誤: §f指令註冊失敗!"); 108 | language.put("load_success", "§a插件加載成功!"); 109 | language.put("loading_config", "§f正在加載配置文件..."); 110 | language.put("saved_config", "§a默認配置文件已保存!"); 111 | language.put("config_success", "§a配置文件加載成功!"); 112 | language.put("update_checking", "§b§lBWSBA §f>> §a正在檢測更新..."); 113 | language.put("no_update", "§b§lBWSBA §f>> §a您使用的已是最新版本!"); 114 | language.put("update_check_failed", "§b§lBWSBA §f>> §c檢測更新失敗,請檢查服務器網絡連接!"); 115 | language.put("update_info", "檢測到版本更新!"); 116 | language.put("running_version", "當前版本"); 117 | language.put("update_version", "更新版本"); 118 | language.put("updates", "更新內容"); 119 | language.put("update_download", "更新地址"); 120 | break; 121 | default: 122 | break; 123 | } 124 | } 125 | 126 | public void loadLocaleConfig() { 127 | File folder = new File(Main.getInstance().getDataFolder(), "/"); 128 | if (!folder.exists()) { 129 | folder.mkdirs(); 130 | } 131 | File file = new File(folder.getAbsolutePath() + "/config.yml"); 132 | if (file.exists()) { 133 | pluginLocale = getLocaleByName(YamlConfiguration.loadConfiguration(file).getString("locale", "en_US")); 134 | } else { 135 | pluginLocale = getSystemLocale(); 136 | } 137 | loadLanguage(); 138 | saveLocale(); 139 | } 140 | 141 | public Object getLanguage(String str) { 142 | return language.getOrDefault(str, "null"); 143 | } 144 | 145 | public String getSystemLocaleName() { 146 | Locale locale = Locale.getDefault(); 147 | return locale.getLanguage() + "_" + locale.getCountry(); 148 | } 149 | 150 | public EnumLocale getSystemLocale() { 151 | return getLocaleByName(getSystemLocaleName()); 152 | } 153 | 154 | private EnumLocale getLocaleByName(String name) { 155 | EnumLocale locale = EnumLocale.getByName(name); 156 | return locale == null ? EnumLocale.EN_US : locale; 157 | } 158 | 159 | public void saveResource(String resourcePath) { 160 | try { 161 | writeToLocal(Main.getInstance().getDataFolder().getPath() + "/" + resourcePath, Main.getInstance().getResource("locale/" + getPluginLocale().getName() + "/" + resourcePath)); 162 | } catch (IOException e) { 163 | e.printStackTrace(); 164 | } 165 | } 166 | 167 | private static void saveLocale() { 168 | File folder = new File(Main.getInstance().getDataFolder(), "/locale"); 169 | if (!folder.exists()) { 170 | folder.mkdirs(); 171 | for (EnumLocale locale : EnumLocale.values()) { 172 | File locale_folder = new File(folder.getPath(), "/" + locale.getName()); 173 | if (!locale_folder.exists()) { 174 | locale_folder.mkdirs(); 175 | } 176 | for (String file : new String[] { "config.yml", "language.yml", "team_shop.yml" }) { 177 | try { 178 | writeToLocal(folder.getPath() + "/" + locale.getName() + "/" + file, Main.getInstance().getResource("locale/" + locale.getName() + "/" + file)); 179 | } catch (Exception e) { 180 | e.printStackTrace(); 181 | } 182 | } 183 | } 184 | } 185 | } 186 | 187 | private static void writeToLocal(String destination, InputStream input) throws IOException { 188 | int index; 189 | byte[] bytes = new byte[1024]; 190 | FileOutputStream downloadFile = new FileOutputStream(destination); 191 | while ((index = input.read(bytes)) != -1) { 192 | downloadFile.write(bytes, 0, index); 193 | downloadFile.flush(); 194 | } 195 | downloadFile.close(); 196 | input.close(); 197 | } 198 | } 199 | --------------------------------------------------------------------------------