Skip to content

Commit 6c47e64

Browse files
authored
Merge pull request #79 from TheNextLvl-net/update
Refactor brush settings and menus to use updated APIs
2 parents 5c335e5 + 34c3359 commit 6c47e64

File tree

8 files changed

+162
-145
lines changed

8 files changed

+162
-145
lines changed

api/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ dependencies {
3535
}
3636

3737
api("net.thenextlvl.core:i18n:1.0.20")
38-
api("net.thenextlvl.core:paper:1.5.3")
38+
api("net.thenextlvl.core:paper:2.0.3")
3939

4040
annotationProcessor("org.projectlombok:lombok:1.18.36")
4141
}

api/src/main/java/net/thenextlvl/gopaint/api/brush/BrushController.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import net.thenextlvl.gopaint.api.brush.setting.PlayerBrushSettings;
55
import org.bukkit.entity.Player;
66
import org.bukkit.inventory.ItemStack;
7-
import org.bukkit.inventory.meta.ItemMeta;
87
import org.jspecify.annotations.NullMarked;
98

109
import java.util.Optional;
@@ -30,14 +29,6 @@ public interface BrushController {
3029
*/
3130
Optional<ItemBrushSettings> parseBrushSettings(ItemStack itemStack);
3231

33-
/**
34-
* Parses the brush settings from the given item metadata.
35-
*
36-
* @param itemMeta The metadata to parse the brush settings from.
37-
* @return An optional containing the parsed brush settings, or empty if the meta does not contain brush settings.
38-
*/
39-
Optional<ItemBrushSettings> parseBrushSettings(ItemMeta itemMeta);
40-
4132
/**
4233
* Removes the brush settings for a specific player.
4334
*

build.gradle.kts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import net.minecrell.pluginyml.paper.PaperPluginDescription
44

55
plugins {
66
id("java")
7-
id("java-library")
87

98
id("io.github.goooler.shadow") version "8.1.8"
109
id("io.papermc.hangar-publish-plugin") version "0.1.2"
@@ -18,7 +17,6 @@ version = "1.4.0"
1817

1918
repositories {
2019
mavenCentral()
21-
maven("https://jitpack.io")
2220
maven("https://repo.thenextlvl.net/releases")
2321
maven("https://repo.papermc.io/repository/maven-public/")
2422
}
@@ -27,11 +25,9 @@ dependencies {
2725
compileOnly("org.projectlombok:lombok:1.18.36")
2826
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
2927

28+
implementation("net.thenextlvl.core:adapters:2.0.1")
3029
implementation("org.bstats:bstats-bukkit:3.1.0")
31-
32-
api("net.thenextlvl.core:adapters:2.0.1")
33-
34-
api(project(":api"))
30+
implementation(project(":api"))
3531

3632
annotationProcessor("org.projectlombok:lombok:1.18.36")
3733
}

src/main/java/net/thenextlvl/gopaint/brush/CraftBrushController.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,15 @@
3232
import org.bukkit.NamespacedKey;
3333
import org.bukkit.entity.Player;
3434
import org.bukkit.inventory.ItemStack;
35-
import org.bukkit.inventory.meta.ItemMeta;
3635
import org.bukkit.persistence.PersistentDataType;
3736
import org.jspecify.annotations.NullMarked;
3837

39-
import java.util.*;
38+
import java.util.Arrays;
39+
import java.util.HashMap;
40+
import java.util.Map;
41+
import java.util.Objects;
42+
import java.util.Optional;
43+
import java.util.UUID;
4044

4145
@NullMarked
4246
@RequiredArgsConstructor
@@ -52,14 +56,7 @@ public PlayerBrushSettings getBrushSettings(Player player) {
5256

5357
@Override
5458
public Optional<ItemBrushSettings> parseBrushSettings(ItemStack itemStack) {
55-
if (!itemStack.hasItemMeta()) return Optional.empty();
56-
return Optional.ofNullable(itemStack.getItemMeta())
57-
.flatMap(this::parseBrushSettings);
58-
}
59-
60-
@Override
61-
public Optional<ItemBrushSettings> parseBrushSettings(ItemMeta itemMeta) {
62-
var container = itemMeta.getPersistentDataContainer();
59+
var container = itemStack.getPersistentDataContainer();
6360

6461
var brushSize = container.get(new NamespacedKey("gopaint", "size"), PersistentDataType.INTEGER);
6562
var maskEnabled = container.get(new NamespacedKey("gopaint", "mask_enabled"), PersistentDataType.BOOLEAN);

src/main/java/net/thenextlvl/gopaint/brush/setting/CraftPlayerBrushSettings.java

Lines changed: 67 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
package net.thenextlvl.gopaint.brush.setting;
2020

2121
import core.paper.gui.AbstractGUI;
22+
import io.papermc.paper.datacomponent.DataComponentTypes;
23+
import io.papermc.paper.datacomponent.item.ItemLore;
2224
import lombok.Getter;
2325
import net.kyori.adventure.key.Key;
2426
import net.kyori.adventure.text.Component;
@@ -29,7 +31,15 @@
2931
import net.thenextlvl.gopaint.api.brush.setting.ItemBrushSettings;
3032
import net.thenextlvl.gopaint.api.brush.setting.PlayerBrushSettings;
3133
import net.thenextlvl.gopaint.api.model.SurfaceMode;
32-
import net.thenextlvl.gopaint.brush.standard.*;
34+
import net.thenextlvl.gopaint.brush.standard.AngleBrush;
35+
import net.thenextlvl.gopaint.brush.standard.DiskBrush;
36+
import net.thenextlvl.gopaint.brush.standard.FractureBrush;
37+
import net.thenextlvl.gopaint.brush.standard.GradientBrush;
38+
import net.thenextlvl.gopaint.brush.standard.OverlayBrush;
39+
import net.thenextlvl.gopaint.brush.standard.PaintBrush;
40+
import net.thenextlvl.gopaint.brush.standard.SplatterBrush;
41+
import net.thenextlvl.gopaint.brush.standard.SprayBrush;
42+
import net.thenextlvl.gopaint.brush.standard.UnderlayBrush;
3343
import net.thenextlvl.gopaint.menu.BrushesMenu;
3444
import net.thenextlvl.gopaint.menu.MainMenu;
3545
import org.bukkit.Axis;
@@ -238,62 +248,63 @@ public PatternBrush getPreviousBrush(@Nullable PatternBrush brush) {
238248
@Override
239249
public boolean exportSettings(ItemStack itemStack) {
240250
if (itemStack.getType().equals(plugin.config().brushConfig().defaultBrushType())) return false;
241-
return !itemStack.getType().isBlock() && itemStack.editMeta(itemMeta -> {
242-
var lore = new ArrayList<Component>();
243-
lore.add(Component.empty());
244-
lore.add(plugin.bundle().component(player, "brush.exported.size",
245-
Placeholder.parsed("size", String.valueOf(getBrushSize()))));
246-
if (getBrush() instanceof SprayBrush) {
247-
lore.add(plugin.bundle().component(player, "brush.exported.chance",
248-
Placeholder.parsed("chance", String.valueOf(getChance()))));
249-
} else if (getBrush() instanceof OverlayBrush || getBrush() instanceof UnderlayBrush) {
250-
lore.add(plugin.bundle().component(player, "brush.exported.thickness",
251-
Placeholder.parsed("thickness", String.valueOf(getThickness()))));
252-
} else if (getBrush() instanceof DiskBrush) {
253-
lore.add(plugin.bundle().component(player, "brush.exported.axis",
254-
Placeholder.parsed("axis", getAxis().name())));
255-
} else if (getBrush() instanceof AngleBrush) {
256-
lore.add(plugin.bundle().component(player, "brush.exported.angle.distance",
257-
Placeholder.parsed("distance", String.valueOf(getAngleDistance()))));
258-
lore.add(plugin.bundle().component(player, "brush.exported.angle.height",
259-
Placeholder.parsed("height", String.valueOf(getAngleHeightDifference()))));
260-
} else if (getBrush() instanceof SplatterBrush || getBrush() instanceof PaintBrush) {
261-
lore.add(plugin.bundle().component(player, "brush.exported.falloff",
262-
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
263-
} else if (getBrush() instanceof GradientBrush) {
264-
lore.add(plugin.bundle().component(player, "brush.exported.mixing",
265-
Placeholder.parsed("mixing", String.valueOf(getMixingStrength()))));
266-
lore.add(plugin.bundle().component(player, "brush.exported.falloff",
267-
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
268-
} else if (getBrush() instanceof FractureBrush) {
269-
lore.add(plugin.bundle().component(player, "brush.exported.fracture",
270-
Placeholder.parsed("fracture", String.valueOf(getFractureStrength()))));
271-
}
272-
if (!blocks.isEmpty()) {
273-
var blocks = getBlocks().stream()
274-
.map(Material::translationKey)
275-
.map(Component::translatable)
276-
.toList();
277-
lore.add(plugin.bundle().component(player, "brush.exported.blocks",
278-
Placeholder.component("blocks", Component.join(JoinConfiguration.commas(true), blocks))));
279-
}
280-
281-
if (isMaskEnabled()) {
282-
lore.add(plugin.bundle().component(player, "brush.exported.mask",
283-
Placeholder.component("mask", Component.translatable(getMask().translationKey()))));
284-
}
285-
286-
if (!getSurfaceMode().equals(SurfaceMode.DISABLED)) {
287-
var mode = plugin.bundle().component(player, getSurfaceMode().translationKey());
288-
lore.add(plugin.bundle().component(player, "brush.exported.surface-mode",
289-
Placeholder.component("mode", mode)));
290-
}
291-
292-
itemMeta.itemName(plugin.bundle().component(player, "brush.exported.name",
293-
Placeholder.component("brush", getBrush().getName(player))));
294-
itemMeta.lore(lore);
295-
itemMeta.setEnchantmentGlintOverride(true);
296251

252+
var lines = new ArrayList<Component>();
253+
lines.add(Component.empty());
254+
lines.add(plugin.bundle().component(player, "brush.exported.size",
255+
Placeholder.parsed("size", String.valueOf(getBrushSize()))));
256+
if (getBrush() instanceof SprayBrush) {
257+
lines.add(plugin.bundle().component(player, "brush.exported.chance",
258+
Placeholder.parsed("chance", String.valueOf(getChance()))));
259+
} else if (getBrush() instanceof OverlayBrush || getBrush() instanceof UnderlayBrush) {
260+
lines.add(plugin.bundle().component(player, "brush.exported.thickness",
261+
Placeholder.parsed("thickness", String.valueOf(getThickness()))));
262+
} else if (getBrush() instanceof DiskBrush) {
263+
lines.add(plugin.bundle().component(player, "brush.exported.axis",
264+
Placeholder.parsed("axis", getAxis().name())));
265+
} else if (getBrush() instanceof AngleBrush) {
266+
lines.add(plugin.bundle().component(player, "brush.exported.angle.distance",
267+
Placeholder.parsed("distance", String.valueOf(getAngleDistance()))));
268+
lines.add(plugin.bundle().component(player, "brush.exported.angle.height",
269+
Placeholder.parsed("height", String.valueOf(getAngleHeightDifference()))));
270+
} else if (getBrush() instanceof SplatterBrush || getBrush() instanceof PaintBrush) {
271+
lines.add(plugin.bundle().component(player, "brush.exported.falloff",
272+
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
273+
} else if (getBrush() instanceof GradientBrush) {
274+
lines.add(plugin.bundle().component(player, "brush.exported.mixing",
275+
Placeholder.parsed("mixing", String.valueOf(getMixingStrength()))));
276+
lines.add(plugin.bundle().component(player, "brush.exported.falloff",
277+
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
278+
} else if (getBrush() instanceof FractureBrush) {
279+
lines.add(plugin.bundle().component(player, "brush.exported.fracture",
280+
Placeholder.parsed("fracture", String.valueOf(getFractureStrength()))));
281+
}
282+
if (!blocks.isEmpty()) {
283+
var blocks = getBlocks().stream()
284+
.map(Material::translationKey)
285+
.map(Component::translatable)
286+
.toList();
287+
lines.add(plugin.bundle().component(player, "brush.exported.blocks",
288+
Placeholder.component("blocks", Component.join(JoinConfiguration.commas(true), blocks))));
289+
}
290+
291+
if (isMaskEnabled()) {
292+
lines.add(plugin.bundle().component(player, "brush.exported.mask",
293+
Placeholder.component("mask", Component.translatable(getMask().translationKey()))));
294+
}
295+
296+
if (!getSurfaceMode().equals(SurfaceMode.DISABLED)) {
297+
var mode = plugin.bundle().component(player, getSurfaceMode().translationKey());
298+
lines.add(plugin.bundle().component(player, "brush.exported.surface-mode",
299+
Placeholder.component("mode", mode)));
300+
}
301+
302+
itemStack.setData(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, true);
303+
itemStack.setData(DataComponentTypes.ITEM_NAME, plugin.bundle().component(player, "brush.exported.name",
304+
Placeholder.component("brush", getBrush().getName(player))));
305+
itemStack.setData(DataComponentTypes.LORE, ItemLore.lore(lines));
306+
307+
return !itemStack.getType().isBlock() && itemStack.editMeta(itemMeta -> {
297308
var container = itemMeta.getPersistentDataContainer();
298309

299310
container.set(new NamespacedKey("gopaint", "size"), PersistentDataType.INTEGER, getBrushSize());

src/main/java/net/thenextlvl/gopaint/command/GoPaintCommand.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.mojang.brigadier.Command;
44
import com.mojang.brigadier.arguments.IntegerArgumentType;
55
import com.mojang.brigadier.context.CommandContext;
6-
import core.paper.item.ItemBuilder;
76
import io.papermc.paper.command.brigadier.CommandSourceStack;
87
import io.papermc.paper.command.brigadier.Commands;
98
import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
@@ -15,13 +14,13 @@
1514
import net.thenextlvl.gopaint.api.brush.PatternBrush;
1615
import net.thenextlvl.gopaint.api.model.GoPaintProvider;
1716
import org.bukkit.entity.Player;
17+
import org.bukkit.inventory.ItemStack;
1818
import org.jspecify.annotations.NullMarked;
1919

2020
import java.util.List;
2121

2222
@NullMarked
2323
@RequiredArgsConstructor
24-
@SuppressWarnings("UnstableApiUsage")
2524
public class GoPaintCommand {
2625
private final GoPaintPlugin plugin;
2726

@@ -171,15 +170,15 @@ private boolean giveWand(Player player) {
171170
}
172171

173172
if (inventory.getItemInMainHand().isEmpty()) {
174-
inventory.setItemInMainHand(new ItemBuilder(type));
173+
inventory.setItemInMainHand(new ItemStack(type));
175174
return true;
176175
}
177176

178177
var empty = inventory.firstEmpty();
179178
if (empty == -1) return false;
180179

181180
inventory.setItem(empty, inventory.getItemInMainHand());
182-
inventory.setItemInMainHand(new ItemBuilder(type));
181+
inventory.setItemInMainHand(new ItemStack(type));
183182
return true;
184183
}
185184
}

src/main/java/net/thenextlvl/gopaint/menu/BrushesMenu.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package net.thenextlvl.gopaint.menu;
22

3-
import core.paper.gui.PagedGUI;
3+
import core.paper.gui.PaginatedGUI;
44
import core.paper.item.ActionItem;
55
import core.paper.item.ItemBuilder;
66
import lombok.Getter;
@@ -17,8 +17,8 @@
1717
import java.util.stream.IntStream;
1818

1919
@NullMarked
20-
public class BrushesMenu extends PagedGUI<GoPaintProvider, PatternBrush> {
21-
private final @Getter Options options = new Options(
20+
public class BrushesMenu extends PaginatedGUI<GoPaintProvider, PatternBrush> {
21+
private final @Getter Pagination pagination = new Pagination(
2222
IntStream.range(0, getSize() - 9).toArray(),
2323
getSize() - 6,
2424
getSize() - 4
@@ -33,14 +33,14 @@ public BrushesMenu(GoPaintProvider plugin, PlayerBrushSettings settings, Player
3333

3434
@Override
3535
public void formatDefault() {
36-
var placeholder = new ItemBuilder(Material.GRAY_STAINED_GLASS_PANE).hideTooltip(true);
36+
var placeholder = ItemBuilder.of(Material.GRAY_STAINED_GLASS_PANE).hideTooltip();
3737
IntStream.range(0, getSize()).forEach(value -> setSlotIfAbsent(value, placeholder));
3838
}
3939

4040
@Override
4141
public ActionItem constructItem(PatternBrush brush) {
42-
return new ItemBuilder(Material.PLAYER_HEAD)
43-
.headValue(brush.getHeadValue())
42+
return ItemBuilder.of(Material.PLAYER_HEAD)
43+
.profileValue(brush.getHeadValue())
4444
.itemName(brush.getName(owner).color(NamedTextColor.GOLD))
4545
.lore(brush.getDescription(owner))
4646
.withAction(() -> {

0 commit comments

Comments
 (0)