Merge remote-tracking branch 'origin/master'
Dieser Commit ist enthalten in:
Commit
7790b13340
@ -24,6 +24,7 @@ import de.steamwar.bausystem.Permission;
|
|||||||
import de.steamwar.bausystem.config.BauServer;
|
import de.steamwar.bausystem.config.BauServer;
|
||||||
import de.steamwar.bausystem.linkage.LinkageType;
|
import de.steamwar.bausystem.linkage.LinkageType;
|
||||||
import de.steamwar.bausystem.linkage.Linked;
|
import de.steamwar.bausystem.linkage.Linked;
|
||||||
|
import de.steamwar.bausystem.linkage.LinkedInstance;
|
||||||
import de.steamwar.command.SWCommand;
|
import de.steamwar.command.SWCommand;
|
||||||
import de.steamwar.command.SWCommandUtils;
|
import de.steamwar.command.SWCommandUtils;
|
||||||
import de.steamwar.command.TypeMapper;
|
import de.steamwar.command.TypeMapper;
|
||||||
@ -36,6 +37,9 @@ import java.util.stream.Collectors;
|
|||||||
@Linked(LinkageType.COMMAND)
|
@Linked(LinkageType.COMMAND)
|
||||||
public class BauCommand extends SWCommand {
|
public class BauCommand extends SWCommand {
|
||||||
|
|
||||||
|
@LinkedInstance(BauServer.class)
|
||||||
|
private BauServer bauServer;
|
||||||
|
|
||||||
public BauCommand() {
|
public BauCommand() {
|
||||||
super("bau", "b", "gs");
|
super("bau", "b", "gs");
|
||||||
}
|
}
|
||||||
@ -83,7 +87,7 @@ public class BauCommand extends SWCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BauweltMember target = BauweltMember.getBauMember(BauServer.getInstance().getOwnerID(), id.getId());
|
BauweltMember target = BauweltMember.getBauMember(bauServer.getOwnerID(), id.getId());
|
||||||
Permission.WORLDEDIT.toggle(p, target);
|
Permission.WORLDEDIT.toggle(p, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +96,7 @@ public class BauCommand extends SWCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BauweltMember target = BauweltMember.getBauMember(BauServer.getInstance().getOwnerID(), id.getId());
|
BauweltMember target = BauweltMember.getBauMember(bauServer.getOwnerID(), id.getId());
|
||||||
Permission.WORLD.toggle(p, target);
|
Permission.WORLD.toggle(p, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +106,7 @@ public class BauCommand extends SWCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
BauweltMember target = BauweltMember.getBauMember(BauServer.getInstance().getOwnerID(), id.getId());
|
BauweltMember target = BauweltMember.getBauMember(bauServer.getOwnerID(), id.getId());
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
p.sendMessage(BauSystem.PREFIX + "§cDer Spieler ist kein Mitglied deiner Welt!");
|
p.sendMessage(BauSystem.PREFIX + "§cDer Spieler ist kein Mitglied deiner Welt!");
|
||||||
return true;
|
return true;
|
||||||
@ -112,7 +116,7 @@ public class BauCommand extends SWCommand {
|
|||||||
|
|
||||||
|
|
||||||
private boolean permissionCheck(Player p) {
|
private boolean permissionCheck(Player p) {
|
||||||
if (!BauServer.getInstance().getOwner().equals(p.getUniqueId())) {
|
if (!bauServer.getOwner().equals(p.getUniqueId())) {
|
||||||
p.sendMessage(BauSystem.PREFIX + "§cDies ist nicht deine Welt!");
|
p.sendMessage(BauSystem.PREFIX + "§cDies ist nicht deine Welt!");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@ -123,7 +127,7 @@ public class BauCommand extends SWCommand {
|
|||||||
|
|
||||||
@ClassMapper(value = SteamwarUser.class, local = true)
|
@ClassMapper(value = SteamwarUser.class, local = true)
|
||||||
private TypeMapper<SteamwarUser> steamwarUserTypeMapper() {
|
private TypeMapper<SteamwarUser> steamwarUserTypeMapper() {
|
||||||
return SWCommandUtils.createMapper(s -> BauweltMember.getMembers(BauServer.getInstance().getOwnerID())
|
return SWCommandUtils.createMapper(s -> BauweltMember.getMembers(bauServer.getOwnerID())
|
||||||
.stream()
|
.stream()
|
||||||
.map(m -> SteamwarUser.get(m.getMemberID()))
|
.map(m -> SteamwarUser.get(m.getMemberID()))
|
||||||
.filter(u -> u.getUserName().equals(s))
|
.filter(u -> u.getUserName().equals(s))
|
||||||
|
@ -29,7 +29,7 @@ import de.steamwar.bausystem.linkage.Linked;
|
|||||||
import de.steamwar.command.SWCommand;
|
import de.steamwar.command.SWCommand;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@Linked(LinkageType.LISTENER)
|
@Linked(LinkageType.COMMAND)
|
||||||
public class SimulatorCommand extends SWCommand {
|
public class SimulatorCommand extends SWCommand {
|
||||||
|
|
||||||
public SimulatorCommand() {
|
public SimulatorCommand() {
|
||||||
|
@ -28,8 +28,6 @@ import de.steamwar.bausystem.linkage.Linked;
|
|||||||
import de.steamwar.command.SWCommand;
|
import de.steamwar.command.SWCommand;
|
||||||
import de.steamwar.command.SWCommandUtils;
|
import de.steamwar.command.SWCommandUtils;
|
||||||
import de.steamwar.command.TypeMapper;
|
import de.steamwar.command.TypeMapper;
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.Getter;
|
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -43,14 +41,10 @@ import java.util.List;
|
|||||||
@Linked(LinkageType.ENABLE_LINK)
|
@Linked(LinkageType.ENABLE_LINK)
|
||||||
public class TPSLimitCommand extends SWCommand implements Enable {
|
public class TPSLimitCommand extends SWCommand implements Enable {
|
||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
|
||||||
private static TPSLimitCommand instance = null;
|
|
||||||
|
|
||||||
private final List<String> tabCompletions = new ArrayList<>(Arrays.asList("0,5", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"));
|
private final List<String> tabCompletions = new ArrayList<>(Arrays.asList("0,5", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"));
|
||||||
|
|
||||||
public TPSLimitCommand() {
|
public TPSLimitCommand() {
|
||||||
super("tpslimit");
|
super("tpslimit");
|
||||||
instance = this;
|
|
||||||
if (TPSWarpUtils.isWarpAllowed()) {
|
if (TPSWarpUtils.isWarpAllowed()) {
|
||||||
for (int i = 20; i <= 60; i += 5) {
|
for (int i = 20; i <= 60; i += 5) {
|
||||||
tabCompletions.add(i + "");
|
tabCompletions.add(i + "");
|
||||||
|
@ -27,6 +27,7 @@ import java.io.BufferedReader;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@ -35,10 +36,12 @@ import java.util.logging.Level;
|
|||||||
public class LinkageUtils {
|
public class LinkageUtils {
|
||||||
|
|
||||||
private Map<Class<?>, Object> objectMap = new HashMap<>();
|
private Map<Class<?>, Object> objectMap = new HashMap<>();
|
||||||
|
private Set<Field> fieldsToLink = new HashSet<>();
|
||||||
|
|
||||||
public void link() {
|
public void link() {
|
||||||
internalLinkOrUnlink(false, Linked.class);
|
internalLinkOrUnlink(false, Linked.class);
|
||||||
internalLinkOrUnlink(false, Linked.Linkages.class);
|
internalLinkOrUnlink(false, Linked.Linkages.class);
|
||||||
|
internalLinkFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unlink() {
|
public void unlink() {
|
||||||
@ -64,6 +67,23 @@ public class LinkageUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void internalLinkFields() {
|
||||||
|
for (Field field : fieldsToLink) {
|
||||||
|
LinkedInstance linkedInstance = field.getDeclaredAnnotation(LinkedInstance.class);
|
||||||
|
if (linkedInstance == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Object object = objectMap.getOrDefault(linkedInstance.value(), null);
|
||||||
|
Object source = objectMap.getOrDefault(field.getDeclaringClass(), null);
|
||||||
|
try {
|
||||||
|
field.setAccessible(true);
|
||||||
|
field.set(source, object);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
// Ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void linkOrUnlink(Class<?> clazz, boolean unlink) {
|
private void linkOrUnlink(Class<?> clazz, boolean unlink) {
|
||||||
Linked[] linkages = clazz.getDeclaredAnnotationsByType(Linked.class);
|
Linked[] linkages = clazz.getDeclaredAnnotationsByType(Linked.class);
|
||||||
if (linkages.length == 0) {
|
if (linkages.length == 0) {
|
||||||
@ -87,8 +107,27 @@ public class LinkageUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
linkageTypeList.sort(Comparator.comparingInt(LinkageType::getOrder));
|
linkageTypeList.sort(Comparator.comparingInt(LinkageType::getOrder));
|
||||||
Object object = objectMap.computeIfAbsent(clazz, LinkageUtils::constructInstance);
|
if (unlink) {
|
||||||
linkageTypeList.forEach(linkageType -> linkageType.getLinkageConsumer().accept(object));
|
Object object = objectMap.remove(clazz);
|
||||||
|
if (object == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
linkageTypeList.forEach(linkageType -> linkageType.getLinkageConsumer().accept(object));
|
||||||
|
} else {
|
||||||
|
Object object = objectMap.computeIfAbsent(clazz, LinkageUtils::constructInstance);
|
||||||
|
linkageTypeList.forEach(linkageType -> linkageType.getLinkageConsumer().accept(object));
|
||||||
|
|
||||||
|
for (Field field : clazz.getDeclaredFields()) {
|
||||||
|
LinkedInstance linkedInstance = field.getDeclaredAnnotation(LinkedInstance.class);
|
||||||
|
if (linkedInstance == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!field.getType().isAssignableFrom(linkedInstance.value())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fieldsToLink.add(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object constructInstance(Class<?> clazz) {
|
private Object constructInstance(Class<?> clazz) {
|
||||||
|
31
BauSystem_Main/src/de/steamwar/bausystem/linkage/LinkedInstance.java
Normale Datei
31
BauSystem_Main/src/de/steamwar/bausystem/linkage/LinkedInstance.java
Normale Datei
@ -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.linkage;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target({ElementType.FIELD})
|
||||||
|
public @interface LinkedInstance {
|
||||||
|
Class<?> value();
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* 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.utils;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.config.ColorConfig;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ChatMessageBuilder {
|
||||||
|
|
||||||
|
private List<StringBuilder> messages = new ArrayList<>();
|
||||||
|
private String[] strings = new String[0];
|
||||||
|
|
||||||
|
public ChatMessageBuilder() {
|
||||||
|
messages.add(new StringBuilder());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder highlight(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(ColorConfig.HIGHLIGHT).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder base(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(ColorConfig.BASE).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder other(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(ColorConfig.OTHER).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder enable(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(ColorConfig.ENABLE).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder disable(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(ColorConfig.DISABLE).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder error(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(ColorConfig.ERROR).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder append(String s) {
|
||||||
|
messages.get(messages.size() - 1).append(s);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder newLine() {
|
||||||
|
messages.add(new StringBuilder());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChatMessageBuilder finish() {
|
||||||
|
strings = messages.stream().map(StringBuilder::toString).toArray(String[]::new);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void send(Player player) {
|
||||||
|
for (String message : strings) {
|
||||||
|
player.sendMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren