Skip to content

Commit 2c42933

Browse files
committed
add replacematerial subcommand
Took 20 minutes
1 parent e7384da commit 2c42933

File tree

6 files changed

+184
-1
lines changed

6 files changed

+184
-1
lines changed

custom-ore-generator/src/main/java/de/derfrzocker/custom/ore/generator/CustomOreGeneratorMessages.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package de.derfrzocker.custom.ore.generator;
22

3-
import com.mojang.brigadier.Message;
43
import de.derfrzocker.spigot.utils.message.MessageKey;
54
import org.apache.commons.lang.Validate;
65
import org.bukkit.plugin.java.JavaPlugin;
@@ -61,6 +60,12 @@ public final class CustomOreGeneratorMessages {
6160
public final MessageKey COMMAND_SET_BIOME_NOT_ENOUGH_ARGS;
6261
public final MessageKey COMMAND_SET_BIOME_SUCCESS;
6362

63+
// set replacematerial command
64+
public final MessageKey COMMAND_SET_REPLACEMATERIAL_USAGE;
65+
public final MessageKey COMMAND_SET_REPLACEMATERIAL_DESCRIPTION;
66+
public final MessageKey COMMAND_SET_REPLACEMATERIAL_NOT_ENOUGH_ARGS;
67+
public final MessageKey COMMAND_SET_REPLACEMATERIAL_SUCCESS;
68+
6469
// help command
6570
public final MessageKey COMMAND_HELP_USAGE;
6671
public final MessageKey COMMAND_SET_HELP_USAGE;
@@ -129,6 +134,12 @@ public final class CustomOreGeneratorMessages {
129134
COMMAND_SET_BIOME_NOT_ENOUGH_ARGS = new MessageKey(javaPlugin, "command.set.biome.not-enough-args");
130135
COMMAND_SET_BIOME_SUCCESS = new MessageKey(javaPlugin, "command.set.biome.success");
131136

137+
// set replacematerial command
138+
COMMAND_SET_REPLACEMATERIAL_USAGE = new MessageKey(javaPlugin, "command.set.replacematerial.usage");
139+
COMMAND_SET_REPLACEMATERIAL_DESCRIPTION = new MessageKey(javaPlugin, "command.set.replacematerial.description");
140+
COMMAND_SET_REPLACEMATERIAL_NOT_ENOUGH_ARGS = new MessageKey(javaPlugin, "command.set.replacematerial.not-enough-args");
141+
COMMAND_SET_REPLACEMATERIAL_SUCCESS = new MessageKey(javaPlugin, "command.set.replacematerial.success");
142+
132143
// help command
133144
COMMAND_HELP_USAGE = new MessageKey(javaPlugin, "command.help.usage");
134145
COMMAND_SET_HELP_USAGE = new MessageKey(javaPlugin, "command.set.help.usage");

custom-ore-generator/src/main/java/de/derfrzocker/custom/ore/generator/Permissions.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class Permissions {
1414
public final Permission SET_VALUE_PERMISSION;
1515
public final Permission SET_BIOME_PERMISSION;
1616
public final Permission SET_CUSTOMDATA_PERMISSION;
17+
public final Permission SET_REPLACEMATERIAL_PERMISSION;
1718

1819
Permissions(@NotNull final JavaPlugin javaPlugin) {
1920
Validate.notNull(javaPlugin, "JavaPlugin can not be null");
@@ -25,6 +26,7 @@ public final class Permissions {
2526
SET_VALUE_PERMISSION = new Permission(SET_PERMISSION, "value", javaPlugin, true);
2627
SET_BIOME_PERMISSION = new Permission(SET_PERMISSION, "biome", javaPlugin, true);
2728
SET_CUSTOMDATA_PERMISSION = new Permission(SET_PERMISSION, "customdata", javaPlugin, true);
29+
SET_REPLACEMATERIAL_PERMISSION = new Permission(SET_PERMISSION, "replacematerial", javaPlugin, true);
2830
}
2931

3032
}

custom-ore-generator/src/main/java/de/derfrzocker/custom/ore/generator/command/set/SetCommand.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public SetCommand(@NotNull final Supplier<CustomOreGeneratorService> serviceSupp
2424
registerExecutor(new SetValueCommand(serviceSupplier, javaPlugin, messages), "value", permissions.SET_VALUE_PERMISSION, messages.COMMAND_SET_VALUE_USAGE, messages.COMMAND_SET_VALUE_DESCRIPTION);
2525
registerExecutor(new SetBiomeCommand(serviceSupplier, javaPlugin, messages), "biome", permissions.SET_BIOME_PERMISSION, messages.COMMAND_SET_BIOME_USAGE, messages.COMMAND_SET_BIOME_DESCRIPTION);
2626
registerExecutor(new SetCustomDataCommand(serviceSupplier, javaPlugin, messages), "customdata", permissions.SET_CUSTOMDATA_PERMISSION, messages.COMMAND_SET_CUSTOMDATA_USAGE, messages.COMMAND_SET_CUSTOMDATA_DESCRIPTION);
27+
registerExecutor(new SetReplaceMaterialCommand(serviceSupplier, javaPlugin, messages), "replacematerial", permissions.SET_REPLACEMATERIAL_PERMISSION, messages.COMMAND_SET_REPLACEMATERIAL_USAGE, messages.COMMAND_SET_REPLACEMATERIAL_DESCRIPTION);
2728

2829
final HelpCommand helpCommand = new HelpCommand(this, new HelpConfigImpl(messages));
2930
registerExecutor(helpCommand, "help", null, messages.COMMAND_HELP_USAGE, messages.COMMAND_HELP_DESCRIPTION);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package de.derfrzocker.custom.ore.generator.command.set;
2+
3+
import com.google.common.collect.Sets;
4+
import de.derfrzocker.custom.ore.generator.CustomOreGeneratorMessages;
5+
import de.derfrzocker.custom.ore.generator.api.CustomOreGeneratorService;
6+
import de.derfrzocker.custom.ore.generator.api.OreConfig;
7+
import de.derfrzocker.custom.ore.generator.api.WorldConfig;
8+
import de.derfrzocker.custom.ore.generator.command.OreGenCommand;
9+
import de.derfrzocker.spigot.utils.Pair;
10+
import de.derfrzocker.spigot.utils.command.CommandUtil;
11+
import de.derfrzocker.spigot.utils.message.MessageValue;
12+
import org.apache.commons.lang.Validate;
13+
import org.bukkit.Bukkit;
14+
import org.bukkit.Material;
15+
import org.bukkit.World;
16+
import org.bukkit.command.Command;
17+
import org.bukkit.command.CommandSender;
18+
import org.bukkit.command.TabExecutor;
19+
import org.bukkit.plugin.java.JavaPlugin;
20+
import org.jetbrains.annotations.NotNull;
21+
import org.jetbrains.annotations.Nullable;
22+
23+
import java.util.*;
24+
import java.util.function.Supplier;
25+
26+
public class SetReplaceMaterialCommand implements TabExecutor {
27+
28+
@NotNull
29+
private final Supplier<CustomOreGeneratorService> serviceSupplier;
30+
@NotNull
31+
private final JavaPlugin javaPlugin;
32+
@NotNull
33+
private final CustomOreGeneratorMessages messages;
34+
35+
public SetReplaceMaterialCommand(@NotNull final Supplier<CustomOreGeneratorService> serviceSupplier, @NotNull final JavaPlugin javaPlugin, @NotNull final CustomOreGeneratorMessages messages) {
36+
Validate.notNull(serviceSupplier, "Service supplier can not be null");
37+
Validate.notNull(javaPlugin, "JavaPlugin can not be null");
38+
Validate.notNull(messages, "CustomOreGeneratorMessages can not be null");
39+
40+
this.serviceSupplier = serviceSupplier;
41+
this.javaPlugin = javaPlugin;
42+
this.messages = messages;
43+
}
44+
45+
@Override //oregen set replacematerial <world> <config_name> <material> <material> ...
46+
public boolean onCommand(@NotNull final CommandSender sender, @NotNull final Command command, @NotNull final String label, @NotNull final String[] args) {
47+
if (args.length < 3) {
48+
messages.COMMAND_SET_REPLACEMATERIAL_NOT_ENOUGH_ARGS.sendMessage(sender);
49+
return true;
50+
}
51+
52+
CommandUtil.runAsynchronously(sender, javaPlugin, () -> {
53+
final String worldName = args[0];
54+
final String configName = args[1];
55+
56+
final World world = CommandUtil.getWorld(worldName, messages.COMMAND_WORLD_NOT_FOUND, sender);
57+
final CustomOreGeneratorService service = serviceSupplier.get();
58+
final Pair<WorldConfig, OreConfig> pair = OreGenCommand.getWorldAndOreConfig(world, configName, service, messages.COMMAND_ORE_CONFIG_NOT_FOUND, sender);
59+
final WorldConfig worldConfig = Objects.requireNonNull(pair.getFirst(), "This should never happen");
60+
final OreConfig oreConfig = Objects.requireNonNull(pair.getSecond(), "This should never happen");
61+
final Set<Material> materials = new HashSet<>();
62+
63+
for (int i = 2; i < args.length; i++) {
64+
try {
65+
final Material material = Material.valueOf(args[i].toUpperCase());
66+
if (!material.isBlock()) {
67+
messages.COMMAND_MATERIAL_NO_BLOCK.sendMessage(sender, new MessageValue("material", args[i]));
68+
return;
69+
}
70+
71+
materials.add(material);
72+
} catch (IllegalArgumentException e) {
73+
messages.COMMAND_MATERIAL_NOT_FOUND.sendMessage(sender, new MessageValue("material", args[i]));
74+
return;
75+
}
76+
}
77+
78+
oreConfig.getReplaceMaterials().forEach(oreConfig::removeReplaceMaterial);
79+
materials.forEach(oreConfig::addReplaceMaterial);
80+
81+
service.saveWorldConfig(worldConfig);
82+
messages.COMMAND_SET_REPLACEMATERIAL_SUCCESS.sendMessage(sender);
83+
});
84+
85+
return true;
86+
}
87+
88+
@Nullable
89+
@Override //oregen set material <world> <config_name> <material> <material> ...
90+
public List<String> onTabComplete(@NotNull final CommandSender sender, @NotNull final Command command, @NotNull final String alias, @NotNull final String[] args) {
91+
final List<String> list = new ArrayList<>();
92+
final CustomOreGeneratorService service = serviceSupplier.get();
93+
94+
if (args.length == 1) {
95+
final String world_name = args[0].toLowerCase();
96+
Bukkit.getWorlds().stream().map(World::getName).filter(value -> value.toLowerCase().contains(world_name)).forEach(list::add);
97+
return list;
98+
}
99+
100+
if (args.length == 2) {
101+
final Optional<World> world = Bukkit.getWorlds().stream().filter(value -> value.getName().equalsIgnoreCase(args[0])).findAny();
102+
103+
if (!world.isPresent())
104+
return list;
105+
106+
final Optional<WorldConfig> worldConfig = service.getWorldConfig(world.get().getName());
107+
108+
if (!worldConfig.isPresent())
109+
return list;
110+
111+
final String config_name = args[1];
112+
worldConfig.get().getOreConfigs().stream().map(OreConfig::getName).filter(name -> name.contains(config_name)).forEach(list::add);
113+
return list;
114+
}
115+
116+
final Optional<World> world = Bukkit.getWorlds().stream().filter(value -> value.getName().equalsIgnoreCase(args[0])).findAny();
117+
118+
if (!world.isPresent())
119+
return list;
120+
121+
final Optional<WorldConfig> worldConfig = service.getWorldConfig(world.get().getName());
122+
123+
if (!worldConfig.isPresent())
124+
return list;
125+
126+
final Optional<OreConfig> oreConfig = worldConfig.get().getOreConfig(args[1]);
127+
128+
if (!oreConfig.isPresent())
129+
return list;
130+
131+
final Set<Material> materials = new HashSet<>();
132+
133+
for (int i = 2; i < (args.length - 1); i++) {
134+
try {
135+
final Material material = Material.valueOf(args[i].toUpperCase());
136+
if (!material.isBlock()) {
137+
return list;
138+
}
139+
140+
materials.add(material);
141+
} catch (IllegalArgumentException e) {
142+
return list;
143+
}
144+
}
145+
146+
final Set<Material> materialSet = Sets.newHashSet(Material.values());
147+
148+
materialSet.removeAll(materials);
149+
150+
materialSet.stream().filter(Material::isBlock).map(Enum::toString).filter(value -> value.contains(args[args.length - 1])).forEach(list::add);
151+
152+
return list;
153+
}
154+
155+
}

custom-ore-generator/src/main/resources/messages.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ command:
5555
- "&cuse %%translation:[command.set.biome.usage]%"
5656
success: "&aThe biomes are set successfully!"
5757

58+
replacematerial:
59+
usage: "&f/&doregen set replacematerial &f<&dworld&f> <&dore-config&f> <&dmaterial&f> &d..."
60+
description: "Set the material on which the ore should be generate. You can set multiple Materials, by separate them with a space. Materials that are already set to the ore config, gets override."
61+
not-enough-args:
62+
- "&4Wrong amount of arguments!"
63+
- "&cuse %%translation:[command.set.replacmaterial.usage]%"
64+
success: "&aThe materials are set successfully!"
65+
5866
help:
5967
usage: "&f/&doregen set help &f(<&dsubcommand&f>)"
6068

custom-ore-generator/src/main/resources/plugin.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ permissions:
2929
custom.ore.gen.set.value: true
3030
custom.ore.gen.set.biome: true
3131
custom.ore.gen.set.customdata: true
32+
custom.ore.gen.set.replacematerial: true
3233
custom.ore.gen.set.value:
3334
description: "Gives access to the subcommand 'set value'"
3435
default: op
@@ -44,6 +45,11 @@ permissions:
4445
default: op
4546
children:
4647
custom.ore.gen: true
48+
custom.ore.gen.set.replacematerial:
49+
description: "Gives access to the subcommand 'set replacematerial'"
50+
default: op
51+
children:
52+
custom.ore.gen: true
4753
custom.ore.gen.reload:
4854
description: "Gives access to the subcommand 'reload'"
4955
default: op

0 commit comments

Comments
 (0)