Skip to content

Commit 5769beb

Browse files
committed
2 parents 50de36b + 3ebe3d7 commit 5769beb

File tree

23 files changed

+739
-455
lines changed

23 files changed

+739
-455
lines changed

Towny/pom.xml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<properties>
3333
<project.bukkitAPIVersion>1.19</project.bukkitAPIVersion>
3434
<skipTests>true</skipTests>
35-
<junit.version>6.0.2</junit.version>
35+
<junit.version>6.0.3</junit.version>
3636
</properties>
3737

3838
<scm>
@@ -222,6 +222,11 @@
222222
<version>4.98.0</version>
223223
<scope>test</scope>
224224
</dependency>
225+
<dependency>
226+
<groupId>fr.mrmicky</groupId>
227+
<artifactId>fastboard</artifactId>
228+
<version>2.1.5</version>
229+
</dependency>
225230
</dependencies>
226231

227232
<pluginRepositories>
@@ -350,6 +355,10 @@
350355
<pattern>solar.squares.pixelwidth</pattern>
351356
<shadedPattern>com.palmergames.bukkit.towny.libs.pixelwidth</shadedPattern>
352357
</relocation>
358+
<relocation>
359+
<pattern>fr.mrmicky.fastboard</pattern>
360+
<shadedPattern>com.palmergames.fastboard</shadedPattern>
361+
</relocation>
353362
</relocations>
354363
<filters>
355364
<filter>
@@ -394,7 +403,7 @@
394403
<plugin>
395404
<groupId>org.apache.maven.plugins</groupId>
396405
<artifactId>maven-surefire-plugin</artifactId>
397-
<version>3.5.4</version>
406+
<version>3.5.5</version>
398407
<configuration>
399408
<skipTests>${skipTests}</skipTests>
400409
</configuration>

Towny/src/main/java/com/palmergames/bukkit/towny/TownySettings.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,8 @@ public static NationLevel getNationLevel(int levelNumber) {
411411
}
412412

413413
public static NationLevel getNationLevel(Nation nation) {
414-
return getNationLevel(nation.getLevelNumber());
414+
int numResidents = getResidentCountForNationLevel(nation.getLevelNumber());
415+
return getNationLevel(numResidents);
415416
}
416417

417418
public static NationLevel getNationLevelWithModifier(int modifier) {
@@ -435,6 +436,21 @@ public static int getNationLevelFromGivenInt(int threshold) {
435436
return 0;
436437
}
437438

439+
/**
440+
* Gets the number of residents required to look up the NationLevel in the SortedMap.
441+
* @param level The number used to get the key from the keySet array.
442+
* @return the number of residents which will get us the correct TownLevel in the NationLevel SortedMap.
443+
*/
444+
public static int getResidentCountForNationLevel(int level) {
445+
Integer[] keys = configNationLevel.keySet().toArray(new Integer[] {});
446+
// keys is always ordered from biggest to lowest (despite what the javadocs say
447+
// about being sorted in Ascending order, this is not the case for a SortedMap.)
448+
// We have to get it from lowest to largest.
449+
Arrays.sort(keys);
450+
level = Math.min(level, keys.length);
451+
return keys[level];
452+
}
453+
438454
public static int getNationLevelMax() {
439455
return configNationLevel.size();
440456
}

Towny/src/main/java/com/palmergames/bukkit/towny/command/TownyAdminCommand.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ public class TownyAdminCommand extends BaseCommand implements CommandExecutor {
193193
"merge",
194194
"transfer",
195195
"forcemerge",
196-
"recheck"
196+
"recheck",
197+
"setnationlevel"
197198
);
198199
private static final List<String> adminNationSetTabCompletes = Stream.concat(NationCommand.nationSetTabCompletes.stream(),
199200
Stream.of("foundingdate")).collect(Collectors.toList());
@@ -587,6 +588,10 @@ else if (args.length == 6)
587588
.map(Town::getName)
588589
.collect(Collectors.toList()), args[4]);
589590
break;
591+
case "setnationlevel":
592+
if (args.length == 4)
593+
return NameUtil.filterByStart(StringMgmt.addToList(numbers, "unset"), args[3]);
594+
break;
590595
case "enemy":
591596
case "ally":
592597
if (args.length == 4)
@@ -1917,6 +1922,10 @@ public void parseAdminNationCommand(CommandSender sender, String[] split) throws
19171922
checkPermOrThrow(sender, PermissionNodes.TOWNY_COMMAND_TOWNYADMIN_NATION_ENEMY.getNode());
19181923
parseAdminNationEnemyCommand(sender, StringMgmt.remArgs(split, 2), nation);
19191924
break;
1925+
case "setnationlevel":
1926+
checkPermOrThrow(sender, PermissionNodes.TOWNY_COMMAND_TOWNYADMIN_NATION_SETNATIONLEVEL.getNode());
1927+
setNationLevel(sender, nation, StringMgmt.remArgs(split, 2));
1928+
break;
19201929
default:
19211930
if (TownyCommandAddonAPI.hasCommand(CommandType.TOWNYADMIN_NATION, split[1])) {
19221931
TownyCommandAddonAPI.getAddonCommand(CommandType.TOWNYADMIN_NATION, split[1]).execute(sender, split, nation);
@@ -1926,6 +1935,28 @@ public void parseAdminNationCommand(CommandSender sender, String[] split) throws
19261935
}
19271936
}
19281937

