├── README.md ├── .idea ├── vcs.xml ├── .gitignore ├── discord.xml ├── runConfigurations.xml ├── compiler.xml ├── dataSources.xml ├── misc.xml ├── jarRepositories.xml └── uiDesigner.xml ├── src └── main │ ├── resources │ ├── plugin.yml │ ├── database.yml │ ├── config.yml │ └── newConfig.yml │ └── java │ └── dev │ └── mrflyn │ └── replayaddon │ ├── managers │ ├── IManager.java │ ├── proxymode │ │ ├── IProxyManager.java │ │ ├── ProxyModeManager.java │ │ ├── proxyplayingmode │ │ │ ├── ProxyPlayingManager.java │ │ │ └── ProxyPlayingListener.java │ │ └── proxylobbymanager │ │ │ ├── ProxyLobbyManager.java │ │ │ └── ProxyLobbyListener.java │ ├── recordingmode │ │ ├── RecordingManager.java │ │ └── RecordingListener.java │ ├── sharedmode │ │ └── SharedManager.java │ └── playingmode │ │ ├── PlayingManager.java │ │ └── PlayingListener.java │ ├── configs │ ├── language │ │ ├── ILang.java │ │ └── en.java │ ├── confighelper │ │ ├── BW1058Util.java │ │ ├── AdvancedReplayUtil.java │ │ └── AutoConfig.java │ ├── Messages.java │ └── ConfigManager.java │ ├── spigui │ ├── pagination │ │ ├── SGPaginationButtonBuilder.java │ │ └── SGPaginationButtonType.java │ ├── buttons │ │ ├── SGButtonListener.java │ │ └── SGButton.java │ └── menu │ │ ├── SGOpenMenu.java │ │ └── SGMenuListener.java │ ├── guis │ ├── Button.java │ ├── GuiHandler.java │ ├── ChatTimeline.java │ ├── CustomReplaySessionSettings.java │ ├── Buttons.java │ ├── PlayerReplaysGUI.java │ └── replaysessionguis │ │ ├── MoreSettingsGUI.java │ │ ├── BookMarksGUI.java │ │ └── ViewerSettingsGUI.java │ ├── advancedreplayhook │ ├── StartQueue.java │ ├── PlayerInfo.java │ ├── ProxyData.java │ ├── ChatTimelineHook.java │ ├── GameReplayCache.java │ └── GameReplayHandler.java │ ├── commands │ ├── handler │ │ ├── SubCommand.java │ │ └── MainCommand.java │ ├── ReloadCommand.java │ ├── GamesCommand.java │ ├── AutoConfigCommand.java │ ├── JumpToCommand.java │ └── ViewCommand.java │ ├── databases │ ├── IDatabase.java │ └── SQLite.java │ ├── versionutils │ ├── ItemDataColor.java │ ├── SupportPAPI.java │ ├── SkullCreator.java │ └── Util.java │ └── ReplayAddonMain.java ├── ReplayAddon-BW1058.iml ├── LICENSE ├── dependency-reduced-pom.xml └── pom.xml /README.md: -------------------------------------------------------------------------------- 1 | Instructions in Github Wiki. 2 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/discord.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | name: ReplayAddon-BW1058 2 | main: dev.mrflyn.replayaddon.ReplayAddonMain 3 | version: 1.4 4 | api-version: 1.13 5 | softdepend: 6 | - BedWars1058 7 | - AdvancedReplay 8 | - PlaceholderAPI 9 | commands: 10 | rp: 11 | usage: / [] 12 | description: main command -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/managers/IManager.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.managers; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface IManager { 6 | 7 | void init(); 8 | 9 | String getMode(); 10 | 11 | void playRecording(Player p, String replayID); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/managers/proxymode/IProxyManager.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.managers.proxymode; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface IProxyManager { 6 | 7 | void init(); 8 | void playRecording(Player p, String replayID); 9 | String getMode(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /ReplayAddon-BW1058.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | SPIGOT 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/configs/language/ILang.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.configs.language; 2 | 3 | import dev.mrflyn.replayaddon.configs.Messages; 4 | 5 | import java.util.List; 6 | 7 | public interface ILang { 8 | public String getCurrent(Messages m, boolean colorize); 9 | public List getCurrentList(Messages m); 10 | public void createFile(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/spigui/pagination/SGPaginationButtonBuilder.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.spigui.pagination; 2 | 3 | 4 | import dev.mrflyn.replayaddon.spigui.SGMenu; 5 | import dev.mrflyn.replayaddon.spigui.buttons.SGButton; 6 | 7 | public interface SGPaginationButtonBuilder { 8 | 9 | SGButton buildPaginationButton(SGPaginationButtonType type, SGMenu inventory); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/guis/Button.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.guis; 2 | 3 | import org.bukkit.inventory.ItemStack; 4 | 5 | public class Button { 6 | public ItemStack itemStack; 7 | public int slot; 8 | public String type; 9 | 10 | public Button(ItemStack stack,String type, int slot){ 11 | this.itemStack = stack; 12 | this.slot = slot; 13 | this.type = type; 14 | } 15 | 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/advancedreplayhook/StartQueue.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.advancedreplayhook; 2 | 3 | import java.util.List; 4 | 5 | public class StartQueue { 6 | 7 | public Integer startTime = null; 8 | public List location = null; 9 | 10 | public StartQueue(Integer startTime, List location){ 11 | this.location = location; 12 | this.startTime = startTime; 13 | } 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/configs/confighelper/BW1058Util.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.configs.confighelper; 2 | 3 | import com.andrei1058.bedwars.BedWars; 4 | import org.bukkit.Bukkit; 5 | 6 | public class BW1058Util { 7 | 8 | public String getBWServerMode(){ 9 | 10 | BedWars bw = (BedWars) Bukkit.getServer().getPluginManager().getPlugin("BedWars1058"); 11 | return bw.getConfig().getString("serverType"); 12 | } 13 | 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/configs/confighelper/AdvancedReplayUtil.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.configs.confighelper; 2 | 3 | 4 | import me.jumper251.replay.ReplaySystem; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.configuration.file.FileConfiguration; 7 | 8 | public class AdvancedReplayUtil { 9 | 10 | public FileConfiguration getConfig(){ 11 | ReplaySystem replay = (ReplaySystem) Bukkit.getServer().getPluginManager().getPlugin("AdvancedReplay"); 12 | return replay.getConfig(); 13 | } 14 | 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/spigui/buttons/SGButtonListener.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.spigui.buttons; 2 | 3 | import org.bukkit.event.inventory.InventoryClickEvent; 4 | 5 | public interface SGButtonListener { 6 | 7 | /** 8 | * The event handler that should be executed when an SGButton is clicked. 9 | * This is intended to implemented by lambda when you create an SGButton. 10 | * 11 | * @param event The Bukkit/Spigot API's {@link InventoryClickEvent}. 12 | */ 13 | void onClick(InventoryClickEvent event); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/commands/handler/SubCommand.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.commands.handler; 2 | 3 | import org.bukkit.command.Command; 4 | import org.bukkit.command.CommandSender; 5 | 6 | import java.util.List; 7 | 8 | public interface SubCommand { 9 | 10 | boolean onSubCommand(CommandSender sender, Command cmd, String label, String[] args); 11 | 12 | List suggestTabCompletes(CommandSender sender, Command cmd, String label, String[] args); 13 | 14 | String getName(); 15 | 16 | boolean isProtected(); 17 | 18 | String getPermission(); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/spigui/menu/SGOpenMenu.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.spigui.menu; 2 | 3 | import dev.mrflyn.replayaddon.spigui.SGMenu; 4 | import org.bukkit.entity.Player; 5 | 6 | public class SGOpenMenu { 7 | 8 | private final SGMenu gui; 9 | private final Player player; 10 | 11 | public SGOpenMenu(SGMenu gui, Player player) { 12 | this.gui = gui; 13 | this.player = player; 14 | } 15 | 16 | public SGMenu getGUI() { 17 | return this.gui; 18 | } 19 | 20 | public Player getPlayer() { 21 | return this.player; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/database.yml: -------------------------------------------------------------------------------- 1 | #Configure the database type (mysql,postgresql is compulsory for proxy-mode) 2 | #uses sqlite by default. 3 | database: 4 | mysql: 5 | enabled: false 6 | host: 'localhost' 7 | port: 25567 8 | database: 'database_name' 9 | username: 'root' 10 | password: '12345' 11 | ssl: false 12 | verify-certificate: true 13 | max-lifetime: 1800 14 | pool-size: 10 15 | postgresql: 16 | enabled: false 17 | host: 'localhost' 18 | port: 25567 19 | database: 'database_name' 20 | username: 'root' 21 | password: '12345' 22 | ssl: false 23 | verify-certificate: true 24 | max-lifetime: 1800 25 | pool-size: 10 -------------------------------------------------------------------------------- /.idea/dataSources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | postgresql 6 | true 7 | org.postgresql.Driver 8 | jdbc:postgresql://btcgkjajf3sx7bssvc5s-postgresql.services.clever-cloud.com:5432/btcgkjajf3sx7bssvc5s 9 | $ProjectFileDir$ 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/spigui/pagination/SGPaginationButtonType.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.spigui.pagination; 2 | 3 | public enum SGPaginationButtonType { 4 | 5 | PREV_BUTTON(3), 6 | CURRENT_BUTTON(4), 7 | NEXT_BUTTON(5), 8 | UNASSIGNED(0); 9 | 10 | private final int slot; 11 | 12 | SGPaginationButtonType(int slot) { 13 | this.slot = slot; 14 | } 15 | 16 | public int getSlot() { 17 | return slot; 18 | } 19 | 20 | public static SGPaginationButtonType forSlot(int slot) { 21 | for (SGPaginationButtonType buttonType : SGPaginationButtonType.values()) { 22 | if (buttonType.slot == slot) return buttonType; 23 | } 24 | 25 | return SGPaginationButtonType.UNASSIGNED; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/guis/GuiHandler.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.guis; 2 | 3 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayHandler; 4 | import org.bukkit.entity.Player; 5 | 6 | public class GuiHandler { 7 | 8 | public static void onJoin(Player p){ 9 | //load playerReplayGui 10 | if(PlayerReplaysGUI.playerReplayGuiCache.containsKey(p))return; 11 | PlayerReplaysGUI gui = new PlayerReplaysGUI(p, GameReplayHandler.replayCachePerPlayer.get(p.getUniqueId())); 12 | PlayerReplaysGUI.playerReplayGuiCache.put(p, gui); 13 | } 14 | 15 | public static void onLeave(Player p) { 16 | //unload playerReplayGui 17 | if (!PlayerReplaysGUI.playerReplayGuiCache.containsKey(p)) return; 18 | PlayerReplaysGUI.playerReplayGuiCache.remove(p); 19 | } 20 | 21 | 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/databases/IDatabase.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.databases; 2 | 3 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayCache; 4 | import dev.mrflyn.replayaddon.advancedreplayhook.ProxyData; 5 | 6 | import java.util.List; 7 | import java.util.UUID; 8 | 9 | public interface IDatabase { 10 | 11 | String name(); 12 | 13 | boolean connect(); 14 | 15 | void init(); 16 | 17 | void saveGameReplayCache(GameReplayCache cache); 18 | 19 | List getGameReplayCaches(String player); 20 | 21 | GameReplayCache getGameReplayCache(String id); 22 | 23 | String getPlayerLanguage(UUID uuid); 24 | 25 | String getPlayerLanguage(String userName); 26 | 27 | void createPlayerLanguage(UUID uuid,String userName, String language); 28 | 29 | void updatePlayerLanguage(UUID uuid, String language); 30 | 31 | ProxyData getProxyData(UUID uuid); 32 | 33 | ProxyData getProxyData(String userName); 34 | 35 | void setProxyData(ProxyData data); 36 | 37 | void deleteProxyData(ProxyData data); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Dibyajyoti Dey 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/advancedreplayhook/PlayerInfo.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.advancedreplayhook; 2 | 3 | import java.util.UUID; 4 | 5 | public class PlayerInfo { 6 | 7 | private String name; 8 | private UUID uuid; 9 | private String tabPrefix; 10 | private String tabSuffix; 11 | private String tagPrefix; 12 | private String tagSuffix; 13 | 14 | public PlayerInfo(String name, UUID uuid, String tabPrefix, String tabSuffix, String tagPrefix, String tagSuffix) { 15 | this.name = name; 16 | this.uuid = uuid; 17 | this.tabPrefix = tabPrefix; 18 | this.tabSuffix = tabSuffix; 19 | this.tagPrefix = tagPrefix; 20 | this.tagSuffix = tagSuffix; 21 | } 22 | 23 | public String getName() { 24 | return name; 25 | } 26 | 27 | public UUID getUuid() { 28 | return uuid; 29 | } 30 | 31 | public String getTabPrefix() { 32 | return tabPrefix; 33 | } 34 | 35 | public String getTabSuffix() { 36 | return tabSuffix; 37 | } 38 | 39 | public String getTagPrefix() { 40 | return tagPrefix; 41 | } 42 | 43 | public String getTagSuffix() { 44 | return tagSuffix; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/advancedreplayhook/ProxyData.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.advancedreplayhook; 2 | 3 | public class ProxyData { 4 | 5 | private final String uuid; 6 | private final String name; 7 | private final String replayID; 8 | private final String lobbyName; 9 | private final Integer startTime; 10 | private final Double x; 11 | private final Double y; 12 | private final Double z; 13 | 14 | public ProxyData(String uuid, String name, String replayID, String lobbyName, Integer startTime, Double x, Double y, Double z) { 15 | this.uuid = uuid; 16 | this.name = name; 17 | this.replayID = replayID; 18 | this.lobbyName = lobbyName; 19 | this.startTime = startTime; 20 | this.x = x; 21 | this.y = y; 22 | this.z = z; 23 | } 24 | 25 | public String getUUID() { 26 | return uuid; 27 | } 28 | 29 | public String getName() { 30 | return name; 31 | } 32 | 33 | public String getReplayID() { 34 | return replayID; 35 | } 36 | 37 | public String getLobbyName() { 38 | return lobbyName; 39 | } 40 | 41 | public Integer getStartTime() { 42 | return startTime; 43 | } 44 | 45 | public Double getX() { 46 | return x; 47 | } 48 | 49 | public Double getY() { 50 | return y; 51 | } 52 | 53 | public Double getZ() { 54 | return z; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/configs/Messages.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.configs; 2 | 3 | public enum Messages { 4 | NO_PERM_MESSAGE, 5 | SERVER_NAME, 6 | CHAT_TIMELINE_SYM, 7 | CHAT_TIMELINE_CURRENT_SYM, 8 | CHAT_TIMELINE_DEATH_SYM, 9 | CHAT_TIMELINE_START, 10 | CHAT_TIMELINE_END, 11 | CHAT_TIMELINE_DEATH_SYM_TITLE, 12 | GUI_FILLER_MATERIAL, 13 | GUI_FILLER_DISPLAYNAME, 14 | GUI_FILLER_LORE, 15 | GUI_BACK_MATERIAL, 16 | GUI_BACK_DISPLAYNAME, 17 | GUI_BACK_LORE, 18 | MORESETTINGS_GUI_TITLE, 19 | MORESETTINGS_VIEWERSETTINGS_DISPLAYNAME, 20 | MORESETTINGS_VIEWERSETTINGS_LORE, 21 | MORESETTINGS_BOOKMARKS_DISPLAYNAME, 22 | MORESETTINGS_BOOKMARKS_LORE, 23 | MORESETTINGS_SHARE_DISPLAYNAME, 24 | MORESETTINGS_SHARE_CLICKMSG, 25 | MORESETTINGS_SHARE_LORE, 26 | MORESETTINGS_LEAVE_DISPLAYNAME, 27 | MORESETTINGS_LEAVE_LORE, 28 | BOOKMARK_GUI_TITLE, 29 | BOOKMARK_ITEM_MATERIAL, 30 | BOOKMARK_ITEM_DISPLAYNAME, 31 | BOOKMARK_ITEM_LORE, 32 | BOOKMARK_CLICK_MSG, 33 | VIEWERSETTINGS_GUI_TITLE, 34 | VIEWERSETTINGS_CT_DISPLAYNAME, 35 | VIEWERSETTINGS_SHOWSPEC_DISPLAYNAME, 36 | VIEWERSETTINGS_FLYSPEED_DISPLAYNAME, 37 | VIEWERSETTINGS_FLYSPEED_LORE, 38 | ENABLED_COLOR, 39 | DISABLED_COLOR, 40 | ENABLED_LORE, 41 | DISABLED_LORE, 42 | PLAYERREPLAYS_GUI_TITLE, 43 | PLAYERREPLAYS_REPLAY_MATERIAL, 44 | PLAYERREPLAYS_REPLAY_DISPLAYNAME, 45 | PLAYERREPLAYS_REPLAY_LORE; 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/versionutils/ItemDataColor.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.versionutils; 2 | 3 | public enum ItemDataColor { 4 | 5 | WHITE((short) 0), 6 | ORANGE((short) 1), 7 | MAGENTA((short) 2), 8 | LIGHT_BLUE((short) 3), 9 | YELLOW((short) 4), 10 | LIME((short) 5), 11 | PINK((short) 6), 12 | GRAY((short) 7), 13 | LIGHT_GRAY((short) 8), 14 | CYAN((short) 9), 15 | PURPLE((short) 10), 16 | BLUE((short) 11), 17 | BROWN((short) 12), 18 | GREEN((short) 13), 19 | RED((short) 14), 20 | BLACK((short) 15); 21 | 22 | /** 23 | * The durability value of the color. 24 | */ 25 | private final short value; 26 | 27 | ItemDataColor(short value) { 28 | this.value = value; 29 | } 30 | 31 | /** 32 | * Returns the durability value that the named color represents. 33 | * 34 | * @return The durability value as a 'short'. 35 | */ 36 | public short getValue() { 37 | return value; 38 | } 39 | 40 | /** 41 | * Returns an {@link ItemDataColor} as found by its damage value or 42 | * null if there isn't one. 43 | * 44 | * @param value The corresponding damage value of the color. 45 | * @return The {@link ItemDataColor} associated with value or null if there isn't one. 46 | */ 47 | public static ItemDataColor getByValue(short value) { 48 | for (ItemDataColor color : ItemDataColor.values()) { 49 | if (value == color.value) return color; 50 | } 51 | 52 | return null; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/commands/ReloadCommand.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.commands; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.commands.handler.MainCommand; 5 | import dev.mrflyn.replayaddon.commands.handler.SubCommand; 6 | import dev.mrflyn.replayaddon.versionutils.Util; 7 | import me.jumper251.replay.replaysystem.replaying.ReplayHelper; 8 | import me.jumper251.replay.replaysystem.replaying.Replayer; 9 | import org.bukkit.ChatColor; 10 | import org.bukkit.command.Command; 11 | import org.bukkit.command.CommandSender; 12 | import org.bukkit.entity.Player; 13 | 14 | import java.util.ArrayList; 15 | import java.util.List; 16 | 17 | public class ReloadCommand implements SubCommand { 18 | 19 | public ReloadCommand(){ 20 | 21 | } 22 | 23 | @Override 24 | public boolean onSubCommand(CommandSender sender, Command cmd, String label, String[] args) { 25 | ReplayAddonMain.plugin.reloadConfigs(); 26 | sender.sendMessage(ChatColor.GREEN+"Configs reloaded successfully!"); 27 | return true; 28 | } 29 | 30 | @Override 31 | public List suggestTabCompletes(CommandSender sender, Command cmd, String label, String[] args) { 32 | 33 | return null; 34 | } 35 | 36 | @Override 37 | public String getName() { 38 | return "reload"; 39 | } 40 | 41 | @Override 42 | public boolean isProtected() { 43 | return true; 44 | } 45 | 46 | @Override 47 | public String getPermission() { 48 | return "replayAddon.command.reload"; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/resources/config.yml: -------------------------------------------------------------------------------- 1 | #Types of server modes: 2 | #recording -> only records the games and stores it. The user interface(GUIs,Commands) are disabled to save performance(use in the backend servers). 3 | #playing -> only handles the user interface(GUIs,Commands) and playing. Recording is disabled to save performance(use in the lobby). 4 | #shared -> Enables all the modules(use it for multi-arena or shared mode). 5 | #NOTE: if you want to make separate replaying servers then turn on proxy-mode below. 6 | server-mode: 'none' 7 | 8 | #Turn this on if you want a separate lobby server and a separate replay server(for big networks who care about lobby performance). 9 | #Turning this on will require the database-type to be mysql/postgresql and synced with all the replay servers. 10 | #For backend servers where the replay will be show set proxy-mode to true and lobby to false. 11 | #Backend servers will be protected from unwanted players(who do not join from lobby). This can be bypassed by giving replayAddon.admin permission. 12 | #For Lobby servers where the player can choose the replay set proxy-mode to true and lobby to true and fill in the required details. 13 | proxy-mode: 14 | enabled: false 15 | #enable this if this server is a lobby server. 16 | lobby: 17 | enabled: true 18 | #use the same name as in the bungee/velocity config. 19 | server-name: 'lobby1' 20 | #put the bungee/velocity names of replay servers, a random server will be chosen from the list. 21 | playing-servers: 22 | - 'replayServer1' 23 | - 'replayServer2' 24 | - 'replayServer3' 25 | 26 | debug: true 27 | 28 | #extra info to store in replay. 29 | recording-settings: 30 | player-tabPrefix: '%luckperms_prefix%' 31 | player-tabSuffix: '%luckperms_suffix%' 32 | player-tagPrefix: '%luckperms_prefix%' 33 | player-tagSuffix: '%luckperms_suffix%' 34 | -------------------------------------------------------------------------------- /src/main/resources/newConfig.yml: -------------------------------------------------------------------------------- 1 | #Types of server modes: 2 | #recording -> only records the games and stores it. The user interface(GUIs,Commands) are disabled to save performance(use in the backend servers). 3 | #playing -> only handles the user interface(GUIs,Commands) and playing. Recording is disabled to save performance(use in the lobby). 4 | #shared -> Enables all the modules(use it for multi-arena or shared mode). 5 | #NOTE: if you want to make separate replaying servers then turn on proxy-mode below. 6 | server-mode: 'none' 7 | 8 | #Turn this on if you want a separate lobby server and a separate replay server(for big networks who care about lobby performance). 9 | #Turning this on will require the database-type to be mysql/postgresql and synced with all the replay servers. 10 | #For backend servers where the replay will be shown set proxy-mode to true and lobby to false. 11 | #Backend servers will be protected from unwanted players(who do not join from lobby). This can be bypassed by giving replayAddon.admin permission. 12 | #For Lobby servers where the player can choose the replay set proxy-mode to true and lobby to true and fill in the required details. 13 | proxy-mode: 14 | enabled: false 15 | #enable this if this server is a lobby server. 16 | lobby: 17 | enabled: true 18 | #use the same name as in the bungee/velocity config. 19 | server-name: 'lobby1' 20 | #put the bungee/velocity names of replay servers, a random server will be chosen from the list. 21 | playing-servers: 22 | - 'replayServer1' 23 | - 'replayServer2' 24 | - 'replayServer3' 25 | 26 | debug: false 27 | 28 | #extra info to store in replay. 29 | recording-settings: 30 | player-tabPrefix: '%luckperms_prefix%' 31 | player-tabSuffix: '%luckperms_suffix%' 32 | player-tagPrefix: '%luckperms_prefix%' 33 | player-tagSuffix: '%luckperms_suffix%' -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/guis/ChatTimeline.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.guis; 2 | 3 | import dev.mrflyn.replayaddon.advancedreplayhook.ChatTimelineHook; 4 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayCache; 5 | import dev.mrflyn.replayaddon.versionutils.Util; 6 | import me.jumper251.replay.api.ReplayAPI; 7 | import me.jumper251.replay.replaysystem.replaying.Replayer; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.scheduler.BukkitTask; 10 | 11 | public class ChatTimeline { 12 | private boolean enabled; 13 | private Player watcher; 14 | private ChatTimelineHook hook; 15 | private Replayer replayer; 16 | private GameReplayCache cache; 17 | 18 | public ChatTimeline(Player watcher, Replayer replayer, GameReplayCache cache){ 19 | this.enabled = false; 20 | this.watcher = watcher; 21 | this.replayer = replayer; 22 | this.cache = cache; 23 | this.hook = new ChatTimelineHook(this); 24 | ReplayAPI.getInstance().getHookManager().registerHook(this.hook); 25 | Util.debug("ReplayHook registered for: "+cache.getReplayName()); 26 | } 27 | 28 | public void terminate(){ 29 | ReplayAPI.getInstance().getHookManager().unregisterHook(this.hook); 30 | Util.debug("ReplayHook terminated for: "+cache.getReplayName()); 31 | } 32 | 33 | public boolean isEnabled() { 34 | return enabled; 35 | } 36 | 37 | public Player getWatcher() { 38 | return watcher; 39 | } 40 | 41 | public ChatTimelineHook getHook() { 42 | return hook; 43 | } 44 | 45 | public Replayer getReplayer() { 46 | return replayer; 47 | } 48 | 49 | public GameReplayCache getCache() { 50 | return cache; 51 | } 52 | 53 | public void setEnabled(boolean enabled) { 54 | this.enabled = enabled; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | 34 | 35 | 39 | 40 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/commands/GamesCommand.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.commands; 2 | 3 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayHandler; 4 | import dev.mrflyn.replayaddon.commands.handler.SubCommand; 5 | import dev.mrflyn.replayaddon.configs.Messages; 6 | import dev.mrflyn.replayaddon.guis.GuiHandler; 7 | import dev.mrflyn.replayaddon.guis.PlayerReplaysGUI; 8 | import org.bukkit.ChatColor; 9 | import org.bukkit.command.Command; 10 | import org.bukkit.command.CommandSender; 11 | import org.bukkit.entity.Player; 12 | 13 | import java.util.List; 14 | 15 | public class GamesCommand implements SubCommand { 16 | 17 | public GamesCommand(){ 18 | 19 | } 20 | 21 | @Override 22 | public boolean onSubCommand(CommandSender sender, Command cmd, String label, String[] args) { 23 | 24 | if (!(sender instanceof Player)) return true; 25 | Player p = (Player) sender; 26 | if(!GameReplayHandler.replayCachePerPlayer.containsKey(p.getUniqueId()) 27 | ||GameReplayHandler.replayCachePerPlayer.get(p.getUniqueId()).isEmpty()){ 28 | p.sendMessage(ChatColor.RED+"No Replays exist. If you played a game recently please rejoin the server to update your replays."); 29 | return true; 30 | } 31 | PlayerReplaysGUI gui = PlayerReplaysGUI.playerReplayGuiCache.get(p); 32 | p.openInventory(gui.getCachedInventory()); 33 | return true; 34 | } 35 | 36 | @Override 37 | public List suggestTabCompletes(CommandSender sender, Command cmd, String label, String[] args) { 38 | return null; 39 | } 40 | 41 | @Override 42 | public String getName() { 43 | return "games"; 44 | } 45 | 46 | @Override 47 | public boolean isProtected() { 48 | return true; 49 | } 50 | 51 | @Override 52 | public String getPermission() { 53 | return "replayAddon.command.games"; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/configs/confighelper/AutoConfig.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.configs.confighelper; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.versionutils.Util; 5 | import org.bukkit.Bukkit; 6 | 7 | import java.io.IOException; 8 | 9 | public class AutoConfig { 10 | 11 | public AutoConfig(){ 12 | 13 | } 14 | 15 | public void execute() { 16 | 17 | if (Bukkit.getServer().getPluginManager().getPlugin("BedWars1058") != null) { 18 | Util.log("Auto-Configuring Replay-Addon, BedWars1058 Found!."); 19 | BW1058Util util = new BW1058Util(); 20 | if (util.getBWServerMode().equals("SHARED")||util.getBWServerMode().equals("MULTIARENA")){ 21 | ReplayAddonMain.plugin.mainConfig.set("server-mode", "shared"); 22 | } 23 | 24 | if (util.getBWServerMode().equals("BUNGEE")){ 25 | ReplayAddonMain.plugin.mainConfig.set("server-mode", "recording"); 26 | } 27 | 28 | } 29 | else if (Bukkit.getServer().getPluginManager().getPlugin("BedWarsProxy") != null) { 30 | Util.log("Auto-Configuring Replay-Addon, BedWarsProxy Found!."); 31 | ReplayAddonMain.plugin.mainConfig.set("server-mode", "playing"); 32 | } 33 | if (Bukkit.getServer().getPluginManager().getPlugin("AdvancedReplay") != null) { 34 | Util.log("Auto-Configuring AdvancedReplay."); 35 | AdvancedReplayUtil aUtil = new AdvancedReplayUtil(); 36 | aUtil.getConfig().set("general.upload_worlds", true); 37 | aUtil.getConfig().set("general.use_mysql", true); 38 | try { 39 | aUtil.getConfig().save("plugins/AdvancedReplay/config.yml"); 40 | } catch (IOException e) { 41 | e.printStackTrace(); 42 | } 43 | 44 | } 45 | try { 46 | ReplayAddonMain.plugin.mainConfig.save(); 47 | } catch (IOException e) { 48 | e.printStackTrace(); 49 | } 50 | } 51 | 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/commands/AutoConfigCommand.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.commands; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayCache; 5 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayHandler; 6 | import dev.mrflyn.replayaddon.advancedreplayhook.ProxyData; 7 | import dev.mrflyn.replayaddon.advancedreplayhook.StartQueue; 8 | import dev.mrflyn.replayaddon.commands.handler.MainCommand; 9 | import dev.mrflyn.replayaddon.commands.handler.SubCommand; 10 | import dev.mrflyn.replayaddon.configs.confighelper.AutoConfig; 11 | import dev.mrflyn.replayaddon.managers.proxymode.ProxyModeManager; 12 | import dev.mrflyn.replayaddon.managers.proxymode.proxylobbymanager.ProxyLobbyManager; 13 | import dev.mrflyn.replayaddon.versionutils.Util; 14 | import org.bukkit.Bukkit; 15 | import org.bukkit.ChatColor; 16 | import org.bukkit.command.Command; 17 | import org.bukkit.command.CommandSender; 18 | import org.bukkit.entity.Player; 19 | 20 | import java.io.ByteArrayOutputStream; 21 | import java.io.DataOutputStream; 22 | import java.util.ArrayList; 23 | import java.util.List; 24 | 25 | import static dev.mrflyn.replayaddon.ReplayAddonMain.plugin; 26 | 27 | public class AutoConfigCommand implements SubCommand { 28 | 29 | public AutoConfigCommand(){ 30 | 31 | } 32 | 33 | @Override 34 | public boolean onSubCommand(CommandSender sender, Command cmd, String label, String[] args) { 35 | new AutoConfig().execute(); 36 | sender.sendMessage("Auto-Configured. Please restart the server."); 37 | return true; 38 | } 39 | 40 | @Override 41 | public List suggestTabCompletes(CommandSender sender, Command cmd, String label, String[] args) { 42 | return null; 43 | } 44 | 45 | @Override 46 | public String getName() { 47 | return "autoConfig"; 48 | } 49 | 50 | @Override 51 | public boolean isProtected() { 52 | return true; 53 | } 54 | 55 | @Override 56 | public String getPermission() { 57 | return "replayAddon.command.autoConfig"; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/versionutils/SupportPAPI.java: -------------------------------------------------------------------------------- 1 | /* 2 | * BedWars1058 - A bed wars mini-game. 3 | * Copyright (C) 2021 Andrei Dascălu 4 | * 5 | * This program is free software: you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation, either version 3 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | * 18 | * Contact e-mail: andrew.dascalu@gmail.com 19 | */ 20 | 21 | package dev.mrflyn.replayaddon.versionutils; 22 | 23 | import me.clip.placeholderapi.PlaceholderAPI; 24 | import org.bukkit.entity.Player; 25 | 26 | import java.util.List; 27 | 28 | public class SupportPAPI { 29 | 30 | private static supp supportPAPI = new noPAPI(); 31 | 32 | public interface supp { 33 | String replace(Player p, String s); 34 | 35 | List replace(Player p, List strings); 36 | } 37 | 38 | public static class noPAPI implements supp { 39 | 40 | @Override 41 | public String replace(Player p, String s) { 42 | return s; 43 | } 44 | 45 | @Override 46 | public List replace(Player p, List strings) { 47 | return strings; 48 | } 49 | } 50 | 51 | public static class withPAPI implements supp { 52 | 53 | @Override 54 | public String replace(Player p, String s) { 55 | return PlaceholderAPI.setPlaceholders(p, s); 56 | } 57 | 58 | @Override 59 | public List replace(Player p, List strings) { 60 | return PlaceholderAPI.setPlaceholders(p, strings); 61 | } 62 | } 63 | 64 | public static supp getSupportPAPI() { 65 | return supportPAPI; 66 | } 67 | 68 | public static void setSupportPAPI(supp s) { 69 | supportPAPI = s; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/managers/recordingmode/RecordingManager.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.managers.recordingmode; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.commands.AutoConfigCommand; 5 | import dev.mrflyn.replayaddon.commands.ReloadCommand; 6 | import dev.mrflyn.replayaddon.commands.handler.MainCommand; 7 | import dev.mrflyn.replayaddon.databases.SQLite; 8 | import dev.mrflyn.replayaddon.managers.IManager; 9 | import dev.mrflyn.replayaddon.versionutils.Util; 10 | import org.bukkit.Bukkit; 11 | import org.bukkit.entity.Player; 12 | 13 | public class RecordingManager implements IManager { 14 | 15 | @Override 16 | public void init(){ 17 | 18 | if(Bukkit.getServer().getPluginManager().getPlugin("AdvancedReplay")==null 19 | || !Bukkit.getServer().getPluginManager().getPlugin("AdvancedReplay").getDescription().getAuthors().contains("MrF1yn")){ 20 | Util.error("RecordingMode needs AdvancedReplay-Extended to run!"); 21 | Bukkit.getServer().getPluginManager().disablePlugin(ReplayAddonMain.plugin); 22 | return; 23 | } 24 | if (Bukkit.getServer().getPluginManager().getPlugin("BedWars1058") == null) { 25 | Util.error("RecordingMode needs BedWars1058 to run!"); 26 | Bukkit.getServer().getPluginManager().disablePlugin(ReplayAddonMain.plugin); 27 | return; 28 | } 29 | if (ReplayAddonMain.plugin.db instanceof SQLite){ 30 | Util.error("Recording Mode needs either MySQL or PostgreSQL. Connect to the same database as the other servers."); 31 | Bukkit.getServer().getPluginManager().disablePlugin(ReplayAddonMain.plugin); 32 | return; 33 | } 34 | 35 | Bukkit.getServer().getPluginManager().registerEvents(new RecordingListener(), ReplayAddonMain.plugin); 36 | MainCommand command = new MainCommand( 37 | new ReloadCommand(), 38 | new AutoConfigCommand() 39 | ); 40 | ReplayAddonMain.plugin.getCommand("rp").setExecutor(command); 41 | ReplayAddonMain.plugin.getCommand("rp").setTabCompleter(command); 42 | 43 | } 44 | 45 | @Override 46 | public String getMode() { 47 | return "recording-mode"; 48 | } 49 | 50 | @Override 51 | public void playRecording(Player p, String replayID) { 52 | 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/guis/CustomReplaySessionSettings.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.guis; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayHandler; 5 | import dev.mrflyn.replayaddon.guis.replaysessionguis.ViewerSettingsGUI; 6 | import me.jumper251.replay.replaysystem.replaying.ReplayHelper; 7 | import org.bukkit.Bukkit; 8 | import org.bukkit.entity.Player; 9 | 10 | public class CustomReplaySessionSettings { 11 | private final Player watcher; 12 | private final String replayID; 13 | private boolean chatTimeline; 14 | private boolean showSpectators; 15 | private float flySpeed; 16 | private ChatTimeline chatTimelineHandler; 17 | private ViewerSettingsGUI viewerSettingsGUI; 18 | 19 | public CustomReplaySessionSettings(Player watcher, String replayID){ 20 | this.watcher = watcher; 21 | this.replayID = replayID; 22 | this.chatTimeline = false; 23 | this.showSpectators = false; 24 | this.flySpeed = 1; 25 | this.viewerSettingsGUI = new ViewerSettingsGUI(watcher, this); 26 | this.chatTimelineHandler = new ChatTimeline(watcher, 27 | ReplayHelper.replaySessions.get(watcher.getName()), 28 | GameReplayHandler.replayCacheID.get(replayID)); 29 | 30 | } 31 | 32 | public Player getWatcher() { 33 | return watcher; 34 | } 35 | 36 | public String getReplayID() { 37 | return replayID; 38 | } 39 | 40 | public boolean isChatTimeline() { 41 | return chatTimeline; 42 | } 43 | 44 | public void setChatTimeline(boolean chatTimeline) { 45 | this.chatTimeline = chatTimeline; 46 | chatTimelineHandler.setEnabled(chatTimeline); 47 | 48 | } 49 | 50 | public boolean isShowSpectators() { 51 | return showSpectators; 52 | } 53 | 54 | public void setShowSpectators(boolean showSpectators) { 55 | this.showSpectators = showSpectators; 56 | } 57 | 58 | public float getFlySpeed() { 59 | return flySpeed; 60 | } 61 | 62 | public void setFlySpeed(float flySpeed) { 63 | this.flySpeed = flySpeed; 64 | Bukkit.getScheduler().runTask(ReplayAddonMain.plugin, ()-> { 65 | watcher.setFlySpeed(flySpeed / 10F); 66 | }); 67 | } 68 | 69 | public ViewerSettingsGUI getViewerSettingsGUI() { 70 | return viewerSettingsGUI; 71 | } 72 | 73 | public ChatTimeline getChatTimelineHandler() { 74 | return chatTimelineHandler; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/managers/proxymode/ProxyModeManager.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.managers.proxymode; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.advancedreplayhook.ProxyData; 5 | import dev.mrflyn.replayaddon.databases.SQLite; 6 | import dev.mrflyn.replayaddon.managers.IManager; 7 | import dev.mrflyn.replayaddon.managers.proxymode.proxylobbymanager.ProxyLobbyManager; 8 | import dev.mrflyn.replayaddon.managers.proxymode.proxyplayingmode.ProxyPlayingManager; 9 | import dev.mrflyn.replayaddon.versionutils.Util; 10 | import org.bukkit.Bukkit; 11 | import org.bukkit.entity.Player; 12 | 13 | import java.util.HashMap; 14 | import java.util.UUID; 15 | 16 | public class ProxyModeManager implements IManager { 17 | private IProxyManager manager; 18 | public static HashMap proxyDataCache = new HashMap<>(); 19 | @Override 20 | public void init(){ 21 | if (ReplayAddonMain.plugin.db instanceof SQLite){ 22 | Util.error("Proxy Mode needs either MySQL or PostgreSQL. Connect to the same database as the other servers."); 23 | Bukkit.getServer().getPluginManager().disablePlugin(ReplayAddonMain.plugin); 24 | return; 25 | } 26 | if(!ReplayAddonMain.plugin.mainConfig.getBoolean("proxy-mode.lobby.enabled")) { 27 | if(Bukkit.getServer().getPluginManager().getPlugin("AdvancedReplay")==null 28 | || !Bukkit.getServer().getPluginManager().getPlugin("AdvancedReplay").getDescription().getAuthors().contains("MrF1yn")){ 29 | Util.error("Proxy-Playing-Mode needs AdvancedReplay-Extended to run!"); 30 | Bukkit.getServer().getPluginManager().disablePlugin(ReplayAddonMain.plugin); 31 | return; 32 | } 33 | manager = new ProxyPlayingManager(); 34 | }else { 35 | manager = new ProxyLobbyManager(); 36 | } 37 | manager.init(); 38 | if (Bukkit.getServer().getMessenger().isOutgoingChannelRegistered(ReplayAddonMain.plugin, "BungeeCord")){ 39 | Bukkit.getServer().getMessenger().unregisterOutgoingPluginChannel(ReplayAddonMain.plugin, "BungeeCord"); 40 | } 41 | Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(ReplayAddonMain.plugin, "BungeeCord"); 42 | } 43 | 44 | public IProxyManager getManager(){ 45 | return this.manager; 46 | } 47 | 48 | @Override 49 | public String getMode() { 50 | return manager.getMode(); 51 | } 52 | 53 | @Override 54 | public void playRecording(Player p, String replayID) { 55 | manager.playRecording(p, replayID); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/configs/ConfigManager.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.configs; 2 | 3 | import dev.mrflyn.replayaddon.configs.confighelper.AutoConfig; 4 | import dev.mrflyn.replayaddon.guis.Buttons; 5 | import dev.mrflyn.replayaddon.versionutils.Util; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.configuration.file.YamlConfiguration; 8 | import org.simpleyaml.configuration.file.YamlFile; 9 | import org.simpleyaml.exceptions.InvalidConfigurationException; 10 | 11 | import java.io.File; 12 | import java.io.IOException; 13 | 14 | import static dev.mrflyn.replayaddon.ReplayAddonMain.plugin; 15 | 16 | public class ConfigManager { 17 | 18 | public static void loadConfigs(){ 19 | plugin.mainConfig = new YamlFile(plugin.getDataFolder()+"/config.yml"); 20 | plugin.dbConfig = new YamlFile(plugin.getDataFolder()+"/database.yml"); 21 | try { 22 | plugin.dbConfig.loadWithComments(); 23 | plugin.mainConfig.loadWithComments(); 24 | if (plugin.mainConfig.getString("server-mode").equalsIgnoreCase("none")){ 25 | new AutoConfig().execute(); 26 | Util.log("Auto-Configured. Restarting Server."); 27 | Bukkit.getServer().shutdown(); 28 | } 29 | } catch (InvalidConfigurationException | IOException e) { 30 | e.printStackTrace(); 31 | } 32 | plugin.buttons = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder()+"/buttons.yml")); 33 | } 34 | 35 | public static void saveConfigs(){ 36 | plugin.saveResource("config.yml", false); 37 | plugin.saveResource("database.yml", false); 38 | saveButtons(); 39 | } 40 | 41 | 42 | public static void saveButtons() { 43 | try { 44 | File file = new File(plugin.getDataFolder(), "buttons.yml"); 45 | if (file.exists()) return; 46 | file.createNewFile(); 47 | plugin.buttons = YamlConfiguration.loadConfiguration(file); 48 | String prefix = "buttons."; 49 | for(Buttons button : Buttons.values()){ 50 | 51 | plugin.buttons.set(prefix + button.name() + ".slot", button.slot()); 52 | plugin.buttons.set(prefix + button.name() + ".material", button.material().toString()); 53 | plugin.buttons.set(prefix + button.name() + ".displayName", button.displayName()); 54 | plugin.buttons.set(prefix + button.name() + ".lore", button.lore()); 55 | plugin.buttons.set(prefix + button.name() + ".skin", button.skin()); 56 | plugin.buttons.set(prefix + button.name() + ".data", button.data()); 57 | 58 | 59 | } 60 | plugin.buttons.save(file); 61 | } catch (Exception e) { 62 | e.printStackTrace(); 63 | } 64 | 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /src/main/java/dev/mrflyn/replayaddon/commands/JumpToCommand.java: -------------------------------------------------------------------------------- 1 | package dev.mrflyn.replayaddon.commands; 2 | 3 | import dev.mrflyn.replayaddon.ReplayAddonMain; 4 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayCache; 5 | import dev.mrflyn.replayaddon.advancedreplayhook.GameReplayHandler; 6 | import dev.mrflyn.replayaddon.advancedreplayhook.StartQueue; 7 | import dev.mrflyn.replayaddon.commands.handler.MainCommand; 8 | import dev.mrflyn.replayaddon.commands.handler.SubCommand; 9 | import dev.mrflyn.replayaddon.versionutils.Util; 10 | import me.jumper251.replay.replaysystem.replaying.ReplayHelper; 11 | import me.jumper251.replay.replaysystem.replaying.Replayer; 12 | import org.bukkit.Bukkit; 13 | import org.bukkit.ChatColor; 14 | import org.bukkit.command.Command; 15 | import org.bukkit.command.CommandSender; 16 | import org.bukkit.entity.Player; 17 | 18 | import java.util.ArrayList; 19 | import java.util.List; 20 | 21 | public class JumpToCommand implements SubCommand { 22 | 23 | public JumpToCommand(){ 24 | 25 | } 26 | 27 | @Override 28 | public boolean onSubCommand(CommandSender sender, Command cmd, String label, String[] args) { 29 | 30 | if (!(sender instanceof Player)) return true; 31 | Player p = (Player) sender; 32 | if(args.length<1){ 33 | p.sendMessage(ChatColor.RED+"The correct format is /rp jumpTo