Skip to content

Commit 7e1cbb7

Browse files
committed
Add COPPER_AXE default value and fix UxmClaims support.
Update to 1.27.8 closes #120
1 parent 5b1cddd commit 7e1cbb7

9 files changed

Lines changed: 281 additions & 18 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.syntaxphoenix.spigot</groupId>
77
<artifactId>smoothtimber-legacy</artifactId>
8-
<version>1.27.7</version>
8+
<version>1.27.8</version>
99
<name>SmoothTimber</name>
1010
<packaging>jar</packaging>
1111

src/main/java/com/syntaxphoenix/spigot/smoothtimber/annotation/MCVersionEnumGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ private String getNameFromType(final String typeName) {
248248
}
249249

250250
private String getVersionFromName(final String changerName) {
251+
if (!changerName.contains("x")) {
252+
return changerName.split("Changer", 2)[0];
253+
}
251254
return changerName.split("x", 2)[0] + 'x';
252255
}
253256

src/main/java/com/syntaxphoenix/spigot/smoothtimber/compatibility/coreprotect/CoreProtectAddon.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public void onEnable(final PluginPackage pluginPackage, final SmoothTimber smoot
3939
case v1_16x:
4040
case v1_19x:
4141
case v1_20x:
42-
case v1_21x:
42+
case v1_21_9Below:
43+
case v1_21_9AndAbove:
4344
compat = new CoreCompat_v1_13_x(pluginPackage.getPlugin());
4445
break;
4546
default:
Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,16 @@
11
package com.syntaxphoenix.spigot.smoothtimber.compatibility.uxmclaims;
22

3-
import java.util.Optional;
43
import java.util.UUID;
54

65
import org.bukkit.event.EventHandler;
76
import org.bukkit.event.Listener;
87

98
import com.syntaxphoenix.spigot.smoothtimber.event.AsyncPlayerChopTreeEvent;
109
import com.syntaxphoenix.spigot.smoothtimber.event.reason.DefaultReason;
11-
import com.syntaxphoenix.spigot.smoothtimber.platform.Platform;
1210
import com.uxplima.claim.app.facade.ClaimFacade;
1311
import com.uxplima.claim.bukkit.api.BukkitConverter;
1412
import com.uxplima.claim.bukkit.api.UxmClaimBukkitAPI;
1513
import com.uxplima.claim.domain.model.Claim;
16-
import com.uxplima.claim.domain.model.ClaimMember;
1714
import com.uxplima.claim.domain.model.enums.ClaimPermission;
1815
import com.uxplima.claim.domain.model.vo.Location;
1916

@@ -30,17 +27,14 @@ public void onChopEvent(AsyncPlayerChopTreeEvent event) {
3027

3128
// Find claim at check location
3229
Claim claim = claimFacade.getByLocationUnsafe(domainLoc);
33-
34-
if (claim != null) {
35-
if (claim.hasPermission(uuid, ClaimPermission.BLOCK_BREAK)) {
36-
continue;
37-
}
38-
39-
// Deny if neither owner nor member with permission
40-
event.setCancelled(true);
41-
event.setReason(DefaultReason.UXMCLAIMS);
42-
return;
30+
if (claim == null || claim.hasPermission(uuid, ClaimPermission.BLOCK_BREAK)) {
31+
continue;
4332
}
33+
34+
// Deny if neither owner nor member with permission
35+
event.setCancelled(true);
36+
event.setReason(DefaultReason.UXMCLAIMS);
37+
return;
4438
}
4539
}
4640
}

