Compare commits
No commits in common. "master" and "v1.0.1" have entirely different histories.
9 changed files with 71 additions and 51 deletions
2
ButtonProcessor/pom.xml
Normal file → Executable file
2
ButtonProcessor/pom.xml
Normal file → Executable file
|
@ -11,7 +11,7 @@
|
|||
<dependency>
|
||||
<groupId>org.yaml</groupId>
|
||||
<artifactId>snakeyaml</artifactId>
|
||||
<version>1.32</version>
|
||||
<version>1.21</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -119,9 +119,13 @@
|
|||
<id>ess-repo</id>
|
||||
<url>https://ci.ender.zone/plugin/repository/everything/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>Votifier</id>
|
||||
<url>https://dl.bintray.com/nuvotifier/maven/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>Multiverse-Core</id>
|
||||
<url>https://repo.onarandombox.com/content/groups/public/</url>
|
||||
<url>http://repo.onarandombox.com/content/repositories/multiverse/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>minecraft-repo</id>
|
||||
|
@ -132,7 +136,7 @@
|
|||
<dependency>
|
||||
<groupId>org.reflections</groupId>
|
||||
<artifactId>reflections</artifactId>
|
||||
<version>0.10.2</version>
|
||||
<version>0.9.10</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -157,12 +161,12 @@
|
|||
<dependency>
|
||||
<groupId>org.javassist</groupId>
|
||||
<artifactId>javassist</artifactId>
|
||||
<version>3.28.0-GA</version>
|
||||
<version>3.20.0-GA</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>4.2.0</version>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.TBMCPlugins.ChromaCore</groupId>
|
||||
|
@ -176,23 +180,22 @@
|
|||
<version>2.17.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/com.github.NuVotifier.NuVotifier/nuvotifier-bukkit -->
|
||||
<dependency>
|
||||
<groupId>com.github.NuVotifier.NuVotifier</groupId>
|
||||
<artifactId>nuvotifier-bukkit</artifactId>
|
||||
<version>v2.7.1</version>
|
||||
<groupId>com.vexsoftware</groupId>
|
||||
<artifactId>nuvotifier-universal</artifactId>
|
||||
<version>2.3.4</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.onarandombox.multiversecore</groupId>
|
||||
<artifactId>Multiverse-Core</artifactId>
|
||||
<version>4.3.1</version>
|
||||
<version>4.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>me.lucko</groupId>
|
||||
<artifactId>commodore</artifactId>
|
||||
<version>1.11</version>
|
||||
<version>1.8</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package buttondevteam.core;
|
||||
|
||||
import buttondevteam.core.component.towny.TownyComponent;
|
||||
import buttondevteam.lib.*;
|
||||
import buttondevteam.lib.architecture.ButtonPlugin;
|
||||
import buttondevteam.lib.chat.ChatMessage;
|
||||
|
@ -35,6 +36,7 @@ public class PlayerListener implements Listener {
|
|||
player.PlayerName.set(p.getName());
|
||||
MainPlugin.Instance.getLogger().info("Player name saved: " + player.PlayerName.get());
|
||||
} else if (!p.getName().equals(pname)) {
|
||||
TownyComponent.renameInTowny(pname, p.getName());
|
||||
MainPlugin.Instance.getLogger().info(pname + " renamed to " + p.getName());
|
||||
player.PlayerName.set(p.getName());
|
||||
}
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
package buttondevteam.core.component.towny;
|
||||
|
||||
import buttondevteam.core.ComponentManager;
|
||||
import buttondevteam.core.MainPlugin;
|
||||
import buttondevteam.lib.TBMCCoreAPI;
|
||||
import buttondevteam.lib.architecture.Component;
|
||||
import com.palmergames.bukkit.towny.TownyUniverse;
|
||||
import com.palmergames.bukkit.towny.exceptions.AlreadyRegisteredException;
|
||||
import com.palmergames.bukkit.towny.exceptions.NotRegisteredException;
|
||||
import com.palmergames.bukkit.towny.object.Resident;
|
||||
|
||||
/**
|
||||
* Provides a command to remove invalid Towny residents.
|
||||
* Automatically renames Towny players if they changed their Minecraft name
|
||||
*/
|
||||
public class TownyComponent extends Component<MainPlugin> {
|
||||
@Override
|
||||
|
@ -15,4 +21,35 @@ public class TownyComponent extends Component<MainPlugin> {
|
|||
@Override
|
||||
protected void disable() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Only renames the resident if this component is enabled. Used to handle name changes.
|
||||
*
|
||||
* @param oldName The player's old name as known by us
|
||||
* @param newName The player's new name
|
||||
*/
|
||||
public static void renameInTowny(String oldName, String newName) {
|
||||
var component = ComponentManager.getIfEnabled(TownyComponent.class);
|
||||
if (component == null)
|
||||
return;
|
||||
component.log("Renaming " + oldName + " in Towny to " + newName);
|
||||
TownyUniverse tu = TownyUniverse.getInstance();
|
||||
try {
|
||||
Resident resident = tu.getDataSource().getResident(oldName);
|
||||
if (resident == null) {
|
||||
component.logWarn("Resident not found - couldn't rename in Towny.");
|
||||
TBMCCoreAPI.sendDebugMessage("Resident not found - couldn't rename in Towny.");
|
||||
} else if (tu.getDataSource().hasResident(newName)) {
|
||||
component.logWarn("Target resident name is already in use.");
|
||||
TBMCCoreAPI.sendDebugMessage("Target resident name is already in use. (" + oldName + " -> " + newName + ")");
|
||||
} else {
|
||||
tu.getDataSource().renamePlayer(resident, newName); //Fixed in Towny 0.91.1.2
|
||||
component.log("Renaming done.");
|
||||
}
|
||||
} catch (AlreadyRegisteredException e) {
|
||||
TBMCCoreAPI.SendException("Failed to rename resident, there's already one with this name.", e, component);
|
||||
} catch (NotRegisteredException e) {
|
||||
TBMCCoreAPI.SendException("Failed to rename resident, the resident isn't registered.", e, component);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import org.yaml.snakeyaml.representer.Representer;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.HashMap;
|
||||
|
||||
|
@ -175,7 +174,7 @@ public class CommentedConfiguration extends YamlConfiguration {
|
|||
while (newContents.toString().startsWith(" " + System.getProperty("line.separator"))) {
|
||||
newContents = new StringBuilder(newContents.toString().replaceFirst(" " + System.getProperty("line.separator"), ""));
|
||||
}
|
||||
Files.write(file.toPath(), newContents.toString().getBytes(StandardCharsets.UTF_8));
|
||||
Files.write(file.toPath(), newContents.toString().getBytes());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -201,13 +201,6 @@ public final class IHaveConfig {
|
|||
val ms = obj.getClass().getDeclaredMethods();
|
||||
for (val m : ms) {
|
||||
if (!m.getReturnType().getName().equals(ConfigData.class.getName())) continue;
|
||||
final String mName;
|
||||
{
|
||||
var name = m.getName();
|
||||
var ind = name.lastIndexOf('$');
|
||||
if (ind == -1) mName = name;
|
||||
else mName = name.substring(ind + 1);
|
||||
}
|
||||
try {
|
||||
m.setAccessible(true);
|
||||
List<ConfigData<?>> configList;
|
||||
|
@ -220,7 +213,7 @@ public final class IHaveConfig {
|
|||
try {
|
||||
return (ConfigData<?>) m.invoke(obj, kv.getValue());
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
String msg = "Failed to pregenerate " + mName + " for " + obj + " using config " + kv.getKey() + "!";
|
||||
String msg = "Failed to pregenerate " + m.getName() + " for " + obj + " using config " + kv.getKey() + "!";
|
||||
if (obj instanceof Component<?>)
|
||||
TBMCCoreAPI.SendException(msg, e, (Component<?>) obj);
|
||||
else if (obj instanceof JavaPlugin)
|
||||
|
@ -232,18 +225,18 @@ public final class IHaveConfig {
|
|||
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
} else {
|
||||
if (TBMCCoreAPI.IsTestServer())
|
||||
MainPlugin.Instance.getLogger().warning("Method " + mName + " returns a config but its parameters are unknown: " + Arrays.toString(m.getParameterTypes()));
|
||||
MainPlugin.Instance.getLogger().warning("Method " + m.getName() + " returns a config but its parameters are unknown: " + Arrays.toString(m.getParameterTypes()));
|
||||
continue;
|
||||
}
|
||||
for (val c : configList) {
|
||||
if (c.getPath().length() == 0)
|
||||
c.setPath(mName);
|
||||
else if (!c.getPath().equals(mName))
|
||||
MainPlugin.Instance.getLogger().warning("Config name does not match: " + c.getPath() + " instead of " + mName);
|
||||
c.setPath(m.getName());
|
||||
else if (!c.getPath().equals(m.getName()))
|
||||
MainPlugin.Instance.getLogger().warning("Config name does not match: " + c.getPath() + " instead of " + m.getName());
|
||||
c.get(); //Saves the default value if needed - also checks validity
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String msg = "Failed to pregenerate " + mName + " for " + obj + "!";
|
||||
String msg = "Failed to pregenerate " + m.getName() + " for " + obj + "!";
|
||||
if (obj instanceof Component<?>)
|
||||
TBMCCoreAPI.SendException(msg, e, (Component<?>) obj);
|
||||
else if (obj instanceof JavaPlugin)
|
||||
|
|
|
@ -6,25 +6,15 @@ import lombok.RequiredArgsConstructor;
|
|||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public enum Color implements TellrawSerializableEnum {
|
||||
Black("black", 0, 0, 0),
|
||||
DarkBlue("dark_blue", 0, 0, 170),
|
||||
DarkGreen("dark_green", 0, 170, 0),
|
||||
DarkAqua("dark_aqua", 0, 170, 170),
|
||||
DarkRed("dark_red", 170, 0, 0),
|
||||
DarkPurple("dark_purple", 0, 170, 0),
|
||||
Gold("gold", 255, 170,0),
|
||||
Gray("gray", 170, 170, 170),
|
||||
DarkGray("dark_gray", 85, 85, 85),
|
||||
Blue("blue", 85, 85, 255),
|
||||
Green("green", 85, 255, 85),
|
||||
Aqua("aqua", 85, 255, 255),
|
||||
Red("red", 255, 85,85),
|
||||
LightPurple("light_purple", 255, 85, 255),
|
||||
Yellow("yellow", 255, 255, 85),
|
||||
White("white", 255, 255, 255);
|
||||
Black("black", 0, 0, 0), DarkBlue("dark_blue", 0, 0, 170), DarkGreen("dark_green", 0, 170, 0), DarkAqua("dark_aqua",
|
||||
0, 170, 170), DarkRed("dark_red", 170, 0, 0), DarkPurple("dark_purple", 0, 170, 0), Gold("gold", 255, 170,
|
||||
0), Gray("gray", 170, 170, 170), DarkGray("dark_gray", 85, 85, 85), Blue("blue", 85, 85,
|
||||
255), Green("green", 85, 255, 85), Aqua("aqua", 85, 255, 255), Red("red", 255, 85,
|
||||
85), LightPurple("light_purple", 255, 85,
|
||||
255), Yellow("yellow", 255, 255, 85), White("white", 255, 255, 255);
|
||||
|
||||
private final String name;
|
||||
private final int red;
|
||||
private final int green;
|
||||
private final int blue;
|
||||
}
|
||||
}
|
|
@ -253,7 +253,7 @@ public abstract class Command2<TC extends ICommand2<TP>, TP extends Command2Send
|
|||
}
|
||||
val conv = paramConverters.get(cl);
|
||||
if (conv == null)
|
||||
throw new Exception("No suitable converter found for parameter type '" + cl.getCanonicalName() + "' for command '" + sd.method + "'");
|
||||
throw new Exception("No suitable converter found for parameter type '" + cl.getCanonicalName() + "' for command '" + sd.method.toString() + "'");
|
||||
val cparam = conv.converter.apply(param);
|
||||
if (cparam == null) {
|
||||
sender.sendMessage(conv.errormsg); //Param conversion failed - ex. plugin not found
|
||||
|
@ -355,7 +355,7 @@ public abstract class Command2<TC extends ICommand2<TP>, TP extends Command2Send
|
|||
if (ht.length > 0)
|
||||
ht[0] = "§6---- " + ht[0] + " ----";
|
||||
YamlConfiguration yc = YamlConfiguration.loadConfiguration(new InputStreamReader(str)); //Generated by ButtonProcessor
|
||||
val ccs = yc.getConfigurationSection(method.getDeclaringClass().getCanonicalName().replace('$', '.'));
|
||||
val ccs = yc.getConfigurationSection(method.getDeclaringClass().getCanonicalName());
|
||||
if (ccs != null) {
|
||||
val cs = ccs.getConfigurationSection(method.getName());
|
||||
if (cs != null) {
|
||||
|
@ -371,7 +371,7 @@ public abstract class Command2<TC extends ICommand2<TP>, TP extends Command2Send
|
|||
for (int j = 0; j < paramArray.length && j < parameters.length; j++)
|
||||
parameters[j] = paramArray[j];
|
||||
} else
|
||||
TBMCCoreAPI.SendException("Error while getting command data for " + method + "!", new Exception("Method '" + method + "' != " + mname + " or params is " + params), MainPlugin.Instance);
|
||||
TBMCCoreAPI.SendException("Error while getting command data for " + method + "!", new Exception("Method '" + method.toString() + "' != " + mname + " or params is " + params), MainPlugin.Instance);
|
||||
} else
|
||||
MainPlugin.Instance.getLogger().warning("Failed to get command data for " + method + " (cs is null)! Make sure to use 'clean install' when building the project.");
|
||||
} else
|
||||
|
|
|
@ -25,9 +25,6 @@ import java.util.function.Supplier;
|
|||
public abstract class ChromaGamerBase {
|
||||
private static final String TBMC_PLAYERS_DIR = "TBMC/players/";
|
||||
private static final ArrayList<Function<CommandSender, ? extends Optional<? extends ChromaGamerBase>>> senderConverters = new ArrayList<>();
|
||||
/**
|
||||
* Holds data per user class
|
||||
*/
|
||||
private static final HashMap<Class<? extends ChromaGamerBase>, StaticUserData<?>> staticDataMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
|
@ -59,7 +56,6 @@ public abstract class ChromaGamerBase {
|
|||
throw new RuntimeException("Class not registered as a user class! Use @UserClass or TBMCPlayerBase");
|
||||
var sud = new StaticUserData<T>(folderName);
|
||||
sud.getConstructors().put(cl, constructor);
|
||||
sud.getConstructors().put(userclass, constructor); // Alawys register abstract and prototype class (TBMCPlayerBase and TBMCPlayer)
|
||||
staticDataMap.put(userclass, sud);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue