Skip to content

Commit cc06257

Browse files
committed
refactored interface to make it easier to use with new api
1 parent 01a28e4 commit cc06257

File tree

12 files changed

+63
-69
lines changed

12 files changed

+63
-69
lines changed

api-jvm-impl/src/main/java/ch/vorburger/minecraft/storeys/japi/impl/EventsImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
import java.util.Optional;
3131
import java.util.concurrent.ConcurrentLinkedQueue;
3232
import net.kyori.adventure.audience.Audience;
33+
import net.kyori.adventure.text.Component;
3334
import org.slf4j.Logger;
3435
import org.slf4j.LoggerFactory;
3536
import org.spongepowered.api.Sponge;
3637
import org.spongepowered.api.command.Command;
37-
import org.spongepowered.api.command.CommandCause;
3838
import org.spongepowered.api.command.CommandResult;
3939
import org.spongepowered.api.command.registrar.CommandRegistrar;
4040
import org.spongepowered.plugin.PluginContainer;
@@ -75,6 +75,7 @@ class EventsImpl implements Events, Unregisterable {
7575
return;
7676
}
7777
registrar.get().register(plugin, spec, name);
78+
//TODO Sponge.server().commandManager().updateCommandTreeForPlayer();
7879
unregistrables.add(() -> {
7980

8081
});
@@ -104,7 +105,7 @@ class EventsImpl implements Events, Unregisterable {
104105
ch.vorburger.minecraft.storeys.japi.impl.events.Callback otherCallback = invoker -> {
105106
invokeCallback(invoker, callback);
106107
};
107-
unregistrables.add(eventService.registerInteractEntity(entityName, otherCallback));
108+
unregistrables.add(eventService.registerInteractEntity(Component.text(entityName), otherCallback));
108109
}
109110

