├── .gitignore
├── README.md
├── pom.xml
└── src
└── main
├── java
└── tv
│ └── banko
│ └── tutorialreloaded
│ ├── Main.java
│ ├── backpack
│ ├── Backpack.java
│ └── BackpackManager.java
│ ├── commands
│ ├── BackpackCommand.java
│ └── TimerCommand.java
│ ├── listeners
│ ├── ExplosionListeners.java
│ ├── JoinListener.java
│ └── QuitListener.java
│ ├── scoreboard
│ ├── EntryName.java
│ ├── ScoreboardBuilder.java
│ └── TestScoreboard.java
│ ├── timer
│ └── Timer.java
│ └── utils
│ ├── Base64.java
│ └── Config.java
└── resources
└── plugin.yml
/.gitignore:
--------------------------------------------------------------------------------
1 | # User-specific stuff
2 | .idea/
3 |
4 | *.iml
5 | *.ipr
6 | *.iws
7 |
8 | # IntelliJ
9 | out/
10 |
11 | # Compiled class file
12 | *.class
13 |
14 | # Log file
15 | *.log
16 |
17 | # BlueJ files
18 | *.ctxt
19 |
20 | # Package Files #
21 | *.jar
22 | *.war
23 | *.nar
24 | *.ear
25 | *.zip
26 | *.tar.gz
27 | *.rar
28 |
29 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
30 | hs_err_pid*
31 |
32 | *~
33 |
34 | # temporary files which can be created if a process still has a handle open of a deleted file
35 | .fuse_hidden*
36 |
37 | # KDE directory preferences
38 | .directory
39 |
40 | # Linux trash folder which might appear on any partition or disk
41 | .Trash-*
42 |
43 | # .nfs files are created when an open file is removed but is still being accessed
44 | .nfs*
45 |
46 | # General
47 | .DS_Store
48 | .AppleDouble
49 | .LSOverride
50 |
51 | # Icon must end with two \r
52 | Icon
53 |
54 | # Thumbnails
55 | ._*
56 |
57 | # Files that might appear in the root of a volume
58 | .DocumentRevisions-V100
59 | .fseventsd
60 | .Spotlight-V100
61 | .TemporaryItems
62 | .Trashes
63 | .VolumeIcon.icns
64 | .com.apple.timemachine.donotpresent
65 |
66 | # Directories potentially created on remote AFP share
67 | .AppleDB
68 | .AppleDesktop
69 | Network Trash Folder
70 | Temporary Items
71 | .apdisk
72 |
73 | # Windows thumbnail cache files
74 | Thumbs.db
75 | Thumbs.db:encryptable
76 | ehthumbs.db
77 | ehthumbs_vista.db
78 |
79 | # Dump file
80 | *.stackdump
81 |
82 | # Folder config file
83 | [Dd]esktop.ini
84 |
85 | # Recycle Bin used on file shares
86 | $RECYCLE.BIN/
87 |
88 | # Windows Installer files
89 | *.cab
90 | *.msi
91 | *.msix
92 | *.msm
93 | *.msp
94 |
95 | # Windows shortcuts
96 | *.lnk
97 |
98 | target/
99 |
100 | pom.xml.tag
101 | pom.xml.releaseBackup
102 | pom.xml.versionsBackup
103 | pom.xml.next
104 |
105 | release.properties
106 | dependency-reduced-pom.xml
107 | buildNumber.properties
108 | .mvn/timing.properties
109 | .mvn/wrapper/maven-wrapper.jar
110 | .flattened-pom.xml
111 |
112 | # Common working directory
113 | run/
114 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | DerBanko Coding Tutorial Project
2 |
3 | https://twitch.tv/DerBanko
4 | https://youtube.com/c/DerBanko
5 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | tv.banko
8 | tutorialreloaded
9 | 1.0-SNAPSHOT
10 | jar
11 |
12 | TutorialReloaded
13 |
14 | Coding Tutorial Live on Twitch
15 |
16 | 15
17 | UTF-8
18 |
19 | https://twitch.tv/DerBanko
20 |
21 |
22 |
23 |
24 | org.apache.maven.plugins
25 | maven-compiler-plugin
26 | 3.8.1
27 |
28 | ${java.version}
29 | ${java.version}
30 |
31 |
32 |
33 | org.apache.maven.plugins
34 | maven-shade-plugin
35 | 3.2.4
36 |
37 |
38 | package
39 |
40 | shade
41 |
42 |
43 | false
44 | C:\Users\Lucas\Desktop\Server\plugins
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | src/main/resources
53 | true
54 |
55 |
56 |
57 |
58 |
59 |
60 | spigotmc-repo
61 | https://hub.spigotmc.org/nexus/content/repositories/snapshots/
62 |
63 |
64 | sonatype
65 | https://oss.sonatype.org/content/groups/public/
66 |
67 |
68 |
69 |
70 |
71 | org.spigotmc
72 | spigot
73 | 1.16.5-R0.1-SNAPSHOT
74 | provided
75 |
76 |
77 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/Main.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.ChatColor;
5 | import org.bukkit.plugin.PluginManager;
6 | import org.bukkit.plugin.java.JavaPlugin;
7 | import tv.banko.tutorialreloaded.backpack.BackpackManager;
8 | import tv.banko.tutorialreloaded.commands.BackpackCommand;
9 | import tv.banko.tutorialreloaded.commands.TimerCommand;
10 | import tv.banko.tutorialreloaded.listeners.ExplosionListeners;
11 | import tv.banko.tutorialreloaded.listeners.JoinListener;
12 | import tv.banko.tutorialreloaded.listeners.QuitListener;
13 | import tv.banko.tutorialreloaded.timer.Timer;
14 | import tv.banko.tutorialreloaded.utils.Config;
15 |
16 | public final class Main extends JavaPlugin {
17 |
18 | private static Main instance;
19 |
20 | private Timer timer;
21 | private Config config;
22 | private BackpackManager backpackManager;
23 |
24 | @Override
25 | public void onLoad() {
26 | instance = this;
27 | config = new Config();
28 | }
29 |
30 | @Override
31 | public void onEnable() {
32 | Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "HALLO!");
33 |
34 | PluginManager manager = Bukkit.getPluginManager();
35 | manager.registerEvents(new JoinListener(), this);
36 | manager.registerEvents(new QuitListener(), this);
37 | manager.registerEvents(new ExplosionListeners(), this);
38 |
39 | getCommand("timer").setExecutor(new TimerCommand());
40 | getCommand("backpack").setExecutor(new BackpackCommand());
41 |
42 | timer = new Timer();
43 | backpackManager = new BackpackManager();
44 | }
45 |
46 | @Override
47 | public void onDisable() {
48 | timer.save();
49 | backpackManager.save();
50 |
51 | config.save();
52 | }
53 |
54 | public static Main getInstance() {
55 | return instance;
56 | }
57 |
58 | public Config getConfiguration() {
59 | return config;
60 | }
61 |
62 | public Timer getTimer() {
63 | return timer;
64 | }
65 |
66 | public BackpackManager getBackpackManager() {
67 | return backpackManager;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/backpack/Backpack.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.backpack;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.inventory.Inventory;
5 | import tv.banko.tutorialreloaded.utils.Base64;
6 |
7 | import java.io.IOException;
8 | import java.util.UUID;
9 |
10 | public class Backpack {
11 |
12 | private final UUID uuid;
13 | private final Inventory inventory;
14 |
15 | public Backpack(UUID uuid) {
16 | this.uuid = uuid;
17 | this.inventory = Bukkit.createInventory(null, 27 /* vielfaches von 9 */, "Backpack");
18 | }
19 |
20 | public Backpack(UUID uuid, String base64) throws IOException {
21 | this.uuid = uuid;
22 | this.inventory = Bukkit.createInventory(null, 27 /* vielfaches von 9 */, "Backpack");
23 | this.inventory.setContents(Base64.itemStackArrayFromBase64(base64));
24 | }
25 |
26 | public UUID getUuid() {
27 | return uuid;
28 | }
29 |
30 | public Inventory getInventory() {
31 | return inventory;
32 | }
33 |
34 | public String toBase64() {
35 | return Base64.itemStackArrayToBase64(inventory.getContents());
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/backpack/BackpackManager.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.backpack;
2 |
3 | import org.bukkit.inventory.ItemStack;
4 | import tv.banko.tutorialreloaded.Main;
5 | import tv.banko.tutorialreloaded.utils.Base64;
6 | import tv.banko.tutorialreloaded.utils.Config;
7 |
8 | import java.io.IOException;
9 | import java.util.*;
10 |
11 | public class BackpackManager {
12 |
13 | private final Map map;
14 |
15 | public BackpackManager() {
16 | map = new HashMap<>();
17 |
18 | load();
19 | }
20 |
21 | public Backpack getBackpack(UUID uuid) {
22 | if(map.containsKey(uuid)) {
23 | return map.get(uuid);
24 | }
25 |
26 | Backpack backpack = new Backpack(uuid);
27 | map.put(uuid, backpack);
28 | return backpack;
29 | }
30 |
31 | public void setBackpack(UUID uuid, Backpack backpack) {
32 | map.put(uuid, backpack);
33 | }
34 |
35 | private void load() {
36 | Config config = Main.getInstance().getConfiguration();
37 |
38 | List uuids = config.getConfig().getStringList("backpacks");
39 |
40 | uuids.forEach(s -> {
41 | UUID uuid = UUID.fromString(s);
42 | String base64 = config.getConfig().getString("backpack." + s);
43 |
44 | try {
45 | map.put(uuid, new Backpack(uuid, base64));
46 | } catch (IOException e) {
47 | e.printStackTrace();
48 | }
49 | });
50 | }
51 |
52 | public void save() {
53 | Config config = Main.getInstance().getConfiguration();
54 |
55 | List uuids = new ArrayList<>();
56 |
57 | for (UUID uuid : map.keySet()) {
58 | uuids.add(uuid.toString());
59 | }
60 |
61 | config.getConfig().set("backpacks", uuids);
62 | map.forEach((uuid, backpack) -> config.getConfig().set("backpack." + uuid.toString(), backpack.toBase64()));
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/commands/BackpackCommand.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.commands;
2 |
3 | import org.bukkit.command.Command;
4 | import org.bukkit.command.CommandExecutor;
5 | import org.bukkit.command.CommandSender;
6 | import org.bukkit.entity.Creeper;
7 | import org.bukkit.entity.Player;
8 | import tv.banko.tutorialreloaded.Main;
9 | import tv.banko.tutorialreloaded.backpack.Backpack;
10 |
11 | public class BackpackCommand implements CommandExecutor {
12 |
13 | @Override
14 | public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
15 |
16 | if(!(sender instanceof Player)) {
17 | return true;
18 | }
19 |
20 | Player player = (Player) sender;
21 |
22 | Backpack backpack = Main.getInstance().getBackpackManager().getBackpack(player.getUniqueId());
23 |
24 | player.openInventory(backpack.getInventory());
25 | return true;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/commands/TimerCommand.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.commands;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.command.Command;
5 | import org.bukkit.command.CommandExecutor;
6 | import org.bukkit.command.CommandSender;
7 | import tv.banko.tutorialreloaded.Main;
8 | import tv.banko.tutorialreloaded.timer.Timer;
9 |
10 | public class TimerCommand implements CommandExecutor {
11 |
12 | @Override
13 | public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
14 |
15 | if(args.length == 0) {
16 | sendUsage(sender);
17 | return true;
18 | }
19 |
20 | switch (args[0].toLowerCase()) {
21 | case "resume": {
22 | Timer timer = Main.getInstance().getTimer();
23 |
24 | if (timer.isRunning()) {
25 | sender.sendMessage(ChatColor.RED + "Der Timer läuft bereits.");
26 | break;
27 | }
28 |
29 | timer.setRunning(true);
30 | sender.sendMessage(ChatColor.GRAY + "Der Timer wurde gestartet.");
31 | break;
32 | }
33 | case "pause": {
34 | Timer timer = Main.getInstance().getTimer();
35 |
36 | if (!timer.isRunning()) {
37 | sender.sendMessage(ChatColor.RED + "Der Timer läuft nicht.");
38 | break;
39 | }
40 |
41 | timer.setRunning(false);
42 | sender.sendMessage(ChatColor.GRAY + "Der Timer wurde gestoppt.");
43 | break;
44 | }
45 | case "time": {
46 | if(args.length != 2) {
47 | sender.sendMessage(ChatColor.GRAY + "Verwendung" + ChatColor.DARK_GRAY + ": " + ChatColor.BLUE +
48 | "/timer time ");
49 | return true;
50 | }
51 |
52 | try {
53 | Timer timer = Main.getInstance().getTimer();
54 |
55 | timer.setRunning(false);
56 | timer.setTime(Integer.parseInt(args[1]));
57 | sender.sendMessage(ChatColor.GRAY + "Die Zeit wurde auf " + args[1] + " gesetzt.");
58 | } catch (NumberFormatException e) {
59 | sender.sendMessage(ChatColor.RED + "Dein Parameter 2 muss eine Zahl sein.");
60 | }
61 | break;
62 | }
63 | case "reset": {
64 | Timer timer = Main.getInstance().getTimer();
65 |
66 | timer.setRunning(false);
67 | timer.setTime(0);
68 | sender.sendMessage(ChatColor.GRAY + "Der Timer wurde zurückgesetzt.");
69 | break;
70 | }
71 | default:
72 | sendUsage(sender);
73 | break;
74 | }
75 | return false;
76 | }
77 |
78 | private void sendUsage(CommandSender sender) {
79 | sender.sendMessage(ChatColor.GRAY + "Verwendung" + ChatColor.DARK_GRAY + ": " + ChatColor.BLUE +
80 | "/timer resume, /timer pause, /timer time , /timer reset");
81 | }
82 |
83 | }
84 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/listeners/ExplosionListeners.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.listeners;
2 |
3 | import org.bukkit.Material;
4 | import org.bukkit.entity.Creeper;
5 | import org.bukkit.entity.EntityType;
6 | import org.bukkit.entity.TNTPrimed;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.Listener;
9 | import org.bukkit.event.block.BlockPlaceEvent;
10 | import org.bukkit.event.entity.EntityExplodeEvent;
11 | import org.bukkit.event.player.PlayerInteractEvent;
12 |
13 | import java.util.Objects;
14 |
15 | public class ExplosionListeners implements Listener {
16 |
17 | @EventHandler
18 | public void onEntityExplode(EntityExplodeEvent event) {
19 |
20 | if(!(event.getEntity() instanceof Creeper)) {
21 | return;
22 | }
23 |
24 | event.blockList().clear();
25 | }
26 |
27 | @EventHandler
28 | public void onPlace(BlockPlaceEvent event) {
29 |
30 | if(!event.getBlockPlaced().getType().equals(Material.TNT)) {
31 | return;
32 | }
33 |
34 | event.getBlockPlaced().setType(Material.AIR);
35 |
36 | TNTPrimed tnt = (TNTPrimed) event.getBlockPlaced().getWorld().spawnEntity(event.getBlockPlaced().getLocation(), EntityType.PRIMED_TNT);
37 | tnt.setFuseTicks(0);
38 | }
39 |
40 | @EventHandler
41 | public void onInteract(PlayerInteractEvent event) {
42 |
43 | if(!event.hasItem()) {
44 | return;
45 | }
46 |
47 | if(!event.hasBlock()) {
48 | return;
49 | }
50 |
51 | if(!event.getPlayer().isOp()) {
52 | return;
53 | }
54 |
55 | if(!Objects.requireNonNull(event.getItem()).getType().equals(Material.FIRE_CHARGE)) {
56 | return;
57 | }
58 |
59 | TNTPrimed tnt = (TNTPrimed) Objects.requireNonNull(event.getClickedBlock()).getWorld().spawnEntity(event.getClickedBlock().getLocation(), EntityType.PRIMED_TNT);
60 | tnt.setIsIncendiary(true);
61 | tnt.setFuseTicks(0);
62 | tnt.setYield(1000);
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/listeners/JoinListener.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.listeners;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.entity.Player;
5 | import org.bukkit.event.EventHandler;
6 | import org.bukkit.event.Listener;
7 | import org.bukkit.event.player.PlayerJoinEvent;
8 | import tv.banko.tutorialreloaded.scoreboard.TestScoreboard;
9 |
10 | public class JoinListener implements Listener {
11 |
12 | @EventHandler
13 | public void onJoin(PlayerJoinEvent event) {
14 | Player player = event.getPlayer();
15 |
16 | event.setJoinMessage(ChatColor.GREEN.toString() + ChatColor.UNDERLINE + player.getName() + " hat den Server betreten.");
17 |
18 | player.sendMessage(ChatColor.GOLD + "Willkommen auf dem Server! \n\"Viel Spaß und viel Vergnügen (^:");
19 |
20 | new TestScoreboard(player);
21 | }
22 | }
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/listeners/QuitListener.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.listeners;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.entity.Player;
5 | import org.bukkit.event.EventHandler;
6 | import org.bukkit.event.Listener;
7 | import org.bukkit.event.player.PlayerQuitEvent;
8 |
9 | public class QuitListener implements Listener {
10 |
11 | @EventHandler
12 | public void onQuit(PlayerQuitEvent event) {
13 | Player player = event.getPlayer();
14 |
15 | event.setQuitMessage(ChatColor.BLUE + "Sorry, dass " + player.getName() + " es hier nicht gefallen hat.");
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/scoreboard/EntryName.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.scoreboard;
2 |
3 | import org.bukkit.ChatColor;
4 |
5 | public enum EntryName {
6 |
7 | ENTRY_0(0, ChatColor.DARK_PURPLE.toString()),
8 | ENTRY_1(1, ChatColor.DARK_GRAY.toString()),
9 | ENTRY_2(2, ChatColor.BOLD.toString()),
10 | ENTRY_3(3, ChatColor.DARK_RED.toString()),
11 | ENTRY_4(4, ChatColor.GRAY.toString()),
12 | ENTRY_5(5, ChatColor.DARK_GREEN.toString()),
13 | ENTRY_6(6, ChatColor.LIGHT_PURPLE.toString()),
14 | ENTRY_7(7, ChatColor.UNDERLINE.toString());
15 |
16 | private final int entry;
17 | private final String entryName;
18 |
19 | EntryName(int entry, String entryName) {
20 | this.entry = entry;
21 | this.entryName = entryName;
22 | }
23 |
24 | public int getEntry() {
25 | return entry;
26 | }
27 |
28 | public String getEntryName() {
29 | return entryName;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/scoreboard/ScoreboardBuilder.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.scoreboard;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.entity.Player;
5 | import org.bukkit.scoreboard.DisplaySlot;
6 | import org.bukkit.scoreboard.Objective;
7 | import org.bukkit.scoreboard.Scoreboard;
8 | import org.bukkit.scoreboard.Team;
9 |
10 | public abstract class ScoreboardBuilder {
11 |
12 | protected final Scoreboard scoreboard;
13 | protected final Objective objective;
14 |
15 | protected final Player player;
16 |
17 | public ScoreboardBuilder(Player player, String displayName) {
18 | this.player = player;
19 |
20 | if(player.getScoreboard().equals(Bukkit.getScoreboardManager().getMainScoreboard())) {
21 | player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
22 | }
23 |
24 | this.scoreboard = player.getScoreboard();
25 |
26 | if(this.scoreboard.getObjective("display") != null) {
27 | this.scoreboard.getObjective("display").unregister();
28 | }
29 |
30 | this.objective = this.scoreboard.registerNewObjective("display", "dummy", displayName);
31 | this.objective.setDisplaySlot(DisplaySlot.SIDEBAR);
32 |
33 | createScoreboard();
34 | }
35 |
36 | public abstract void createScoreboard();
37 |
38 | public abstract void update();
39 |
40 | public void setDisplayName(String displayName) {
41 | this.objective.setDisplayName(displayName);
42 | }
43 |
44 | public void setScore(String content, int score) {
45 | Team team = getTeamByScore(score);
46 |
47 | if(team == null) {
48 | return;
49 | }
50 |
51 | team.setPrefix(content);
52 | showScore(score);
53 | }
54 |
55 | public void removeScore(int score) {
56 | hideScore(score);
57 | }
58 |
59 | private EntryName getEntryNameByScore(int score) {
60 | for(EntryName name : EntryName.values()) {
61 | if(score == name.getEntry()) {
62 | return name;
63 | }
64 | }
65 |
66 | return null;
67 | }
68 |
69 | private Team getTeamByScore(int score) {
70 | EntryName name = getEntryNameByScore(score);
71 |
72 | if(name == null) {
73 | return null;
74 | }
75 |
76 | Team team = scoreboard.getEntryTeam(name.getEntryName());
77 |
78 | if(team != null) {
79 | return team;
80 | }
81 |
82 | team = scoreboard.registerNewTeam(name.name());
83 | team.addEntry(name.getEntryName());
84 | return team;
85 | }
86 |
87 | private void showScore(int score) {
88 | EntryName name = getEntryNameByScore(score);
89 |
90 | if(name == null) {
91 | return;
92 | }
93 |
94 | if(objective.getScore(name.getEntryName()).isScoreSet()) {
95 | return;
96 | }
97 |
98 | objective.getScore(name.getEntryName()).setScore(score);
99 | }
100 |
101 | private void hideScore(int score) {
102 | EntryName name = getEntryNameByScore(score);
103 |
104 | if(name == null) {
105 | return;
106 | }
107 |
108 | if(!objective.getScore(name.getEntryName()).isScoreSet()) {
109 | return;
110 | }
111 |
112 | scoreboard.resetScores(name.getEntryName());
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/scoreboard/TestScoreboard.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.scoreboard;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.entity.Player;
5 | import org.bukkit.scheduler.BukkitRunnable;
6 | import tv.banko.tutorialreloaded.Main;
7 |
8 | public class TestScoreboard extends ScoreboardBuilder {
9 |
10 | private int socialId;
11 |
12 | public TestScoreboard(Player player) {
13 | super(player, ChatColor.DARK_PURPLE.toString() + ChatColor.BOLD + " twitch.tv/DerBanko ");
14 | socialId = 0;
15 |
16 | run();
17 | }
18 |
19 | @Override
20 | public void createScoreboard() {
21 | setScore("test", 8);
22 | setScore(ChatColor.DARK_GRAY.toString(), 7);
23 | setScore(ChatColor.GRAY + "Dein Rang" + ChatColor.DARK_GRAY + ":", 6);
24 |
25 | if(player.isOp()) {
26 | setScore(ChatColor.RED + "Operator", 5);
27 | } else {
28 | setScore(ChatColor.GRAY + "Spieler", 5);
29 | }
30 |
31 | setScore(ChatColor.GRAY.toString(), 4);
32 | setScore(ChatColor.AQUA + "twitter.com/DerBanko", 3);
33 | setScore(ChatColor.RED.toString(), 2);
34 | setScore(ChatColor.RED + player.getAddress().getHostName(), 1);
35 | setScore(ChatColor.AQUA.toString(), 0);
36 | }
37 |
38 | @Override
39 | public void update() {
40 |
41 | }
42 |
43 | private void run() {
44 | new BukkitRunnable() {
45 | @Override
46 | public void run() {
47 |
48 | switch (socialId) {
49 | case 0:
50 | setScore(ChatColor.AQUA + "twitter.com/DerBanko", 3);
51 | break;
52 | case 1:
53 | setScore(ChatColor.DARK_PURPLE + "twitch.tv/DerBanko", 3);
54 | break;
55 | case 2:
56 | setScore(ChatColor.DARK_RED + "youtube.com/DerBanko", 3);
57 | break;
58 | }
59 |
60 | socialId++;
61 |
62 | if(socialId >= 3) {
63 | socialId = 0;
64 | }
65 |
66 | }
67 | }.runTaskTimer(Main.getInstance(), 20, 20);
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/timer/Timer.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.timer;
2 |
3 | import net.md_5.bungee.api.ChatMessageType;
4 | import net.md_5.bungee.api.chat.TextComponent;
5 | import org.bukkit.Bukkit;
6 | import org.bukkit.ChatColor;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.scheduler.BukkitRunnable;
9 | import tv.banko.tutorialreloaded.Main;
10 | import tv.banko.tutorialreloaded.utils.Config;
11 |
12 | public class Timer {
13 |
14 | private boolean running; // true or false
15 | private int time;
16 |
17 | public Timer() {
18 | Config config = Main.getInstance().getConfiguration();
19 |
20 | this.running = false;
21 |
22 | if (config.getConfig().contains("timer.time")) {
23 | this.time = config.getConfig().getInt("timer.time");
24 | } else {
25 | this.time = 0;
26 | }
27 |
28 | run();
29 | }
30 |
31 | public boolean isRunning() {
32 | return running;
33 | }
34 |
35 | public void setRunning(boolean running) {
36 | this.running = running;
37 | }
38 |
39 | public int getTime() {
40 | return time;
41 | }
42 |
43 | public void setTime(int time) {
44 | this.time = time;
45 | }
46 |
47 | public void sendActionBar() {
48 | for (Player player : Bukkit.getOnlinePlayers()) {
49 |
50 | if (!isRunning()) {
51 | player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.RED +
52 | "Timer ist pausiert"));
53 | continue;
54 | }
55 |
56 | player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.GOLD.toString() +
57 | ChatColor.BOLD + getTime()));
58 | }
59 | }
60 |
61 | public void save() {
62 | Config config = Main.getInstance().getConfiguration();
63 |
64 | config.getConfig().set("timer.time", time);
65 | }
66 |
67 | private void run() {
68 | new BukkitRunnable() {
69 | @Override
70 | public void run() {
71 |
72 | sendActionBar();
73 |
74 | if (!isRunning()) {
75 | return;
76 | }
77 |
78 | setTime(getTime() + 1);
79 | }
80 | }.runTaskTimer(Main.getInstance(), 20, 20);
81 | }
82 | }
83 |
84 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/utils/Base64.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.utils;
2 |
3 | import org.bukkit.inventory.ItemStack;
4 | import org.bukkit.util.io.BukkitObjectInputStream;
5 | import org.bukkit.util.io.BukkitObjectOutputStream;
6 | import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder;
7 |
8 | import java.io.ByteArrayInputStream;
9 | import java.io.ByteArrayOutputStream;
10 | import java.io.IOException;
11 |
12 | public class Base64 {
13 |
14 | public static ItemStack[] itemStackArrayFromBase64(String data) throws IOException {
15 | try {
16 | ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
17 | BukkitObjectInputStream dataInput = new BukkitObjectInputStream(inputStream);
18 | ItemStack[] items = new ItemStack[dataInput.readInt()];
19 |
20 | // Read the serialized inventory
21 | for (int i = 0; i < items.length; i++) {
22 | items[i] = (ItemStack) dataInput.readObject();
23 | }
24 |
25 | dataInput.close();
26 | return items;
27 | } catch (ClassNotFoundException e) {
28 | throw new IOException("Unable to decode class type.", e);
29 | }
30 | }
31 |
32 | public static String itemStackArrayToBase64(ItemStack[] items) throws IllegalStateException {
33 | try {
34 | ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
35 | BukkitObjectOutputStream dataOutput = new BukkitObjectOutputStream(outputStream);
36 |
37 | // Write the size of the inventory
38 | dataOutput.writeInt(items.length);
39 |
40 | // Save every element in the list
41 | for (ItemStack item : items) {
42 | dataOutput.writeObject(item);
43 | }
44 |
45 | // Serialize that array
46 | dataOutput.close();
47 | return Base64Coder.encodeLines(outputStream.toByteArray());
48 | } catch (Exception e) {
49 | throw new IllegalStateException("Unable to save item stacks.", e);
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/tv/banko/tutorialreloaded/utils/Config.java:
--------------------------------------------------------------------------------
1 | package tv.banko.tutorialreloaded.utils;
2 |
3 | import org.bukkit.configuration.file.YamlConfiguration;
4 |
5 | import java.io.File;
6 | import java.io.IOException;
7 |
8 | public class Config {
9 |
10 | private final File file;
11 | private final YamlConfiguration config;
12 |
13 | public Config() {
14 | File dir = new File("./plugins/TutorialReloaded/");
15 |
16 | if (!dir.exists()) {
17 | dir.mkdirs();
18 | }
19 |
20 | this.file = new File(dir, "config.yml");
21 |
22 | if (!file.exists()) {
23 | try {
24 | file.createNewFile();
25 | } catch (IOException e) {
26 | e.printStackTrace();
27 | }
28 | }
29 |
30 | this.config = YamlConfiguration.loadConfiguration(file);
31 | }
32 |
33 | public File getFile() {
34 | return file;
35 | }
36 |
37 | public YamlConfiguration getConfig() {
38 | return config;
39 | }
40 |
41 | public void save() {
42 | try {
43 | config.save(file);
44 | } catch (IOException e) {
45 | e.printStackTrace();
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/main/resources/plugin.yml:
--------------------------------------------------------------------------------
1 | name: TutorialReloaded
2 | version: ${project.version}
3 | main: tv.banko.tutorialreloaded.Main
4 | api-version: 1.16
5 | authors: [ DerBanko, Chat ]
6 | description: Coding Tutorial Live on Twitch
7 | website: https://twitch.tv/DerBanko
8 |
9 | commands:
10 | timer:
11 | permission: tutorialreloaded.command.timer
12 | backpack:
13 | aliases: [ bp ]
--------------------------------------------------------------------------------