Skip to content

Commit 13c6ed3

Browse files
authored
Merge pull request #20 from TheNextLvl-net/general-changes
General changes
2 parents 015f98d + c2efe6b commit 13c6ed3

File tree

13 files changed

+167
-75
lines changed

13 files changed

+167
-75
lines changed

api/src/main/java/net/thenextlvl/gopaint/api/brush/setting/PlayerBrushSettings.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ public interface PlayerBrushSettings extends BrushSettings {
4343
* Exports the brush settings visually onto the given ItemStack.
4444
*
4545
* @param itemStack The ItemStack to export the brush settings to.
46+
* @return whether the settings could be exported to the item
4647
*/
47-
void exportSettings(ItemStack itemStack);
48+
boolean exportSettings(ItemStack itemStack);
4849

4950
/**
5051
* Imports the item brush settings.

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ paper {
4040
main = "net.thenextlvl.gopaint.GoPaintPlugin"
4141
authors = listOf("Arcaniax", "TheMeinerLP", "NonSwag")
4242
apiVersion = "1.20"
43+
foliaSupported = true
4344

4445
serverDependencies {
4546
register("FastAsyncWorldEdit") {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public CraftBrushRegistry(GoPaintPlugin plugin) {
1919
registerBrush(new SphereBrush(plugin));
2020
registerBrush(new SprayBrush(plugin));
2121
registerBrush(new SplatterBrush(plugin));
22-
registerBrush(new DiscBrush(plugin));
22+
registerBrush(new DiskBrush(plugin));
2323
registerBrush(new BucketBrush(plugin));
2424
registerBrush(new AngleBrush(plugin));
2525
registerBrush(new OverlayBrush(plugin));

src/main/java/net/thenextlvl/gopaint/brush/pattern/SplatterPattern.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws W
2222
}
2323

2424
private double getRate(BlockVector3 position) {
25-
var size = (double) settings().getBrushSize();
26-
var falloff = (100.0 - (double) settings().getFalloffStrength()) / 100.0;
25+
var size = settings().getBrushSize() / 2;
26+
var falloff = (100 - settings().getFalloffStrength()) / 100d;
2727
return (position.distance(position()) - size * falloff) / (size - size * falloff);
2828
}
2929
}

src/main/java/net/thenextlvl/gopaint/brush/pattern/SprayPattern.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public record SprayPattern(
1717

1818
@Override
1919
public boolean apply(Extent extent, BlockVector3 get, BlockVector3 set) throws WorldEditException {
20-
if (settings.getRandom().nextInt(100) < settings.getChance()) return false;
20+
if (settings.getRandom().nextInt(100) >= settings.getChance()) return false;
2121
return set.setBlock(extent, getRandomBlockState());
2222
}
2323
}

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

Lines changed: 53 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -234,58 +234,59 @@ public PatternBrush getPreviousBrush(@Nullable PatternBrush brush) {
234234
}
235235

236236
@Override
237-
public void exportSettings(ItemStack itemStack) {
238-
var lore = new ArrayList<Component>();
239-
lore.add(Component.empty());
240-
lore.add(plugin.bundle().component(player, "brush.exported.size",
241-
Placeholder.parsed("size", String.valueOf(getBrushSize()))));
242-
if (getBrush() instanceof SprayBrush) {
243-
lore.add(plugin.bundle().component(player, "brush.exported.chance",
244-
Placeholder.parsed("chance", String.valueOf(getChance()))));
245-
} else if (getBrush() instanceof OverlayBrush || getBrush() instanceof UnderlayBrush) {
246-
lore.add(plugin.bundle().component(player, "brush.exported.thickness",
247-
Placeholder.parsed("thickness", String.valueOf(getThickness()))));
248-
} else if (getBrush() instanceof DiscBrush) {
249-
lore.add(plugin.bundle().component(player, "brush.exported.axis",
250-
Placeholder.parsed("axis", getAxis().name())));
251-
} else if (getBrush() instanceof AngleBrush) {
252-
lore.add(plugin.bundle().component(player, "brush.exported.angle.distance",
253-
Placeholder.parsed("distance", String.valueOf(getAngleDistance()))));
254-
lore.add(plugin.bundle().component(player, "brush.exported.angle.height",
255-
Placeholder.parsed("height", String.valueOf(getAngleHeightDifference()))));
256-
} else if (getBrush() instanceof SplatterBrush || getBrush() instanceof PaintBrush) {
257-
lore.add(plugin.bundle().component(player, "brush.exported.falloff",
258-
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
259-
} else if (getBrush() instanceof GradientBrush) {
260-
lore.add(plugin.bundle().component(player, "brush.exported.mixing",
261-
Placeholder.parsed("mixing", String.valueOf(getMixingStrength()))));
262-
lore.add(plugin.bundle().component(player, "brush.exported.falloff",
263-
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
264-
} else if (getBrush() instanceof FractureBrush) {
265-
lore.add(plugin.bundle().component(player, "brush.exported.fracture",
266-
Placeholder.parsed("fracture", String.valueOf(getFractureStrength()))));
267-
}
268-
if (!blocks.isEmpty()) {
269-
var blocks = getBlocks().stream()
270-
.map(Material::translationKey)
271-
.map(Component::translatable)
272-
.toList();
273-
lore.add(plugin.bundle().component(player, "brush.exported.blocks",
274-
Placeholder.component("blocks", Component.join(JoinConfiguration.commas(true), blocks))));
275-
}
276-
277-
if (isMaskEnabled()) {
278-
lore.add(plugin.bundle().component(player, "brush.exported.mask",
279-
Placeholder.component("mask", Component.translatable(getMask().translationKey()))));
280-
}
281-
282-
if (!getSurfaceMode().equals(SurfaceMode.DISABLED)) {
283-
var mode = plugin.bundle().component(player, getSurfaceMode().translationKey());
284-
lore.add(plugin.bundle().component(player, "brush.exported.surface-mode",
285-
Placeholder.component("mode", mode)));
286-
}
287-
288-
itemStack.editMeta(itemMeta -> {
237+
public boolean exportSettings(ItemStack itemStack) {
238+
if (itemStack.getType().equals(plugin.config().brushConfig().defaultBrushType())) return false;
239+
return !itemStack.getType().isBlock() && itemStack.editMeta(itemMeta -> {
240+
var lore = new ArrayList<Component>();
241+
lore.add(Component.empty());
242+
lore.add(plugin.bundle().component(player, "brush.exported.size",
243+
Placeholder.parsed("size", String.valueOf(getBrushSize()))));
244+
if (getBrush() instanceof SprayBrush) {
245+
lore.add(plugin.bundle().component(player, "brush.exported.chance",
246+
Placeholder.parsed("chance", String.valueOf(getChance()))));
247+
} else if (getBrush() instanceof OverlayBrush || getBrush() instanceof UnderlayBrush) {
248+
lore.add(plugin.bundle().component(player, "brush.exported.thickness",
249+
Placeholder.parsed("thickness", String.valueOf(getThickness()))));
250+
} else if (getBrush() instanceof DiskBrush) {
251+
lore.add(plugin.bundle().component(player, "brush.exported.axis",
252+
Placeholder.parsed("axis", getAxis().name())));
253+
} else if (getBrush() instanceof AngleBrush) {
254+
lore.add(plugin.bundle().component(player, "brush.exported.angle.distance",
255+
Placeholder.parsed("distance", String.valueOf(getAngleDistance()))));
256+
lore.add(plugin.bundle().component(player, "brush.exported.angle.height",
257+
Placeholder.parsed("height", String.valueOf(getAngleHeightDifference()))));
258+
} else if (getBrush() instanceof SplatterBrush || getBrush() instanceof PaintBrush) {
259+
lore.add(plugin.bundle().component(player, "brush.exported.falloff",
260+
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
261+
} else if (getBrush() instanceof GradientBrush) {
262+
lore.add(plugin.bundle().component(player, "brush.exported.mixing",
263+
Placeholder.parsed("mixing", String.valueOf(getMixingStrength()))));
264+
lore.add(plugin.bundle().component(player, "brush.exported.falloff",
265+
Placeholder.parsed("falloff", String.valueOf(getFalloffStrength()))));
266+
} else if (getBrush() instanceof FractureBrush) {
267+
lore.add(plugin.bundle().component(player, "brush.exported.fracture",
268+
Placeholder.parsed("fracture", String.valueOf(getFractureStrength()))));
269+
}
270+
if (!blocks.isEmpty()) {
271+
var blocks = getBlocks().stream()
272+
.map(Material::translationKey)
273+
.map(Component::translatable)
274+
.toList();
275+
lore.add(plugin.bundle().component(player, "brush.exported.blocks",
276+
Placeholder.component("blocks", Component.join(JoinConfiguration.commas(true), blocks))));
277+
}
278+
279+
if (isMaskEnabled()) {
280+
lore.add(plugin.bundle().component(player, "brush.exported.mask",
281+
Placeholder.component("mask", Component.translatable(getMask().translationKey()))));
282+
}
283+
284+
if (!getSurfaceMode().equals(SurfaceMode.DISABLED)) {
285+
var mode = plugin.bundle().component(player, getSurfaceMode().translationKey());
286+
lore.add(plugin.bundle().component(player, "brush.exported.surface-mode",
287+
Placeholder.component("mode", mode)));
288+
}
289+
289290
itemMeta.itemName(plugin.bundle().component(player, "brush.exported.name",
290291
Placeholder.component("brush", getBrush().getName(player))));
291292
itemMeta.lore(lore);

src/main/java/net/thenextlvl/gopaint/brush/standard/DiscBrush.java renamed to src/main/java/net/thenextlvl/gopaint/brush/standard/DiskBrush.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,25 @@
3232
import net.thenextlvl.gopaint.brush.pattern.ShufflePattern;
3333
import org.bukkit.NamespacedKey;
3434

35-
public class DiscBrush extends PatternBrush {
35+
public class DiskBrush extends PatternBrush {
3636
private final GoPaintProvider provider;
3737

38-
public DiscBrush(GoPaintProvider provider) {
38+
public DiskBrush(GoPaintProvider provider) {
3939
super(
4040
"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjFmMjgyNTBkMWU0MjBhNjUxMWIwMzk2NDg2OGZjYTJmNTYzN2UzYWJhNzlmNGExNjNmNGE4ZDYxM2JlIn19fQ==",
41-
new NamespacedKey("gopaint", "disc_brush")
41+
new NamespacedKey("gopaint", "disk_brush")
4242
);
4343
this.provider = provider;
4444
}
4545

4646
@Override
4747
public Component getName(Audience audience) {
48-
return provider.bundle().component(audience, "brush.name.disc");
48+
return provider.bundle().component(audience, "brush.name.disk");
4949
}
5050

5151
@Override
5252
public Component[] getDescription(Audience audience) {
53-
return provider.bundle().components(audience, "brush.description.disc");
53+
return provider.bundle().components(audience, "brush.description.disk");
5454
}
5555

5656
@Override

src/main/java/net/thenextlvl/gopaint/brush/standard/UnderlayBrush.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class UnderlayBrush extends SpherePatternBrush {
1717

1818
public UnderlayBrush(GoPaintProvider provider) {
1919
super(
20-
"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzIzNDQ2OTkwZjU4YjY1M2FiNWYwZTdhZjNmZGM3NTYwOTEyNzVmNGMzYzJkZDQxYzdkODYyZGQzZjkyZTg0YSJ9fX0=",
20+
"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzFlNTY1YzFlMDVhODIzZDgxNjMwMjY4N2E5OGQ1ZmUyZDA2NmFhMTkxNDMzNjg4NDRhMGM0MzAyNzYyNDljMyJ9fX0=",
2121
new NamespacedKey("gopaint", "underlay_brush")
2222
);
2323
this.provider = provider;

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

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
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;
67
import io.papermc.paper.command.brigadier.CommandSourceStack;
78
import io.papermc.paper.command.brigadier.Commands;
89
import io.papermc.paper.command.brigadier.argument.ArgumentTypes;
@@ -44,6 +45,15 @@ public void register() {
4445
})
4546
.requires(stack -> stack.getSender() instanceof Player)
4647
.executes(this::brush)))
48+
.then(Commands.literal("wand")
49+
.requires(stack -> stack.getSender() instanceof Player)
50+
.executes(this::wand))
51+
.then(Commands.literal("export")
52+
.requires(stack -> stack.getSender() instanceof Player)
53+
.executes(this::exportSettings))
54+
.then(Commands.literal("import")
55+
.requires(stack -> stack.getSender() instanceof Player)
56+
.executes(this::importSettings))
4757
.then(Commands.literal("toggle")
4858
.requires(stack -> stack.getSender() instanceof Player)
4959
.executes(this::toggle))
@@ -55,6 +65,33 @@ public void register() {
5565
event.registrar().register(command, List.of("gp"))));
5666
}
5767

68+
private int exportSettings(CommandContext<CommandSourceStack> context) {
69+
var player = (Player) context.getSource().getSender();
70+
71+
var mainHand = player.getInventory().getItemInMainHand();
72+
var settings = plugin.brushController().getBrushSettings(player);
73+
74+
plugin.bundle().sendMessage(player, settings.exportSettings(mainHand) ?
75+
"command.gopaint.export.success" : "command.gopaint.export.failed");
76+
77+
return Command.SINGLE_SUCCESS;
78+
}
79+
80+
private int importSettings(CommandContext<CommandSourceStack> context) {
81+
var player = (Player) context.getSource().getSender();
82+
83+
var mainHand = player.getInventory().getItemInMainHand();
84+
var settings = plugin.brushController().getBrushSettings(player);
85+
var parsed = plugin.brushController().parseBrushSettings(mainHand);
86+
87+
parsed.ifPresent(settings::importSettings);
88+
89+
plugin.bundle().sendMessage(player, parsed.isPresent() ?
90+
"command.gopaint.import.success" : "command.gopaint.import.failed");
91+
92+
return Command.SINGLE_SUCCESS;
93+
}
94+
5895
private int brush(CommandContext<CommandSourceStack> context) {
5996
var player = (Player) context.getSource().getSender();
6097
var settings = plugin.brushController().getBrushSettings(player);
@@ -100,4 +137,47 @@ private int reload(CommandContext<CommandSourceStack> context) {
100137
plugin.bundle().sendMessage(sender, "command.gopaint.reloaded");
101138
return Command.SINGLE_SUCCESS;
102139
}
140+
141+
private int wand(CommandContext<CommandSourceStack> context) {
142+
var player = (Player) context.getSource().getSender();
143+
plugin.bundle().sendMessage(player, giveWand(player)
144+
? "command.gopaint.wand.success"
145+
: "command.gopaint.wand.failed");
146+
return Command.SINGLE_SUCCESS;
147+
}
148+
149+
private boolean giveWand(Player player) {
150+
var type = plugin.config().brushConfig().defaultBrushType();
151+
152+
var inventory = player.getInventory();
153+
var first = inventory.first(type);
154+
155+
if (first != -1) {
156+
if (inventory.getHeldItemSlot() == first) return true;
157+
158+
if (first >= 0 && first <= 8) {
159+
inventory.setHeldItemSlot(first);
160+
return true;
161+
}
162+
163+
var item = inventory.getItem(first);
164+
165+
inventory.setItem(first, inventory.getItemInMainHand());
166+
inventory.setItemInMainHand(item);
167+
168+
return true;
169+
}
170+
171+
if (inventory.getItemInMainHand().isEmpty()) {
172+
inventory.setItemInMainHand(new ItemBuilder(type));
173+
return true;
174+
}
175+
176+
var empty = inventory.firstEmpty();
177+
if (empty == -1) return false;
178+
179+
inventory.setItem(empty, inventory.getItemInMainHand());
180+
inventory.setItemInMainHand(new ItemBuilder(type));
181+
return true;
182+
}
103183
}

src/main/java/net/thenextlvl/gopaint/listener/InventoryListener.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,7 @@ public void menuClick(InventoryClickEvent event) {
6666

6767

6868
plugin.brushController().parseBrushSettings(event.getCursor())
69-
.ifPresentOrElse(settings::importSettings, () -> {
70-
if (itemType.equals(plugin.config().brushConfig().defaultBrushType())) return;
71-
if (!itemType.isBlock()) settings.exportSettings(event.getCursor());
72-
});
69+
.ifPresentOrElse(settings::importSettings, () -> settings.exportSettings(event.getCursor()));
7370

7471
} else if (event.getRawSlot() == 11 || event.getRawSlot() == 2 || event.getRawSlot() == 20) {
7572
if (event.getClick().equals(ClickType.LEFT)) {
@@ -112,7 +109,7 @@ public void menuClick(InventoryClickEvent event) {
112109
} else if (event.getClick().isRightClick()) {
113110
settings.setFalloffStrength(settings.getFalloffStrength() - 10);
114111
}
115-
} else if (brush instanceof DiscBrush) {
112+
} else if (brush instanceof DiskBrush) {
116113
settings.setAxis(switch (settings.getAxis()) {
117114
case X -> Axis.Y;
118115
case Y -> Axis.Z;

0 commit comments

Comments
 (0)