1938+
private void setNationLevel(CommandSender sender, Nation nation, String[] split) throws TownyException {
1939+
// The number is missing.
1940+
if (split.length == 0)
1941+
throw new TownyException("Eg: /townyadmin nation [nationname] setnationlevel 2");
1942+
1943+
// Handle un-setting the manual override.
1944+
if (split[0].equalsIgnoreCase("unset")) {
1945+
nation.setManualNationLevel(-1);
1946+
nation.save();
1947+
TownyMessaging.sendMsg(sender, Translatable.of("msg_nation_level_unset", nation, nation.getLevelNumber()));
1948+
return;
1949+
}
1950+
1951+
// Handle applying a manual override.
1952+
int level = MathUtil.getPositiveIntOrThrow(split[0]);
1953+
if (level > TownySettings.getNationLevelMax() - 1)
1954+
level = TownySettings.getNationLevelMax() - 1;
1955+
nation.setManualNationLevel(level);
1956+
nation.save();
1957+
TownyMessaging.sendMsg(sender, Translatable.of("msg_nation_level_overridden_with", nation, level));
1958+
}
1959+
19291960
private void parseAdminNewNationCommand(CommandSender sender, String[] split) throws TownyException {
19301961
if (split.length != 3)
19311962
throw new TownyException(Translatable.of("msg_err_not_enough_variables") + "/ta nation new [name] [capital]");

Towny/src/main/java/com/palmergames/bukkit/towny/db/SQLSchema.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ private static List<ColumnData> getNationColumns(){
321321
columns.add(new ColumnData("conqueredTax", "float NOT NULL"));
322322
columns.add(new ColumnData("sanctionedTowns", "mediumtext DEFAULT NULL"));
323323
columns.add(new ColumnData("hasActiveWar", "bool NOT NULL DEFAULT '0'"));
324+
columns.add(new ColumnData("manualNationLevel", "BIGINT DEFAULT '-1'"));
324325
return columns;
325326
}
326327

Towny/src/main/java/com/palmergames/bukkit/towny/db/TownyFlatFileSource.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,6 +1297,10 @@ public boolean loadNation(Nation nation) {
12971297
if (line != null)
12981298
nation.setActiveWar(Boolean.parseBoolean(line));
12991299

1300+
line = keys.get("manualNationLevel");
1301+
if (line != null)
1302+
nation.setManualNationLevel(Integer.parseInt(line));
1303+
13001304
} catch (Exception e) {
13011305
plugin.getLogger().log(Level.WARNING, Translation.of("flatfile_err_reading_nation_file_at_line", nation.getName(), line, nation.getName()), e);
13021306
return false;
@@ -2365,6 +2369,8 @@ public boolean saveNation(Nation nation) {
23652369
list.add("sanctionedTowns=" + StringMgmt.join(nation.getSanctionedTownsForSaving(), "#"));
23662370
// Active War
23672371
list.add("hasActiveWar=" + nation.hasActiveWar());
2372+
2373+
list.add("manualNationLevel=" + nation.getManualNationLevel());
23682374
/*
23692375
* Make sure we only save in async
23702376
*/

Towny/src/main/java/com/palmergames/bukkit/towny/db/TownySQLSource.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,9 @@ private boolean loadNation(ResultSet rs) {
13851385
if (line != null && !line.isEmpty())
13861386
nation.setActiveWar(rs.getBoolean("hasActiveWar"));
13871387

1388+
1389+
nation.setManualNationLevel(rs.getInt("manualNationLevel"));
1390+
13881391
return true;
13891392
} catch (SQLException e) {
13901393
TownyMessaging.sendErrorMsg("SQL: Load Nation " + name + " SQL Error - " + e.getMessage());
@@ -2497,6 +2500,7 @@ public synchronized boolean saveNation(Nation nation) {
24972500
nat_hm.put("maxPercentTaxAmount", nation.getMaxPercentTaxAmount());
24982501
nat_hm.put("spawnCost", nation.getSpawnCost());
24992502
nat_hm.put("neutral", nation.isNeutral());
2503+
nat_hm.put("manualNationLevel", nation.getManualNationLevel());
25002504

25012505
final Position spawnPos = nation.spawnPosition();
25022506
nat_hm.put("nationSpawn", spawnPos != null ? String.join("#", spawnPos.serialize()) : "");
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.palmergames.bukkit.towny.huds;
2+
3+
import com.palmergames.bukkit.towny.huds.providers.HUD;
4+
5+
public interface HUDImplementer {
6+
public HUD getHUD();
7+
}

0 commit comments

Comments
 (0)