src/main/java/com/syntaxphoenix/spigot/smoothtimber/compatibility/worldguard/WorldGuard.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public void onEnable(final PluginPackage pluginPackage, final SmoothTimber smoot
2525
case v1_16x:
2626
case v1_19x:
2727
case v1_20x:
28-
case v1_21x:
28+
case v1_21_9Below:
29+
case v1_21_9AndAbove:
2930
listener = new WorldGuardChopListener_v7_x();
3031
break;
3132
default:

src/main/java/com/syntaxphoenix/spigot/smoothtimber/config/Message.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public enum Message {
6565
ABORT_MESSAGE("&7You can't cut this tree because &c%reason%&7!"),
6666
ABORT_REASON_UNKNOWN("another plugin cancelled the process"),
6767
ABORT_REASON_GRIEFPREVENTION("it is protected by a GriefPrevetion Claim"),
68+
ABORT_REASON_UXMCLAIMS("it is protected by a UxmClaims Claim"),
6869
ABORT_REASON_WORLDGUARD("it is protected by a WorldGuard Region"),
6970
ABORT_REASON_RESIDENCE("it is protected by a Residence Region"),
7071
ABORT_REASON_LANDS("it is protected by a Lands Region"),

src/main/java/com/syntaxphoenix/spigot/smoothtimber/platform/Platform.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ private static Platform createPlatform(final SmoothTimber plugin) {
2929
if (ClassCache.getOptionalClass("io.papermc.paper.threadedregions.RegionizedServer")
3030
.or(() -> ClassCache.getOptionalClass("io.papermc.paper.threadedregions.RegionizedServerInitEvent")).isPresent()) {
3131
switch (MCVersion.getCoreVersion()) {
32-
case v1_21x:
32+
case v1_21_9Below:
33+
case v1_21_9AndAbove:
3334
// On 1.21+ we can't only use the Regionized Server cause Paper for some reason includes that API now.
3435
if (ClassCache.getOptionalClass("io.papermc.paper.plugin.configuration.PluginMeta")
3536
.filter(clz -> new Reflect(clz).searchMethod("isFolia", "isFoliaSupported").containsMethod("isFolia")).isPresent()) {
Lines changed: 262 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
package com.syntaxphoenix.spigot.smoothtimber.version.changer;
2+
3+
import org.bukkit.Material;
4+
import org.bukkit.block.Block;
5+
import org.bukkit.block.BlockState;
6+
import org.bukkit.block.data.BlockData;
7+
import org.bukkit.entity.Entity;
8+
import org.bukkit.entity.EntityType;
9+
import org.bukkit.entity.FallingBlock;
10+
import org.bukkit.entity.Player;
11+
import org.bukkit.inventory.ItemStack;
12+
import org.bukkit.inventory.meta.Damageable;
13+
import org.bukkit.inventory.meta.ItemMeta;
14+
15+
import com.syntaxphoenix.spigot.smoothtimber.annotation.SupportedVersions;
16+
import com.syntaxphoenix.spigot.smoothtimber.config.config.CutterConfig;
17+
import com.syntaxphoenix.spigot.smoothtimber.utilities.Lists;
18+
import com.syntaxphoenix.spigot.smoothtimber.version.VersionConstant;
19+
import com.syntaxphoenix.spigot.smoothtimber.version.manager.VersionChanger;
20+
import com.syntaxphoenix.spigot.smoothtimber.version.manager.VersionExchanger;
21+
import com.syntaxphoenix.spigot.smoothtimber.version.manager.WoodType;
22+
23+
@SupportedVersions({
24+
"1.21.9",
25+
"1.21.10",
26+
"1.21.11"
27+
})
28+
public final class v1_21_9AndAboveChanger implements VersionChanger {
29+
30+
@Override
31+
public boolean hasCuttingItemInHand(final Player player) {
32+
return CutterConfig.CUTTER_MATERIALS.contains(getItemInHand(player).getType().name());
33+
}
34+
35+
@Override
36+
public boolean hasPermissionForCuttingItem(final Player player, final ItemStack item) {
37+
if (!CutterConfig.ENABLE_CUTTER_PERMISSIONS || item == null) {
38+
return true;
39+
}
40+
return VersionExchanger.checkPermission(item.getType().name().toLowerCase(), player);
41+
}
42+
43+
@Override
44+
public byte getData(final BlockState block) {
45+
return 0;
46+
}
47+
48+
@Override
49+
public ItemStack removeDurabilityFromItem(final ItemStack stack) {
50+
if (CutterConfig.ENABLE_UNBREAKING) {
51+
final int level = stack.getEnchantmentLevel(VersionConstant.ENCHANTMENT_UNBREAKING);
52+
final float chance = 100 / (level <= 0 ? 1 : level + 1);
53+
if (RANDOM.nextFloat(0, 100) > chance) {
54+
return stack;
55+
}
56+
}
57+
final ItemMeta meta = stack.getItemMeta();
58+
if (meta == null || meta.isUnbreakable()) {
59+
return stack;
60+
}
61+
if (meta instanceof Damageable) {
62+
final Damageable dmg = (Damageable) meta;
63+
final int damage = dmg.getDamage() + 1;
64+
if (stack.getType().getMaxDurability() - damage < 0) {
65+
stack.setAmount(0);
66+
return null;
67+
}
68+
dmg.setDamage(damage);
69+
}
70+
stack.setItemMeta(meta);
71+
return stack;
72+
}
73+
74+
@Override
75+
public int getMaxDropCount(final ItemStack stack) {
76+
final int level = stack.getEnchantmentLevel(VersionConstant.ENCHANTMENT_LOOTING);
77+
return level <= 0 ? 1 : level + 1;
78+
}
79+
80+
@Override
81+
public void setItemInPlayerHand(final Player player, final ItemStack stack) {
82+
player.getEquipment().setItemInMainHand(stack);
83+
}
84+
85+
@Override
86+
public boolean isWoodBlockImpl(final BlockState block) {
87+
final Material material = block.getBlockData().getMaterial();
88+
89+
if (CutterConfig.ENABLE_EXCLUSION && CutterConfig.EXCLUDED_MATERIALS.contains(material)) {
90+
return false;
91+
}
92+
93+
if (CutterConfig.ENABLE_INCLUSION && CutterConfig.INCLUDED_MATERIALS.contains(material)) {
94+
return true;
95+
}
96+
97+
return getWoodType(material) != WoodType.OTHER;
98+
}
99+
100+
@Override
101+
public void setupConfig() {
102+
CutterConfig.CUTTER_MATERIALS
103+
.addAll(Lists.asList("WOODEN_AXE", "STONE_AXE", "IRON_AXE", "COPPER_AXE", "GOLDEN_AXE", "DIAMOND_AXE", "NETHERITE_AXE"));
104+
}
105+
106+
@Override
107+
public boolean hasPermissionForWood(final Player p, final Block b) {
108+
return hasPermissionForWoodType(p, getWoodType(b.getBlockData().getMaterial()));
109+
}
110+
111+
@Override
112+
public boolean hasPermissionForWoodType(final Player p, final WoodType type) {
113+
if (!CutterConfig.ENABLE_WOOD_PERMISSIONS || type == null) {
114+
return true;
115+
}
116+
return VersionExchanger.checkPermission(type, p);
117+
}
118+
119+
@Override
120+
public ItemStack getItemInHand(final Player p) {
121+
return p.getEquipment().getItemInMainHand();
122+
}
123+
124+
@Override
125+
public ItemStack getItemFromBlock(final Block block) {
126+
return new ItemStack(block.getBlockData().getMaterial());
127+
}
128+
129+
@Override
130+
public ItemStack getItemFromFallingBlock(final FallingBlock block) {
131+
return new ItemStack(block.getBlockData().getMaterial());
132+
}
133+
134+
@Override
135+
public ItemStack getAirItem() {
136+
return new ItemStack(Material.AIR);
137+
}
138+
139+
@Override
140+
public void setAirBlock(final Block block) {
141+
block.setType(Material.AIR);
142+
}
143+
144+
@Override
145+
public Entity toFallingBlock(final Block block) {
146+
final BlockData data = block.getBlockData();
147+
block.setType(Material.AIR);
148+
return block.getWorld().spawnFallingBlock(block.getLocation().add(0.5, 0.2, 0.5), data);
149+
}
150+
151+
@Override
152+
public EntityType getFallingBlockType() {
153+
return EntityType.FALLING_BLOCK;
154+
}
155+
156+
@Override
157+
public boolean isSupported(final WoodType type) {
158+
switch (type) {
159+
case OAK:
160+
case SPRUCE:
161+
case BIRCH:
162+
case JUNGLE:
163+
case ACACIA:
164+
case DARKOAK:
165+
case CRIMSON:
166+
case WARPED:
167+
case MANGROVE:
168+
case CHERRY:
169+
case PALE:
170+
case OTHER:
171+
return true;
172+
default:
173+
return false;
174+
}
175+
}
176+
177+
@Override
178+
public WoodType getWoodTypeFromBlock(final Block block) {
179+
final Material blockMaterial = block.getBlockData().getMaterial();
180+
if (CutterConfig.ENABLE_INCLUSION && CutterConfig.INCLUDED_MATERIALS.contains(blockMaterial)) {
181+
return WoodType.OTHER;
182+
}
183+
return getWoodType(blockMaterial);
184+
}
185+
186+
@Override
187+
public WoodType getWoodType(final Material type, final int id) {
188+
switch (type) {
189+
case OAK_LOG:
190+
case OAK_WOOD:
191+
case OAK_FENCE:
192+
case STRIPPED_OAK_LOG:
193+
case STRIPPED_OAK_WOOD:
194+
return WoodType.OAK;
195+
case SPRUCE_LOG:
196+
case SPRUCE_WOOD:
197+
case SPRUCE_FENCE:
198+
case STRIPPED_SPRUCE_LOG:
199+
case STRIPPED_SPRUCE_WOOD:
200+
return WoodType.SPRUCE;
201+
case BIRCH_LOG:
202+
case BIRCH_WOOD:
203+
case BIRCH_FENCE:
204+
case STRIPPED_BIRCH_LOG:
205+
case STRIPPED_BIRCH_WOOD:
206+
return WoodType.BIRCH;
207+
case JUNGLE_LOG:
208+
case JUNGLE_WOOD:
209+
case JUNGLE_FENCE:
210+
case STRIPPED_JUNGLE_LOG:
211+
case STRIPPED_JUNGLE_WOOD:
212+
return WoodType.JUNGLE;
213+
case DARK_OAK_LOG:
214+
case DARK_OAK_WOOD:
215+
case DARK_OAK_FENCE:
216+
case STRIPPED_DARK_OAK_LOG:
217+
case STRIPPED_DARK_OAK_WOOD:
218+
return WoodType.DARKOAK;
219+
case ACACIA_LOG:
220+
case ACACIA_WOOD:
221+
case ACACIA_FENCE:
222+
case STRIPPED_ACACIA_LOG:
223+
case STRIPPED_ACACIA_WOOD:
224+
return WoodType.ACACIA;
225+
case MANGROVE_LOG:
226+
case MANGROVE_WOOD:
227+
case MANGROVE_FENCE:
228+
case STRIPPED_MANGROVE_LOG:
229+
case STRIPPED_MANGROVE_WOOD:
230+
case MANGROVE_ROOTS:
231+
case MUDDY_MANGROVE_ROOTS:
232+
return WoodType.MANGROVE;
233+
case CRIMSON_STEM:
234+
case CRIMSON_FENCE:
235+
case CRIMSON_HYPHAE:
236+
case STRIPPED_CRIMSON_STEM:
237+
case STRIPPED_CRIMSON_HYPHAE:
238+
return WoodType.CRIMSON;
239+
case WARPED_STEM:
240+
case WARPED_FENCE:
241+
case WARPED_HYPHAE:
242+
case STRIPPED_WARPED_STEM:
243+
case STRIPPED_WARPED_HYPHAE:
244+
return WoodType.WARPED;
245+
case CHERRY_LOG:
246+
case CHERRY_WOOD:
247+
case CHERRY_FENCE:
248+
case STRIPPED_CHERRY_LOG:
249+
case STRIPPED_CHERRY_WOOD:
250+
return WoodType.CHERRY;
251+
case PALE_OAK_LOG:
252+
case PALE_OAK_WOOD:
253+
case PALE_OAK_FENCE:
254+
case STRIPPED_PALE_OAK_LOG:
255+
case STRIPPED_PALE_OAK_WOOD:
256+
return WoodType.PALE;
257+
default:
258+
return WoodType.OTHER;
259+
}
260+
}
261+
262+
}

src/main/java/com/syntaxphoenix/spigot/smoothtimber/version/changer/v1_21xChanger.java renamed to src/main/java/com/syntaxphoenix/spigot/smoothtimber/version/changer/v1_21_9BelowChanger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"1.21.7",
2929
"1.21.8"
3030
})
31-
public final class v1_21xChanger implements VersionChanger {
31+
public final class v1_21_9BelowChanger implements VersionChanger {
3232

3333
@Override
3434
public boolean hasCuttingItemInHand(final Player player) {

0 commit comments

Comments
 (0)