Commits vergleichen
1 Commits
master
...
ScoreBoard
Autor | SHA1 | Datum | |
---|---|---|---|
983b1d89c5 |
@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 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.features.scoreboard;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class Scoreboard {
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
private String displayName;
|
||||||
|
private final DisplaySlot displaySlot;
|
||||||
|
private UpdateMode updateMode;
|
||||||
|
private long lastChanged;
|
||||||
|
private long lastSended;
|
||||||
|
|
||||||
|
protected Scoreboard(final String name, final String displayName, final DisplaySlot displaySlot) {
|
||||||
|
this.name = name;
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.displaySlot = displaySlot;
|
||||||
|
this.updateMode = UpdateMode.INTELLIGENT;
|
||||||
|
this.lastChanged = System.currentTimeMillis();
|
||||||
|
this.lastSended = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Scoreboard(final String name, final String displayName, final DisplaySlot displaySlot, final UpdateMode updateMode) {
|
||||||
|
this.name = name;
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.displaySlot = displaySlot;
|
||||||
|
this.updateMode = updateMode;
|
||||||
|
this.lastChanged = System.currentTimeMillis();
|
||||||
|
this.lastSended = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean hasChanged() {
|
||||||
|
return this.lastSended < this.lastChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sendBoard(final Player p) {
|
||||||
|
if (this.needsSend()) {
|
||||||
|
this.internalSendBoard(p);
|
||||||
|
this.lastSended = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateLine(final String name, final String displayName) {
|
||||||
|
this.internalUpdateLine(name, displayName);
|
||||||
|
this.lastChanged = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected abstract void internalUpdateLine(final String name, final String displayName);
|
||||||
|
|
||||||
|
protected abstract void internalSendBoard(final Player p);
|
||||||
|
|
||||||
|
private boolean needsSend() {
|
||||||
|
switch (this.updateMode) {
|
||||||
|
case MANUAL:
|
||||||
|
return false;
|
||||||
|
case AUTOMATIC:
|
||||||
|
return true;
|
||||||
|
case INTELLIGENT:
|
||||||
|
default:
|
||||||
|
return this.hasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum UpdateMode {
|
||||||
|
|
||||||
|
AUTOMATIC,
|
||||||
|
INTELLIGENT,
|
||||||
|
MANUAL
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 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.features.scoreboard;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.features.scoreboard.implementations.BelownameBoard;
|
||||||
|
import de.steamwar.bausystem.features.scoreboard.implementations.PlayerlistBoard;
|
||||||
|
import de.steamwar.bausystem.features.scoreboard.implementations.SidebarBoard;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
|
||||||
|
|
||||||
|
public class ScoreboardBundle {
|
||||||
|
|
||||||
|
private final List<Scoreboard> scoreboards;
|
||||||
|
private final Player p;
|
||||||
|
|
||||||
|
public ScoreboardBundle(final Player p) {
|
||||||
|
this.p = p;
|
||||||
|
this.scoreboards = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerBoard(final Scoreboard scoreboard) {
|
||||||
|
this.scoreboards.add(scoreboard);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Scoreboard registerNewBoard(final String name, final DisplaySlot displaySlot) {
|
||||||
|
final Scoreboard scoreboard;
|
||||||
|
switch (displaySlot) {
|
||||||
|
case BELOW_NAME:
|
||||||
|
scoreboard = new BelownameBoard(name);
|
||||||
|
break;
|
||||||
|
case PLAYER_LIST:
|
||||||
|
scoreboard = new PlayerlistBoard(name);
|
||||||
|
break;
|
||||||
|
case SIDEBAR:
|
||||||
|
default:
|
||||||
|
scoreboard = new SidebarBoard(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.registerBoard(scoreboard);
|
||||||
|
return scoreboard;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Scoreboard getBoard(final String name) {
|
||||||
|
return this.scoreboards.stream().filter(scoreboard -> scoreboard.getName().equals(name)).findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Scoreboard getBoard(final String name, final DisplaySlot displaySlot) {
|
||||||
|
return this.scoreboards.stream().filter(scoreboard -> scoreboard.getName().equals(name)).filter(scoreboard -> scoreboard.getDisplaySlot() == displaySlot).findFirst().orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Scoreboard getOrRegisterBoard(final String name, final DisplaySlot displaySlot) {
|
||||||
|
return this.scoreboards.stream().filter(scoreboard -> scoreboard.getName().equals(name)).filter(scoreboard -> scoreboard.getDisplaySlot() == displaySlot).findFirst().orElse(this.registerNewBoard(name, displaySlot));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 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.features.scoreboard;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ScoreboardManager {
|
||||||
|
|
||||||
|
private final List<ScoreboardBundle> scoreboardBundles = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 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.features.scoreboard.implementations;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.features.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
|
||||||
|
|
||||||
|
public class BelownameBoard extends Scoreboard {
|
||||||
|
|
||||||
|
public BelownameBoard(String name, String displayName) {
|
||||||
|
super(name, displayName, DisplaySlot.BELOW_NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BelownameBoard(String name, String displayName, UpdateMode updateMode) {
|
||||||
|
super(name, displayName, DisplaySlot.BELOW_NAME, updateMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BelownameBoard(String name) {
|
||||||
|
super(name, name, DisplaySlot.BELOW_NAME);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 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.features.scoreboard.implementations;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.features.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
|
||||||
|
|
||||||
|
public class PlayerlistBoard extends Scoreboard {
|
||||||
|
|
||||||
|
public PlayerlistBoard(String name, String displayName) {
|
||||||
|
super(name, displayName, DisplaySlot.PLAYER_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerlistBoard(String name, String displayName, UpdateMode updateMode) {
|
||||||
|
super(name, displayName, DisplaySlot.BELOW_NAME, updateMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerlistBoard(String name) {
|
||||||
|
super(name, name, DisplaySlot.PLAYER_LIST);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 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.features.scoreboard.implementations;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.features.scoreboard.Scoreboard;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
|
||||||
|
|
||||||
|
public class SidebarBoard extends Scoreboard {
|
||||||
|
|
||||||
|
private final Map<String, String> data = new HashMap<>();
|
||||||
|
|
||||||
|
public SidebarBoard(String name, String displayName) {
|
||||||
|
super(name, displayName, DisplaySlot.SIDEBAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SidebarBoard(String name, String displayName, UpdateMode updateMode) {
|
||||||
|
super(name, displayName, DisplaySlot.BELOW_NAME, updateMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SidebarBoard(String name) {
|
||||||
|
super(name, name, DisplaySlot.SIDEBAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void internalUpdateLine(String name, String displayName) {
|
||||||
|
this.data.put(name, displayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void internalSendBoard(Player p) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren