Skip to content

Commit b736efe

Browse files
authored
Add option to require claim adjacency, close #71 (#193)
1 parent 99a00c8 commit b736efe

File tree

6 files changed

+33
-2
lines changed

6 files changed

+33
-2
lines changed

common/src/main/java/net/william278/husktowns/claim/ClaimWorld.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@ public List<TownClaim> getClaimsNear(@NotNull Chunk chunk, int radius, @NotNull
134134
return townClaims;
135135
}
136136

137+
@NotNull
138+
public List<TownClaim> getAdjacentClaims(@NotNull Chunk chunk, @NotNull HuskTowns plugin) {
139+
return getClaimsNear(chunk, 1, plugin);
140+
}
141+
137142
public void removeAdminClaim(@NotNull Chunk chunk) {
138143
adminClaims.removeIf(claim -> claim.getChunk().equals(chunk));
139144
}

common/src/main/java/net/william278/husktowns/config/Settings.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ public class Settings {
180180
@YamlKey("towns.minimum_chunk_separation")
181181
private int minimumChunkSeparation = 0;
182182

183+
@YamlComment("Require towns to have all their claims adjacent to each other")
184+
@YamlKey("towns.require_claim_adjacency")
185+
private boolean requireClaimAdjacency = false;
186+
183187
// Admin Town settings
184188
@YamlComment("Admin Town settings for changing how admin claims look")
185189
@YamlKey("towns.admin_town.name")
@@ -369,6 +373,10 @@ public int getMinimumChunkSeparation() {
369373
return minimumChunkSeparation;
370374
}
371375

376+
public boolean doRequireClaimAdjacency() {
377+
return requireClaimAdjacency;
378+
}
379+
372380
@NotNull
373381
public String getAdminTownName() {
374382
return adminTownName;
@@ -378,4 +386,5 @@ public String getAdminTownName() {
378386
public Color getAdminTownColor() {
379387
return Color.decode(adminTownColor);
380388
}
389+
381390
}

common/src/main/java/net/william278/husktowns/manager/ClaimsManager.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,29 @@ public void createClaim(@NotNull OnlineUser user, @NotNull World world, @NotNull
3535
return;
3636
}
3737

38+
// Get the claim world
3839
final Optional<ClaimWorld> optionalClaimWorld = plugin.getClaimWorld(world);
3940
if (optionalClaimWorld.isEmpty()) {
4041
plugin.getLocales().getLocale("error_world_not_claimable")
4142
.ifPresent(user::sendMessage);
4243
return;
4344
}
44-
45-
// Check against nearby claims
4645
final ClaimWorld claimWorld = optionalClaimWorld.get();
46+
47+
// Carry out adjacency check
48+
if (plugin.getSettings().doRequireClaimAdjacency() && member.town().getClaimCount() > 0) {
49+
final Optional<TownClaim> adjacentClaim = claimWorld
50+
.getAdjacentClaims(chunk, plugin).stream()
51+
.filter(claim -> claim.town().equals(member.town()))
52+
.findFirst();
53+
if (adjacentClaim.isEmpty()) {
54+
plugin.getLocales().getLocale("error_claim_not_adjacent")
55+
.ifPresent(user::sendMessage);
56+
return;
57+
}
58+
}
59+
60+
// Carry out minimum chunk separation check
4761
final Optional<TownClaim> nearbyClaim = claimWorld
4862
.getClaimsNear(chunk, plugin.getSettings().getMinimumChunkSeparation(), plugin).stream()
4963
.filter(claim -> !claim.town().equals(member.town()))

common/src/main/resources/locales/en-gb.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ error_no_towns: '[Error:](#ff3300) [No towns have been created yet](#ff7e5e)'
176176
error_world_not_claimable: '[Error:](#ff3300) [Claims cannot be created in this world](#ff7e5e)'
177177
error_chunk_claimed_by: '[Error:](#ff3300) [That chunk has been claimed by %1%](#ff7e5e)'
178178
error_claim_too_close_to: '[Error:](#ff3300) [A claim there would be too close to %1%''s claim](#ff7e5e)'
179+
error_claim_not_adjacent: '[Error:](#ff3300) [A claim there would not be adjacent to your existing claims](#ff7e5e)'
179180
error_operation_not_allowed: '[Error:](#ff3300) [You can''t do that here!](#ff7e5e)'
180181
error_claim_limit_reached: '[Error:](#ff3300) [The town has used all of its'' claim slots. (%1%/%2%)](#ff7e5e)'
181182
error_town_member_limit_reached: '[Error:](#ff3300) [The town has reached the maximum number of members. (%1%/%2%)](#ff7e5e)'

common/src/main/resources/locales/es-es.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ error_no_towns: '[Error:](#ff3300) [Aún no se han creado ciudades](#ff7e5e)'
176176
error_world_not_claimable: '[Error:](#ff3300) [No se pueden reclamar terrenos aqui.](#ff7e5e)'
177177
error_chunk_claimed_by: '[Error:](#ff3300) [Este terreno ha sido reclamado por %1%](#ff7e5e)'
178178
error_claim_too_close_to: '[Error:](#ff3300) [A claim there would be too close to %1%''s claim](#ff7e5e)'
179+
error_claim_not_adjacent: '[Error:](#ff3300) [A claim there would not be adjacent to your existing claims](#ff7e5e)'
179180
error_operation_not_allowed: '[Error:](#ff3300) [No puedes hacer eso aquí!](#ff7e5e)'
180181
error_claim_limit_reached: '[Error:](#ff3300) [La ciudad ha alcanzado el max de terrenos permitidos. (%1%/%2%)](#ff7e5e)'
181182
error_town_member_limit_reached: '[Error:](#ff3300) [La ciudad ha alcanzado el max de mimebros permitidos. (%1%/%2%)](#ff7e5e)'

common/src/main/resources/locales/zh-cn.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ error_no_towns: '[错误:](#ff3300) [没有城镇被创立](#ff7e5e)'
176176
error_world_not_claimable: '[错误:](#ff3300) [这个世界内无法圈地](#ff7e5e)'
177177
error_chunk_claimed_by: '[错误:](#ff3300) [这个区块已经被 %1% 控制](#ff7e5e)'
178178
error_claim_too_close_to: '[错误:](#ff3300) [这个圈地区域距离 %1%的控制区域太近](#ff7e5e)'
179+
error_claim_not_adjacent: '[Error:](#ff3300) [A claim there would not be adjacent to your existing claims](#ff7e5e)'
179180
error_operation_not_allowed: '[错误:](#ff3300) [你无法在这里这样做!](#ff7e5e)'
180181
error_claim_limit_reached: '[错误:](#ff3300) [该城镇已经使用了所有的土地. (%1%/%2%)](#ff7e5e)'
181182
error_town_member_limit_reached: '[错误:](#ff3300) [该城镇已经满员了. (%1%/%2%)](#ff7e5e)'

0 commit comments

Comments
 (0)