Add BauSystem module

Fix ci java version
Fix LinkageProcessor
This commit is contained in:
2024-08-05 13:28:50 +02:00
parent 41d31e6c9c
commit 3366a30b0c
526 changed files with 43550 additions and 149479 deletions
@@ -0,0 +1,51 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils.bossbar;
import de.steamwar.bausystem.region.Region;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarFlag;
import org.bukkit.boss.BarStyle;
public interface BauSystemBossbar {
String getTitle();
void setTitle(String title);
double getProgress();
void setProgress(double progress);
BarColor getColor();
void setColor(BarColor color);
BarStyle getStyle();
void setStyle(BarStyle style);
boolean hasFlag(BarFlag flag);
void addFlag(BarFlag flag);
void removeFlag(BarFlag flag);
boolean isVisible();
void setVisible(boolean visible);
Region getRegion();
void cleanup();
}
@@ -0,0 +1,96 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils.bossbar;
import de.steamwar.bausystem.region.Region;
import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
import java.util.Map;
@Linked
public class BossBarService implements Listener {
public static BossBarService instance;
public BossBarService() {
instance = this;
}
private final Map<Player, Map<Region, Map<String, BauSystemBossbar>>> playerBossBars = new HashMap<>();
public synchronized BauSystemBossbar get(Player player, Region region, String key) {
return playerBossBars.computeIfAbsent(player, p -> new HashMap<>())
.computeIfAbsent(region, r -> new HashMap<>())
.computeIfAbsent(key, k -> {
BossBar bossBar = Bukkit.createBossBar("", BarColor.WHITE, BarStyle.SOLID);
bossBar.addPlayer(player);
if (region.isGlobal()) {
return new GlobalBossbar(bossBar);
} else {
return new RegionedBossbar(bossBar, region, player);
}
});
}
public synchronized void removeAll(Player player, String key) {
Map<Region, Map<String, BauSystemBossbar>> regionMap = playerBossBars.get(player);
if (regionMap == null) return;
for (Map<String, BauSystemBossbar> bossBarMap : regionMap.values()) {
BauSystemBossbar bossBar = bossBarMap.remove(key);
if (bossBar == null) continue;
bossBar.cleanup();
}
}
public synchronized void removeAll(Player player) {
Map<Region, Map<String, BauSystemBossbar>> regionMap = playerBossBars.remove(player);
if (regionMap == null) return;
for (Map<String, BauSystemBossbar> bossBarMap : regionMap.values()) {
for (BauSystemBossbar bossBar : bossBarMap.values()) {
bossBar.cleanup();
}
}
}
public synchronized void remove(Player player, Region region, String key) {
Map<Region, Map<String, BauSystemBossbar>> regionMap = playerBossBars.get(player);
if (regionMap == null) return;
Map<String, BauSystemBossbar> bossBarMap = regionMap.get(region);
if (bossBarMap == null) return;
BauSystemBossbar bossBar = bossBarMap.remove(key);
if (bossBar == null) return;
bossBar.cleanup();
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void onPlayerQuit(PlayerQuitEvent event) {
removeAll(event.getPlayer());
}
}
@@ -0,0 +1,112 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils.bossbar;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.region.Region;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarFlag;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
public class GlobalBossbar implements BauSystemBossbar {
private BossBar bossBar;
public GlobalBossbar(BossBar bossBar) {
this.bossBar = bossBar;
}
@Override
public String getTitle() {
return bossBar.getTitle();
}
@Override
public void setTitle(String title) {
bossBar.setTitle(title);
}
@Override
public double getProgress() {
return bossBar.getProgress();
}
@Override
public void setProgress(double progress) {
bossBar.setProgress(progress);
}
@Override
public BarColor getColor() {
return bossBar.getColor();
}
@Override
public void setColor(BarColor color) {
bossBar.setColor(color);
}
@Override
public BarStyle getStyle() {
return bossBar.getStyle();
}
@Override
public void setStyle(BarStyle style) {
bossBar.setStyle(style);
}
@Override
public boolean hasFlag(BarFlag flag) {
return bossBar.hasFlag(flag);
}
@Override
public void addFlag(BarFlag flag) {
bossBar.addFlag(flag);
}
@Override
public void removeFlag(BarFlag flag) {
bossBar.removeFlag(flag);
}
@Override
public boolean isVisible() {
return bossBar.isVisible();
}
@Override
public void setVisible(boolean visible) {
bossBar.setVisible(visible);
}
@Override
public Region getRegion() {
return GlobalRegion.getInstance();
}
@Override
public void cleanup() {
bossBar.removeAll();
bossBar = null;
}
}
@@ -0,0 +1,148 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils.bossbar;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import org.bukkit.Bukkit;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarFlag;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class RegionedBossbar implements BauSystemBossbar, Listener {
private BossBar bossBar;
private Region region;
private Player player;
public RegionedBossbar(BossBar bossBar, Region region, Player player) {
this.bossBar = bossBar;
this.region = region;
this.player = player;
Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance());
}
@Override
public String getTitle() {
return bossBar.getTitle();
}
@Override
public void setTitle(String title) {
bossBar.setTitle(title);
}
@Override
public double getProgress() {
return bossBar.getProgress();
}
@Override
public void setProgress(double progress) {
bossBar.setProgress(progress);
}
@Override
public BarColor getColor() {
return bossBar.getColor();
}
@Override
public void setColor(BarColor color) {
bossBar.setColor(color);
}
@Override
public BarStyle getStyle() {
return bossBar.getStyle();
}
@Override
public void setStyle(BarStyle style) {
bossBar.setStyle(style);
}
@Override
public boolean hasFlag(BarFlag flag) {
return bossBar.hasFlag(flag);
}
@Override
public void addFlag(BarFlag flag) {
bossBar.addFlag(flag);
}
@Override
public void removeFlag(BarFlag flag) {
bossBar.removeFlag(flag);
}
@Override
public boolean isVisible() {
return bossBar.isVisible();
}
@Override
public void setVisible(boolean visible) {
bossBar.setVisible(visible);
}
@Override
public Region getRegion() {
return region;
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (event.getPlayer() != player) return;
if (region.inRegion(event.getTo(), RegionType.NORMAL, RegionExtensionType.NORMAL)) {
bossBar.addPlayer(player);
} else {
bossBar.removePlayer(player);
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
if (event.getPlayer() != player) return;
cleanup();
}
@Override
public void cleanup() {
if (bossBar != null) {
bossBar.removeAll();
bossBar = null;
}
region = null;
player = null;
PlayerMoveEvent.getHandlerList().unregister(this);
PlayerQuitEvent.getHandlerList().unregister(this);
}
}