Skip to content

Commit 0c3dfe1

Browse files
committed
Update to use enchantment
1 parent 0c395ec commit 0c3dfe1

13 files changed

Lines changed: 354 additions & 24 deletions

File tree

.github/workflows/build.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: Build
2+
on:
3+
workflow_dispatch:
4+
pull_request:
5+
push:
6+
branches:
7+
- "ver/**"
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
if: "!contains(github.event.commits[0].message, '[ci skip]')"
13+
permissions:
14+
contents: write
15+
env:
16+
BUILD_NUMBER: ${{ github.run_number }}
17+
steps:
18+
- name: Checkout repository
19+
uses: actions/checkout@v4
20+
with:
21+
fetch-depth: 0
22+
23+
- uses: actions/setup-java@v4
24+
with:
25+
distribution: temurin
26+
java-version: 21
27+
cache: 'gradle'
28+
29+
- name: Setup Gradle
30+
uses: gradle/actions/setup-gradle@v4
31+
32+
- name: Build TreeCuter
33+
run: ./gradlew build
34+
35+
- name: Prepare release notes and artifacts
36+
run: |
37+
chmod +x ./scripts/prepareRelease.sh
38+
./scripts/prepareRelease.sh
39+
env:
40+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41+
GITHUB_REPO: ${{ github.repository }}
42+
BUILD_NUMBER: ${{ env.BUILD_NUMBER }}
43+
44+
- name: Upload TreeCuter
45+
uses: actions/upload-artifact@main
46+
with:
47+
name: TreeCuter 1.9.2
48+
path: ./build/libs/TreeCuter-v1.9.2.jar
49+
50+
- name: Release TreeCuter
51+
uses: softprops/action-gh-release@master
52+
with:
53+
name: "🌳 TreeCuter build ${{ env.BUILD_NUMBER }}"
54+
tag_name: "1.9.2"
55+
files: |
56+
./build/libs/TreeCuter-v1.9.2.jar
57+
body_path: "./RELEASE.md"
58+
token: "${{ secrets.GITHUB_TOKEN }}"
59+
target_commitish: "${{ github.sha }}"
60+
draft: false
61+
prerelease: false

build.gradle

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id 'java'
3-
id 'com.github.johnrengelman.shadow' version '8.1.1'
3+
id 'com.gradleup.shadow' version '8.3.0'
44
}
55

66
group = 'pl.norbit'
@@ -27,37 +27,36 @@ repositories {
2727
}
2828

2929
dependencies {
30-
compileOnly "io.papermc.paper:paper-api:1.19.4-R0.1-SNAPSHOT"
30+
compileOnly "io.papermc.paper:paper-api:1.21.8-R0.1-SNAPSHOT"
3131
//bstats
3232
implementation 'org.bstats:bstats-bukkit:3.1.0'
3333
//glowing
34-
implementation 'fr.skytasul:glowingentities:1.4.3'
34+
implementation 'fr.skytasul:glowingentities:1.4.8'
3535
//worldguard
3636
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.8'
3737
//itemsadder
3838
compileOnly 'com.github.LoneDev6:API-ItemsAdder:3.6.2-beta-r3-b'
3939

4040
compileOnly 'me.clip:placeholderapi:2.11.6'
4141
//lombok
42-
compileOnly 'org.projectlombok:lombok:1.18.26'
43-
annotationProcessor 'org.projectlombok:lombok:1.18.26'
42+
compileOnly 'org.projectlombok:lombok:1.18.32'
43+
annotationProcessor 'org.projectlombok:lombok:1.18.32'
44+
//configapi
45+
implementation 'net.serlith.ConfigAPI:ConfigAPI-core:1.2.5'
4446
}
4547

4648
compileJava {options.encoding = "UTF-8"}
4749

48-
def targetJavaVersion = 17
50+
def targetJavaVersion = 21
4951

