diff --git a/src/main/java/net/thenextlvl/gopaint/GoPaintPlugin.java b/src/main/java/net/thenextlvl/gopaint/GoPaintPlugin.java index 2442b822..68b96fab 100644 --- a/src/main/java/net/thenextlvl/gopaint/GoPaintPlugin.java +++ b/src/main/java/net/thenextlvl/gopaint/GoPaintPlugin.java @@ -16,7 +16,6 @@ import net.thenextlvl.gopaint.api.brush.BrushController; import net.thenextlvl.gopaint.api.brush.BrushRegistry; import net.thenextlvl.gopaint.api.model.GoPaintProvider; -import net.thenextlvl.gopaint.api.model.MaskMode; import net.thenextlvl.gopaint.api.model.PluginConfig; import net.thenextlvl.gopaint.api.model.SurfaceMode; import net.thenextlvl.gopaint.brush.CraftBrushController; @@ -57,7 +56,7 @@ public class GoPaintPlugin extends JavaPlugin implements GoPaintProvider { private final FileIO configFile = new GsonFile<>(IO.of(getDataFolder(), "config.json"), new PluginConfig( new PluginConfig.BrushConfig(Material.FEATHER, new NamespacedKey("gopaint", "sphere_brush"), 100, 10, 50, - Axis.Y, 50, 50, Set.of("disabled"), true, Material.SPONGE, MaskMode.INTERFACE, SurfaceMode.DIRECT, + Axis.Y, 50, 50, Set.of("disabled"), true, Material.SPONGE, true, SurfaceMode.EXPOSED, List.of(Material.STONE)), new PluginConfig.ThicknessConfig(1, 5), new PluginConfig.AngleConfig(2, 5, 10, 40, 85), diff --git a/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushController.java b/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushController.java index 133f3b41..90e38a1a 100644 --- a/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushController.java +++ b/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushController.java @@ -24,7 +24,6 @@ import net.thenextlvl.gopaint.api.brush.BrushController; import net.thenextlvl.gopaint.api.brush.setting.ItemBrushSettings; import net.thenextlvl.gopaint.api.brush.setting.PlayerBrushSettings; -import net.thenextlvl.gopaint.api.model.MaskMode; import net.thenextlvl.gopaint.api.model.SurfaceMode; import net.thenextlvl.gopaint.brush.setting.CraftItemBrushSettings; import net.thenextlvl.gopaint.brush.setting.CraftPlayerBrushSettings; @@ -61,10 +60,7 @@ public Optional parseBrushSettings(ItemMeta itemMeta) { var container = itemMeta.getPersistentDataContainer(); var brushSize = container.get(new NamespacedKey("gopaint", "size"), PersistentDataType.INTEGER); - - var maskMode = Optional.ofNullable(container.get(new NamespacedKey("gopaint", "mask_mode"), PersistentDataType.STRING)) - .map(MaskMode::valueOf) - .orElse(null); + var maskEnabled = container.get(new NamespacedKey("gopaint", "mask_enabled"), PersistentDataType.BOOLEAN); var surfaceMode = Optional.ofNullable(container.get(new NamespacedKey("gopaint", "surface_mode"), PersistentDataType.STRING)) .map(SurfaceMode::valueOf) @@ -75,7 +71,7 @@ public Optional parseBrushSettings(ItemMeta itemMeta) { .flatMap(plugin.brushRegistry()::getBrush) .orElse(null); - if (brushSize == null || maskMode == null || surfaceMode == null || brush == null) + if (brushSize == null || maskEnabled == null || surfaceMode == null || brush == null) return Optional.empty(); var chance = container.getOrDefault(new NamespacedKey("gopaint", "chance"), PersistentDataType.INTEGER, 0); @@ -92,7 +88,7 @@ public Optional parseBrushSettings(ItemMeta itemMeta) { .orElse(Axis.Y); var mask = Optional.ofNullable(container.get(new NamespacedKey("gopaint", "mask"), PersistentDataType.STRING)) .map(Material::matchMaterial) - .orElse(null); + .orElseThrow(); var blocks = Optional.ofNullable(container.get(new NamespacedKey("gopaint", "blocks"), PersistentDataType.STRING)) .map(string -> string.split(",")) .stream() @@ -103,7 +99,7 @@ public Optional parseBrushSettings(ItemMeta itemMeta) { return Optional.of(CraftItemBrushSettings.builder() .brushSize(brushSize) - .maskMode(maskMode) + .maskEnabled(maskEnabled) .surfaceMode(surfaceMode) .brush(brush) .chance(chance) diff --git a/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushRegistry.java b/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushRegistry.java index e405523e..9a380c55 100644 --- a/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushRegistry.java +++ b/src/main/java/net/thenextlvl/gopaint/brush/CraftBrushRegistry.java @@ -3,7 +3,7 @@ import com.google.common.base.Preconditions; import net.kyori.adventure.key.Key; import net.thenextlvl.gopaint.GoPaintPlugin; -import net.thenextlvl.gopaint.api.brush.Brush; +import net.thenextlvl.gopaint.api.brush.PatternBrush; import net.thenextlvl.gopaint.api.brush.BrushRegistry; import net.thenextlvl.gopaint.brush.standard.*; @@ -13,7 +13,7 @@ import java.util.stream.Stream; public class CraftBrushRegistry implements BrushRegistry { - private final List brushes = new LinkedList<>(); + private final List brushes = new LinkedList<>(); public CraftBrushRegistry(GoPaintPlugin plugin) { registerBrush(new SphereBrush(plugin)); @@ -30,28 +30,28 @@ public CraftBrushRegistry(GoPaintPlugin plugin) { } @Override - public Stream getBrushes() { + public Stream getBrushes() { return brushes.stream().sorted(); } @Override - public boolean isRegistered(Brush brush) { + public boolean isRegistered(PatternBrush brush) { return brushes.contains(brush); } @Override - public void registerBrush(Brush brush) throws IllegalStateException { + public void registerBrush(PatternBrush brush) throws IllegalStateException { Preconditions.checkState(!isRegistered(brush), "Brush already registered"); brushes.add(brush); } @Override - public void unregisterBrush(Brush brush) throws IllegalStateException { + public void unregisterBrush(PatternBrush brush) throws IllegalStateException { if (!brushes.remove(brush)) throw new IllegalStateException("Brush not registered"); } @Override - public Optional getBrush(Key key) { + public Optional getBrush(Key key) { return brushes.stream() .filter(brush -> brush.key().equals(key)) .findAny(); diff --git a/src/main/java/net/thenextlvl/gopaint/brush/setting/CraftPlayerBrushSettings.java b/src/main/java/net/thenextlvl/gopaint/brush/setting/CraftPlayerBrushSettings.java index 41d094b2..a3c3b2df 100644 --- a/src/main/java/net/thenextlvl/gopaint/brush/setting/CraftPlayerBrushSettings.java +++ b/src/main/java/net/thenextlvl/gopaint/brush/setting/CraftPlayerBrushSettings.java @@ -25,7 +25,7 @@ import net.kyori.adventure.text.JoinConfiguration; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.thenextlvl.gopaint.GoPaintPlugin; -import net.thenextlvl.gopaint.api.brush.Brush; +import net.thenextlvl.gopaint.api.brush.PatternBrush; import net.thenextlvl.gopaint.api.brush.setting.ItemBrushSettings; import net.thenextlvl.gopaint.api.brush.setting.PlayerBrushSettings; import net.thenextlvl.gopaint.api.model.SurfaceMode; @@ -66,7 +66,7 @@ public final class CraftPlayerBrushSettings implements PlayerBrushSettings { private boolean maskEnabled; private SurfaceMode surfaceMode; - private Brush brush; + private PatternBrush brush; private Material mask; private final List blocks = new ArrayList<>(); @@ -130,7 +130,7 @@ public void removeBlock(int slot) { } @Override - public void setBrush(Brush brush) { + public void setBrush(PatternBrush brush) { this.brush = brush; mainMenu.updateBrush(); } @@ -216,7 +216,7 @@ public void setFractureStrength(@Range(from = 1, to = Integer.MAX_VALUE) int fra } @Override - public Brush getNextBrush(@Nullable Brush brush) { + public PatternBrush getNextBrush(@Nullable PatternBrush brush) { var brushes = plugin.brushRegistry().getBrushes().toList(); if (brush == null) return brushes.getFirst(); int next = brushes.indexOf(brush) + 1; @@ -225,7 +225,7 @@ public Brush getNextBrush(@Nullable Brush brush) { } @Override - public Brush getPreviousBrush(@Nullable Brush brush) { + public PatternBrush getPreviousBrush(@Nullable PatternBrush brush) { var brushes = plugin.brushRegistry().getBrushes().toList(); if (brush == null) return brushes.getFirst(); int back = brushes.indexOf(brush) - 1; diff --git a/src/main/java/net/thenextlvl/gopaint/command/GoPaintCommand.java b/src/main/java/net/thenextlvl/gopaint/command/GoPaintCommand.java index 57f8010e..f5929321 100644 --- a/src/main/java/net/thenextlvl/gopaint/command/GoPaintCommand.java +++ b/src/main/java/net/thenextlvl/gopaint/command/GoPaintCommand.java @@ -11,7 +11,7 @@ import net.kyori.adventure.key.Key; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.thenextlvl.gopaint.GoPaintPlugin; -import net.thenextlvl.gopaint.api.brush.Brush; +import net.thenextlvl.gopaint.api.brush.PatternBrush; import net.thenextlvl.gopaint.api.model.GoPaintProvider; import org.bukkit.entity.Player; @@ -36,7 +36,7 @@ public void register() { .then(Commands.argument("brush", ArgumentTypes.key()) .suggests((context, builder) -> { plugin.brushRegistry().getBrushes() - .map(Brush::key) + .map(PatternBrush::key) .map(Key::asString) .filter(key -> key.contains(builder.getRemaining())) .forEach(builder::suggest); diff --git a/src/main/java/net/thenextlvl/gopaint/listener/InventoryListener.java b/src/main/java/net/thenextlvl/gopaint/listener/InventoryListener.java index 7a6e6398..c46253ad 100644 --- a/src/main/java/net/thenextlvl/gopaint/listener/InventoryListener.java +++ b/src/main/java/net/thenextlvl/gopaint/listener/InventoryListener.java @@ -20,7 +20,6 @@ import lombok.RequiredArgsConstructor; import net.thenextlvl.gopaint.GoPaintPlugin; -import net.thenextlvl.gopaint.api.model.MaskMode; import net.thenextlvl.gopaint.api.model.SurfaceMode; import net.thenextlvl.gopaint.brush.standard.*; import net.thenextlvl.gopaint.menu.MainMenu; @@ -150,16 +149,12 @@ public void menuClick(InventoryClickEvent event) { settings.setBrushSize(settings.getBrushSize() - 10); } } else if (event.getRawSlot() == 15 || event.getRawSlot() == 6 || event.getRawSlot() == 24) { - settings.setMaskMode(switch (settings.getMaskMode()) { - case INTERFACE -> MaskMode.WORLDEDIT; - case WORLDEDIT -> MaskMode.DISABLED; - case DISABLED -> MaskMode.INTERFACE; - }); + settings.setMaskEnabled(!settings.isMaskEnabled()); } else if (event.getRawSlot() == 16 || event.getRawSlot() == 7 || event.getRawSlot() == 25) { settings.setSurfaceMode(switch (settings.getSurfaceMode()) { - case DIRECT -> SurfaceMode.RELATIVE; - case RELATIVE -> SurfaceMode.DISABLED; - case DISABLED -> SurfaceMode.DIRECT; + case EXPOSED -> SurfaceMode.VISIBLE; + case VISIBLE -> SurfaceMode.DISABLED; + case DISABLED -> SurfaceMode.EXPOSED; }); } else if ((event.getRawSlot() >= 37 && event.getRawSlot() <= 41) || (event.getRawSlot() >= 46 && event.getRawSlot() <= 50)) { diff --git a/src/main/java/net/thenextlvl/gopaint/menu/BrushesMenu.java b/src/main/java/net/thenextlvl/gopaint/menu/BrushesMenu.java index 4b2316c4..990be91e 100644 --- a/src/main/java/net/thenextlvl/gopaint/menu/BrushesMenu.java +++ b/src/main/java/net/thenextlvl/gopaint/menu/BrushesMenu.java @@ -6,7 +6,7 @@ import lombok.Getter; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.thenextlvl.gopaint.api.brush.Brush; +import net.thenextlvl.gopaint.api.brush.PatternBrush; import net.thenextlvl.gopaint.api.brush.setting.PlayerBrushSettings; import net.thenextlvl.gopaint.api.model.GoPaintProvider; import org.bukkit.Material; @@ -15,7 +15,7 @@ import java.util.Collection; import java.util.stream.IntStream; -public class BrushesMenu extends PagedGUI { +public class BrushesMenu extends PagedGUI { private final @Getter Options options = new Options( IntStream.range(0, getSize() - 9).toArray(), getSize() - 6, @@ -36,7 +36,7 @@ public void formatDefault() { } @Override - public ActionItem constructItem(Brush brush) { + public ActionItem constructItem(PatternBrush brush) { return new ItemBuilder(Material.PLAYER_HEAD) .headValue(brush.getHeadValue()) .itemName(brush.getName(owner).color(NamedTextColor.GOLD)) @@ -54,7 +54,7 @@ public Component getPageFormat(int page) { } @Override - public Collection getElements() { + public Collection getElements() { return plugin.brushRegistry().getBrushes().toList(); } } diff --git a/src/main/java/net/thenextlvl/gopaint/menu/MainMenu.java b/src/main/java/net/thenextlvl/gopaint/menu/MainMenu.java index aaa65025..99a4dad8 100644 --- a/src/main/java/net/thenextlvl/gopaint/menu/MainMenu.java +++ b/src/main/java/net/thenextlvl/gopaint/menu/MainMenu.java @@ -37,7 +37,7 @@ public MainMenu(GoPaintPlugin plugin, PlayerBrushSettings settings, Player owner updateToggle(); updateBrush(); updateSize(); - updateMaskMode(); + updateMaskToggle(); updateSurfaceMode(); updateBlockPalette(); updateMask(); @@ -235,31 +235,20 @@ public void updateToggle() { inventory.setItem(19, placeholder); } - public void updateMaskMode() { - var icon = switch (settings.getMaskMode()) { - case DISABLED -> Material.CARVED_PUMPKIN; - case INTERFACE -> Material.JACK_O_LANTERN; - case WORLDEDIT -> Material.WOODEN_AXE; - }; + public void updateMaskToggle() { + var icon = settings.isMaskEnabled() ? Material.JACK_O_LANTERN : Material.CARVED_PUMPKIN; - var mode = plugin.bundle().component(owner, settings.getMaskMode().translationKey()) - .color(switch (settings.getMaskMode()) { - case DISABLED -> NamedTextColor.RED; - case INTERFACE -> NamedTextColor.GREEN; - case WORLDEDIT -> NamedTextColor.GOLD; - }); + var state = plugin.bundle().component(owner, settings.isMaskEnabled() ? "mask.enabled" : "mask.disabled") + .color(settings.isMaskEnabled() ? NamedTextColor.GREEN : NamedTextColor.RED); inventory.setItem(15, new ItemBuilder(icon) - .itemName(plugin.bundle().component(owner, "mask.mode")) - .lore(plugin.bundle().components(owner, "mask.mode.description", - Placeholder.component("mode", mode))) + .itemName(plugin.bundle().component(owner, "mask.state")) + .lore(plugin.bundle().components(owner, "mask.state.description", + Placeholder.component("state", state))) .itemFlags(ItemFlag.HIDE_ATTRIBUTES)); - var placeholder = new ItemBuilder(switch (settings.getMaskMode()) { - case DISABLED -> Material.RED_STAINED_GLASS_PANE; - case INTERFACE -> Material.LIME_STAINED_GLASS_PANE; - case WORLDEDIT -> Material.ORANGE_STAINED_GLASS_PANE; - }).hideTooltip(true); + var pane = settings.isMaskEnabled() ? Material.LIME_STAINED_GLASS_PANE : Material.RED_STAINED_GLASS_PANE; + var placeholder = new ItemBuilder(pane).hideTooltip(true); inventory.setItem(6, placeholder); inventory.setItem(24, placeholder); @@ -267,16 +256,16 @@ public void updateMaskMode() { public void updateSurfaceMode() { var icon = switch (settings.getSurfaceMode()) { - case DIRECT -> Material.LIGHT_WEIGHTED_PRESSURE_PLATE; + case EXPOSED -> Material.LIGHT_WEIGHTED_PRESSURE_PLATE; case DISABLED -> Material.POLISHED_BLACKSTONE_PRESSURE_PLATE; - case RELATIVE -> Material.HEAVY_WEIGHTED_PRESSURE_PLATE; + case VISIBLE -> Material.HEAVY_WEIGHTED_PRESSURE_PLATE; }; var mode = plugin.bundle().component(owner, settings.getSurfaceMode().translationKey()) .color(switch (settings.getSurfaceMode()) { - case DIRECT -> NamedTextColor.GREEN; + case EXPOSED -> NamedTextColor.GREEN; case DISABLED -> NamedTextColor.RED; - case RELATIVE -> NamedTextColor.GOLD; + case VISIBLE -> NamedTextColor.GOLD; }); inventory.setItem(16, new ItemBuilder(icon) @@ -286,9 +275,9 @@ public void updateSurfaceMode() { .itemFlags(ItemFlag.HIDE_ATTRIBUTES)); var placeholder = new ItemBuilder(switch (settings.getSurfaceMode()) { - case DIRECT -> Material.LIME_STAINED_GLASS_PANE; + case EXPOSED -> Material.LIME_STAINED_GLASS_PANE; case DISABLED -> Material.RED_STAINED_GLASS_PANE; - case RELATIVE -> Material.ORANGE_STAINED_GLASS_PANE; + case VISIBLE -> Material.ORANGE_STAINED_GLASS_PANE; }).hideTooltip(true); inventory.setItem(7, placeholder); diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index eef76ac1..809439c5 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -1,8 +1,9 @@ -prefix=goPaint> +prefix=goPaint > command.gopaint.brush.disabled= Disabled brush command.gopaint.brush.enabled= Enabled brush command.gopaint.brush.size= Brush size set to: command.gopaint.reloaded= Reloaded +brush.block.sight= There is no block in sight. brush.disabled= Your brush is disabled, left click to enable the brush or type /gp toggle. brush.paint.point.set= Paint brush point # set. brush.state.enabled=Enabled @@ -14,15 +15,14 @@ brush.toggle.description=\ Click without an item to toggle menu.main.title=goPaint Menu menu.brushes.title=goPaint Brushes -mask.mode.disabled=Disabled -mask.mode.interface=Interface -mask.mode.worldedit=WorldEdit -mask.mode=Mask Mode -mask.mode.description=\ +mask.enabled=Enabled +mask.disabled=Disabled +mask.state=Mask +mask.state.description=\ Click to cycle -surface.mode.direct=Direct surface.mode.disabled=Disabled -surface.mode.relative=Relative +surface.mode.exposed=Exposed +surface.mode.visible=Visible surface.mode=Surface Mode surface.mode.description=\ Click to cycle @@ -67,7 +67,8 @@ slot.set.description=\ Right click to clear mask.block=Current Mask mask.block.description=\ - Click with a block to change + Click with a block to change\ + Right click to clear brush.size=Brush Size: brush.size.description=\ Left click to increase\ @@ -155,6 +156,5 @@ brush.exported.falloff=Falloff strength: brush.exported.mixing=Mixing strength: brush.exported.fracture=Fracture strength: brush.exported.blocks=Blocks: -brush.exported.mask-mode=Mask mode: brush.exported.surface-mode=Surface mode: brush.exported.mask=Mask: \ No newline at end of file diff --git a/src/main/resources/messages_german.properties b/src/main/resources/messages_german.properties index 4e6615c9..498468db 100644 --- a/src/main/resources/messages_german.properties +++ b/src/main/resources/messages_german.properties @@ -2,6 +2,7 @@ command.gopaint.brush.disabled= Der Pinsel wurde deaktiviert command.gopaint.brush.enabled= Der Pinsel wurde aktiviert command.gopaint.brush.size= Die Pinselgröße wurde geändert: command.gopaint.reloaded= Die Konfiguration wurde neu geladen +brush.block.sight= Es ist kein Block in Sicht. brush.disabled= Dein Pinsel ist deaktiviert, linksklick um den Pinsel zu aktivieren oder nutze /gp toggle. brush.paint.point.set= Der Pinselstrich # wurde gesetzt. brush.state.enabled=Aktiviert @@ -13,15 +14,14 @@ brush.toggle.description=\ Klicke ohne Item zum Umschalten menu.main.title=goPaint Menü menu.brushes.title=goPaint Pinsel -mask.mode.disabled=Deaktiviert -mask.mode.interface=Schnittstelle -mask.mode.worldedit=WorldEdit -mask.mode=Maskenmodus -mask.mode.description=\ +mask.enabled=Aktiviert +mask.disabled=Deaktiviert +mask.state=Maske +mask.state.description=\ Klicke zum Anpassen -surface.mode.direct=Direkt +surface.mode.exposed=Freiliegend +surface.mode.visible=Sichtbar surface.mode.disabled=Deaktiviert -surface.mode.relative=Relativ surface.mode=Oberflächenmodus surface.mode.description=\ Klicke zum Anpassen @@ -154,6 +154,5 @@ brush.exported.falloff=Fallstärke: brush.exported.mixing=Mix-Stärke: brush.exported.fracture=Fraktur-Prüfdistanz: brush.exported.blocks=Blöcke: -brush.exported.mask-mode=Maskenmodus: brush.exported.surface-mode=Oberflächenmodus: brush.exported.mask=Maske: \ No newline at end of file