110111
@Override public void unregister() {

api-jvm-impl/src/main/java/ch/vorburger/minecraft/storeys/japi/impl/events/EventService.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,9 @@
2929
import javax.inject.Inject;
3030
import javax.inject.Singleton;
3131
import net.kyori.adventure.text.Component;
32-
import net.kyori.adventure.text.TextComponent;
3332
import org.slf4j.Logger;
3433
import org.slf4j.LoggerFactory;
35-
import org.spongepowered.api.data.Key;
3634
import org.spongepowered.api.data.Keys;
37-
import org.spongepowered.api.data.value.Value;
3835
import org.spongepowered.api.entity.living.player.Player;
3936
import org.spongepowered.api.event.EventManager;
4037
import org.spongepowered.api.event.Listener;
@@ -50,7 +47,7 @@
5047
private final Collection<Callback> onPlayerJoinCallbacks = new ConcurrentLinkedQueue<>();
5148

5249
private final Map<String, Collection<Callback>> onPlayerInsideCallbacks = new ConcurrentHashMap<>();
53-
private final Map<String, Collection<Callback>> onInteractEntityEventCallbacks = new ConcurrentHashMap<>();
50+
private final Map<Component, Collection<Callback>> onInteractEntityEventCallbacks = new ConcurrentHashMap<>();
5451

5552
private final EventManager eventManager;
5653

@@ -94,7 +91,7 @@ public Unregisterable registerInsideLocation(String locationName, Callback callb
9491
return add(callbacks, callback);
9592
}
9693

97-
public Unregisterable registerInteractEntity(String entityName, Callback callback) {
94+
public Unregisterable registerInteractEntity(Component entityName, Callback callback) {
9895
Collection<Callback> callbacks = onInteractEntityEventCallbacks.computeIfAbsent(entityName, name -> new ConcurrentLinkedQueue<>());
9996
return add(callbacks, callback);
10097
}
@@ -111,7 +108,7 @@ private Unregisterable add(Collection<Callback> collection, Callback callback) {
111108
Optional<Component> optEntityNameText = event.entity().get(Keys.DISPLAY_NAME);
112109
LOG.debug("InteractEntityEvent: entityName={}; event={}", optEntityNameText, event);
113110
optEntityNameText.ifPresent(entityNameText -> {
114-
Collection<Callback> callbacks = onInteractEntityEventCallbacks.getOrDefault(((TextComponent) entityNameText).content(),
111+
Collection<Callback> callbacks = onInteractEntityEventCallbacks.getOrDefault(entityNameText,
115112
Collections.emptySet());
116113
for (Callback callback : callbacks) {
117114
try {

storeys/src/main/java/ch/vorburger/minecraft/storeys/commands/NarrateCommand.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import ch.vorburger.minecraft.storeys.japi.ReadingSpeed;
2222
import ch.vorburger.minecraft.storeys.japi.impl.actions.Narrator;
2323
import ch.vorburger.minecraft.storeys.util.Command;
24-
import com.google.common.collect.ImmutableList;
25-
import java.util.List;
2624
import javax.inject.Inject;
2725
import net.kyori.adventure.text.Component;
2826
import org.spongepowered.api.command.CommandResult;
@@ -42,11 +40,11 @@ public class NarrateCommand implements Command {
4240
this.narrator = narrator;
4341
}
4442

45-
@Override public List<String> aliases() {
46-
return ImmutableList.of("narrate");
43+
@Override public String getName() {
44+
return "narrate";
4745
}
4846

49-
@Override public org.spongepowered.api.command.Command callable() {
47+
@Override public org.spongepowered.api.command.Command.Parameterized createCommand() {
5048
// TODO when Sponge uses entity names instead of UUIDs:
5149
// TODO requiringPermission()
5250
return org.spongepowered.api.command.Command.builder().shortDescription(Component.text(("Make an entity character narrate story lines")))

storeys/src/main/java/ch/vorburger/minecraft/storeys/commands/StoryCommand.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@
2727
import ch.vorburger.minecraft.storeys.model.parser.StoryParser;
2828
import ch.vorburger.minecraft.storeys.model.parser.StoryRepository;
2929
import ch.vorburger.minecraft.storeys.util.Command;
30-
import com.google.common.collect.ImmutableList;
3130
import java.io.File;
3231
import java.nio.file.Path;
33-
import java.util.List;
3432
import javax.inject.Inject;
3533
import net.kyori.adventure.text.Component;
3634
import org.spongepowered.api.command.CommandResult;
@@ -56,11 +54,11 @@ public class StoryCommand implements Command {
5654
this.storyPlayer = storyPlayer;
5755
}
5856

59-
@Override public List<String> aliases() {
60-
return ImmutableList.of("story");
57+
@Override public String getName() {
58+
return "story";
6159
}
6260

63-
@Override public org.spongepowered.api.command.Command callable() {
61+
@Override public org.spongepowered.api.command.Command.Parameterized createCommand() {
6462
return org.spongepowered.api.command.Command.builder().shortDescription(Component.text("Tell a story"))
6563
// .permission("storeys.commands.story") ?
6664
.addParameter(STORY_NAME) // TODO requiringPermission()

storeys/src/main/java/ch/vorburger/minecraft/storeys/events/ConditionService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.spongepowered.api.scheduler.ScheduledTask;
4040
import org.spongepowered.api.scheduler.Scheduler;
4141
import org.spongepowered.api.scheduler.Task;
42+
import org.spongepowered.plugin.PluginContainer;
4243

4344
@ThreadSafe @Singleton public class ConditionService implements AutoCloseable {
4445

@@ -90,8 +91,8 @@ private ConditionServiceRegistration(Triple<Condition, AtomicBoolean, Callback>
9091
private final Scheduler scheduler;
9192
private final UUID taskId;
9293

93-
@Inject public ConditionService(Scheduler scheduler) {
94-
Task task = Task.builder().execute(this::run).interval(10, TimeUnit.SECONDS).build();
94+
@Inject public ConditionService(PluginContainer plugin, Scheduler scheduler) {
95+
Task task = Task.builder().execute(this::run).interval(10, TimeUnit.SECONDS).plugin(plugin).build();
9596
this.scheduler = scheduler;
9697
taskId = scheduler.submit(task).uniqueId();
9798
}

storeys/src/main/java/ch/vorburger/minecraft/storeys/model/LocationAction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ public class LocationAction implements Action<Void> {
3737
public LocationAction() {
3838
}
3939

40-
@Inject public LocationAction(Scheduler scheduler) {
41-
conditionService = new ConditionService(scheduler);
40+
@Inject public LocationAction(ConditionService conditionService) {
41+
this.conditionService = conditionService;
4242
}
4343

4444
@Override public void setParameter(String param) {

storeys/src/main/java/ch/vorburger/minecraft/storeys/plugin/AbstractStoreysPlugin.java

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,55 +27,40 @@
2727
import com.google.inject.Injector;
2828
import java.nio.file.Path;
2929
import javax.inject.Inject;
30-
import org.slf4j.Logger;
31-
import org.slf4j.LoggerFactory;
3230
import org.spongepowered.api.command.Command;
3331
import org.spongepowered.api.config.ConfigDir;
3432
import org.spongepowered.api.event.EventManager;
35-
import org.spongepowered.api.event.Listener;
3633
import org.spongepowered.api.event.lifecycle.RegisterCommandEvent;
37-
import org.spongepowered.api.event.lifecycle.StartingEngineEvent;
3834

3935
// Do *NOT* annotate this class with @Plugin
4036
public abstract class AbstractStoreysPlugin extends AbstractPlugin {
4137

42-
private static final Logger LOG = LoggerFactory.getLogger(AbstractStoreysPlugin.class);
43-
4438
@Inject @ConfigDir(sharedRoot = false) private Path configDir;
4539

4640
@Inject protected Injector pluginInjector;
4741

48-
private Injector childInjector;
49-
5042
@Inject private EventManager eventManager;
5143

5244
@Inject private EventService eventService;
5345

54-
@Listener public final void onGameStartingServer(StartingEngineEvent event) throws Exception {
55-
LOG.info("See https://github.com/OASIS-learn-study/minecraft-storeys-maker for how to use /story and /narrate commands");
56-
start(this, configDir);
57-
}
58-
59-
protected void start(PluginInstance plugin, Path configDir) throws Exception {
46+
protected void start(PluginInstance plugin, Path configDir) {
6047
eventManager.registerListeners(plugin.getPluginContainer(), new GuardGameModeJoinListener());
6148
eventService.setPluginContainer(plugin.getPluginContainer());
6249

6350
// TODO(vorburger) child injector might not actually be required, could possibly just use only pluginInjector?
64-
childInjector = pluginInjector.createChildInjector(binder -> {
51+
Injector childInjector = pluginInjector.createChildInjector(binder -> {
6552
binder.bind(PluginInstance.class).toInstance(plugin);
6653
binder.bind(Path.class).toInstance(configDir);
6754
binder.bind(Scripts.class);
6855
binder.bind(ScriptsLoader.class);
6956
});
7057
}
7158

72-
@Listener public void register(RegisterCommandEvent<Command.Raw> event) {
59+
public void register(RegisterCommandEvent<Command.Parameterized> event) {
7360
final StoryCommand storyCommand = pluginInjector.getInstance(StoryCommand.class);
7461
final NarrateCommand narrateCommand = pluginInjector.getInstance(NarrateCommand.class);
7562

76-
event.register(this.getPluginContainer(), (Command.Raw) narrateCommand.callable(), narrateCommand.aliases().get(0),
77-
narrateCommand.aliases().toArray(new String[0]));
78-
event.register(this.getPluginContainer(), (Command.Raw) storyCommand.callable(), storyCommand.aliases().get(0),
79-
storyCommand.aliases().toArray(new String[0]));
63+
event.register(this.getPluginContainer(), narrateCommand.createCommand(), narrateCommand.getName(), narrateCommand.aliases());
64+
event.register(this.getPluginContainer(), storyCommand.createCommand(), storyCommand.getName(), storyCommand.aliases());
8065
}
8166
}

storeys/src/main/java/ch/vorburger/minecraft/storeys/util/Command.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323

2424
public interface Command extends CommandExecutor {
2525

26-
org.spongepowered.api.command.Command callable();
26+
org.spongepowered.api.command.Command.Parameterized createCommand();
2727

28-
List<String> aliases();
28+
String getName();
29+
30+
default String[] aliases() { return new String[0]; };
2931
}

web/src/main/java/ch/vorburger/minecraft/storeys/api/impl/TokenCommand.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import ch.vorburger.minecraft.storeys.japi.util.CommandExceptions;
2222
import ch.vorburger.minecraft.storeys.simple.TokenProvider;
2323
import ch.vorburger.minecraft.storeys.util.Command;
24-
import com.google.common.collect.ImmutableList;
25-
import java.util.List;
2624
import net.kyori.adventure.text.Component;
2725
import net.kyori.adventure.text.event.ClickEvent;
2826
import net.kyori.adventure.text.format.NamedTextColor;
@@ -42,13 +40,13 @@ public TokenCommand(TokenProvider newTokenProvider) {
4240
this.tokenProvider = newTokenProvider;
4341
}
4442

45-
@Override public org.spongepowered.api.command.Command callable() {
43+
@Override public org.spongepowered.api.command.Command.Parameterized createCommand() {
4644
return org.spongepowered.api.command.Command.builder().permission("storeys.token.new")
4745
.shortDescription(Component.text("Obtain API token for player")).executor(this).build();
4846
}
4947

50-
@Override public List<String> aliases() {
51-
return ImmutableList.of("token");
48+
@Override public String getName() {
49+
return "token";
5250
}
5351

5452
@Override public CommandResult execute(CommandContext args) throws CommandException {

web/src/main/java/ch/vorburger/minecraft/storeys/web/LocationToolListener.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@
4545
import org.spongepowered.api.data.Keys;
4646
import org.spongepowered.api.data.type.HandTypes;
4747
import org.spongepowered.api.entity.living.player.Player;
48+
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
4849
import org.spongepowered.api.event.Cause;
4950
import org.spongepowered.api.event.EventContext;
5051
import org.spongepowered.api.event.EventContextKeys;
5152
import org.spongepowered.api.event.EventManager;
5253
import org.spongepowered.api.event.Listener;
5354
import org.spongepowered.api.event.block.InteractBlockEvent;
55+
import org.spongepowered.api.event.filter.cause.First;
5456
import org.spongepowered.api.event.lifecycle.StoppedGameEvent;
5557
import org.spongepowered.api.item.inventory.ItemStack;
5658
import org.spongepowered.api.item.inventory.ItemStackSnapshot;
@@ -93,7 +95,7 @@
9395
}
9496
}
9597

96-
@Listener public void locationToolInteraction(InteractBlockEvent event, Player player) {
98+
@Listener public void locationToolInteraction(InteractBlockEvent.Primary event, @First ServerPlayer player) {
9799
final Optional<ItemStackSnapshot> snapshot = event.context().get(EventContextKeys.USED_ITEM);
98100
snapshot.ifPresent(itemStackSnapshot -> {
99101
final ItemStack itemStack = player.itemInHand(HandTypes.MAIN_HAND);

0 commit comments

Comments
 (0)