5052
shadowJar {
51-
relocate 'org.bstats', 'pl.norbit.treecuter'
53+
relocate 'org.bstats', 'pl.norbit.treecuter.lib.bstats'
54+
relocate 'fr.skytasul', 'pl.norbit.treecuter.lib.skytasul'
55+
relocate 'net.j4c0b3y.api.config', 'pl.norbit.treecuter.lib.config'
56+
relocate 'dev.dejvokep.boostedyaml', 'pl.norbit.treecuter.lib.boostedyaml'
5257
archiveClassifier.set("")
5358
}
5459

55-
java {
56-
toolchain {
57-
languageVersion = JavaLanguageVersion.of(17)
58-
}
59-
}
60-
6160
java {
6261
def javaVersion = JavaVersion.toVersion(targetJavaVersion)
6362
sourceCompatibility = javaVersion
@@ -68,7 +67,7 @@ java {
6867
}
6968

7069
tasks.withType(JavaCompile).configureEach {
71-
if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
70+
if (targetJavaVersion >= 17 || JavaVersion.current().isJava10Compatible()) {
7271
options.release = targetJavaVersion
7372
}
7473
}
@@ -80,4 +79,7 @@ processResources {
8079
filesMatching('plugin.yml') {
8180
expand props
8281
}
82+
filesMatching('paper-plugin.yml') {
83+
expand props
84+
}
8385
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
1+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip

scripts/prepareRelease.sh

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/bin/bash
2+
set -e
3+
4+
CURRENT_TAG="1.9.2"
5+
RELEASE_NOTES="RELEASE.md"
6+
7+
# Branch name
8+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
9+
echo "✨Current branch: $CURRENT_BRANCH"
10+
11+
# Latest tag name
12+
LATEST_TAG=$(git describe --tags --abbrev=0)
13+
if [ -z "$LATEST_TAG" ]; then
14+
LATEST_TAG=$(git rev-list --max-parents=0 HEAD)
15+
echo "⚠️No previous release found. Using initial commit."
16+
else
17+
echo "✨Latest tag: $LATEST_TAG"
18+
fi
19+
20+
# Commit of the latest tag
21+
LAST_RELEASE_COMMIT=$(git rev-list -n 1 "$LATEST_TAG")
22+
echo "✨Last release commit: $LAST_RELEASE_COMMIT"
23+
24+
# Commits log
25+
COMMIT_LOG=$(git log "$LAST_RELEASE_COMMIT"..HEAD --pretty=format:"- [\`%h\`](https://github.com/${GITHUB_REPO}/commit/%H) %s (%an)")
26+
if [ -z "$COMMIT_LOG" ]; then
27+
COMMIT_LOG="⚠️No new commits since $LATEST_TAG."
28+
else
29+
echo "✅Commits log generated"
30+
fi
31+
32+
# Release notes header
33+
echo "" >> $RELEASE_NOTES
34+
35+
# Commits log
36+
{
37+
echo "### 📜 Commits:"
38+
echo ""
39+
echo "$COMMIT_LOG"
40+
echo ""
41+
echo "### 🔒 Checksums"
42+
} >> $RELEASE_NOTES
43+
44+
# Get checksums
45+
file="./build/libs/TreeCuter-v1.9.2.jar"
46+
if [ -f $file ]; then
47+
SHA256=$(sha256sum $file | awk '{ print $1 }')
48+
SHA512=$(sha512sum $file | awk '{ print $1 }')
49+
FILENAME=$(basename $file)
50+
51+
{
52+
echo "| | $FILENAME |"
53+
echo "| --------- | --------- |"
54+
echo "| SHA256 | $SHA256 |"
55+
echo "| SHA512 | $SHA512 |"
56+
} >> $RELEASE_NOTES
57+
58+
echo "🔒Checksums calculated:"
59+
echo " SHA256: $SHA256"
60+
echo " SHA512: $SHA512"
61+
else
62+
echo "⚠️No artifacts found." >> $RELEASE_NOTES
63+
fi
64+
65+
# Delete current release tag
66+
if git show-ref --tags $CURRENT_TAG --quiet; then
67+
{
68+
gh release delete $CURRENT_TAG --cleanup-tag -y -R "${GITHUB_REPO}"
69+
}
70+
fi
71+
echo "🚀Ready for release"
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package pl.norbit.treecuter;
2+
3+
import io.papermc.paper.plugin.bootstrap.BootstrapContext;
4+
import io.papermc.paper.plugin.bootstrap.PluginBootstrap;
5+
import io.papermc.paper.registry.data.EnchantmentRegistryEntry;
6+
import io.papermc.paper.registry.event.RegistryEvents;
7+
import io.papermc.paper.registry.keys.EnchantmentKeys;
8+
import io.papermc.paper.registry.keys.tags.ItemTypeTagKeys;
9+
import org.bukkit.inventory.EquipmentSlotGroup;
10+
import org.jetbrains.annotations.NotNull;
11+
import pl.norbit.treecuter.config.SettingsExtra;
12+
import pl.norbit.treecuter.utils.KeyUtils;
13+
14+
@SuppressWarnings({"UnstableApiUsage", "unused"})
15+
public class TreeCuterBootstrap implements PluginBootstrap {
16+
17+
@Override
18+
public void bootstrap(@NotNull BootstrapContext context) {
19+
new SettingsExtra(context.getDataDirectory()).load();
20+
context.getLifecycleManager().registerEventHandler(RegistryEvents.ENCHANTMENT.compose().newHandler(event -> {
21+
event.registry().register(
22+
EnchantmentKeys.create(KeyUtils.KEY_LUMBERJACK),
23+
b -> b.description(SettingsExtra.ENCHANTMENT._DESCRIPTION)
24+
.supportedItems(event.getOrCreateTag(ItemTypeTagKeys.AXES))
25+
.anvilCost(SettingsExtra.ENCHANTMENT.ANVIL_COST)
26+
.maxLevel(SettingsExtra.ENCHANTMENT.MAX_LEVEL)
27+
.weight(SettingsExtra.ENCHANTMENT.WEIGHT)
28+
.minimumCost(EnchantmentRegistryEntry.EnchantmentCost.of(SettingsExtra.ENCHANTMENT.MINIMUM_COST.BASE_COST, SettingsExtra.ENCHANTMENT.MINIMUM_COST.ADDITIONAL_PER_LEVEL))
29+
.maximumCost(EnchantmentRegistryEntry.EnchantmentCost.of(SettingsExtra.ENCHANTMENT.MAXIMUM_COST.BASE_COST, SettingsExtra.ENCHANTMENT.MAXIMUM_COST.ADDITIONAL_PER_LEVEL))
30+
.activeSlots(EquipmentSlotGroup.ANY)
31+
);
32+
}));
33+
}
34+
35+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package pl.norbit.treecuter.config;
2+
3+
import net.j4c0b3y.api.config.ConfigHandler;
4+
import net.j4c0b3y.api.config.StaticConfig;
5+
import net.kyori.adventure.text.Component;
6+
import net.kyori.adventure.text.minimessage.MiniMessage;
7+
8+
import java.nio.file.Path;
9+
10+
public class SettingsExtra extends StaticConfig {
11+
12+
13+
@Ignore
14+
public static SettingsExtra INSTANCE;
15+
16+
@Ignore
17+
public static final ConfigHandler HANDLER = new ConfigHandler();
18+
19+
public SettingsExtra(Path directory) {
20+
super(directory.resolve("config-extra.yml").toFile(), HANDLER);
21+
INSTANCE = this;
22+
}
23+
24+
public static class GENERAL {
25+
26+
public static boolean USE_ENCHANTMENT = true;
27+
28+
public static int ASYNC_THREADS = 2;
29+
30+
}
31+
32+
public static class ENCHANTMENT {
33+
34+
public static String DESCRIPTION = "";
35+
@Ignore
36+
public static Component _DESCRIPTION;
37+
38+
public static int ANVIL_COST = 2;
39+
40+
public static int MAX_LEVEL = 5;
41+
42+
public static int WEIGHT = 10;
43+
44+
public static class MINIMUM_COST {
45+
46+
public static int BASE_COST = 2;
47+
48+
public static int ADDITIONAL_PER_LEVEL = 1;
49+
50+
}
51+
52+
public static class MAXIMUM_COST {
53+
54+
public static int BASE_COST = 4;
55+
56+
public static int ADDITIONAL_PER_LEVEL = 2;
57+
58+
}
59+
60+
public static class BEHAVIOUR {
61+
62+
public static int BASE_BLOCKS_BREAK = 10;
63+
64+
public static int EXTRA_BLOCKS_BREAK_PER_LEVEL = 60;
65+
66+
}
67+
68+
}
69+
70+
@Override
71+
public void load() {
72+
super.load();
73+
74+
ENCHANTMENT._DESCRIPTION = MiniMessage.miniMessage().deserialize(ENCHANTMENT.DESCRIPTION);
75+
}
76+
77+
}

src/main/java/pl/norbit/treecuter/listeners/BlockInteractListener.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
package pl.norbit.treecuter.listeners;
22

3+
import io.papermc.paper.registry.RegistryAccess;
4+
import io.papermc.paper.registry.RegistryKey;
35
import org.bukkit.GameMode;
6+
import org.bukkit.Registry;
7+
import org.bukkit.enchantments.Enchantment;
48
import org.bukkit.event.EventHandler;
59
import org.bukkit.event.EventPriority;
610
import org.bukkit.event.Listener;
711
import org.bukkit.event.block.Action;
812
import org.bukkit.event.player.PlayerInteractEvent;
13+
import org.jetbrains.annotations.NotNull;
914
import pl.norbit.treecuter.config.Settings;
15+
import pl.norbit.treecuter.config.SettingsExtra;
1016
import pl.norbit.treecuter.config.model.CutShape;
1117
import pl.norbit.treecuter.service.TreeCutService;
18+
import pl.norbit.treecuter.utils.KeyUtils;
1219
import pl.norbit.treecuter.utils.PermissionsUtils;
1320
import pl.norbit.treecuter.utils.WorldGuardUtils;
1421

1522
public class BlockInteractListener implements Listener {
1623

24+
private final Enchantment enchantmentLumberjack;
25+
26+
public BlockInteractListener() {
27+
final Registry<@NotNull Enchantment> registry = RegistryAccess.registryAccess().getRegistry(RegistryKey.ENCHANTMENT);
28+
this.enchantmentLumberjack = registry.getOrThrow(KeyUtils.ENCHANTMENT_KEY_LUMBERJACK);
29+
}
30+
1731
@EventHandler(priority = EventPriority.HIGHEST)
1832
public void onBlockInteract(PlayerInteractEvent e) {
1933
var b = e.getClickedBlock();
@@ -58,6 +72,10 @@ public void onBlockInteract(PlayerInteractEvent e) {
5872
return;
5973
}
6074

75+
if (SettingsExtra.GENERAL.USE_ENCHANTMENT && !item.containsEnchantment(this.enchantmentLumberjack)) {
76+
return;
77+
}
78+
6179
TreeCutService.selectTreeByBlock(b, p, shape, item);
6280
}
6381
}

src/main/java/pl/norbit/treecuter/service/EffectService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ private static void addSlowDiggingEffect(Player p){
7474
int effectLevel = Settings.getDefaultEffectLevel() - 1;
7575
boolean hideMiningEffect = !Settings.isHideMiningEffect();
7676

77-
var potionEffect = new PotionEffect(PotionEffectType.SLOW_DIGGING, 14, effectLevel, false,
77+
var potionEffect = new PotionEffect(PotionEffectType.MINING_FATIGUE, 14, effectLevel, false,
7878
hideMiningEffect, hideMiningEffect);
7979
p.addPotionEffect(potionEffect);
8080
}
@@ -95,7 +95,7 @@ public static boolean isEffectPlayer(Player p){
9595

9696
public static void removeEffect(Player p){
9797
effectPlayersMap.remove(p.getUniqueId());
98-
p.removePotionEffect(PotionEffectType.SLOW_DIGGING);
98+
p.removePotionEffect(PotionEffectType.MINING_FATIGUE);
9999
}
100100

101101
public static void applyEffect(Player p){

0 commit comments

Comments
 (0)