5454import org .spongepowered .api .SystemSubject ;
5555import org .spongepowered .api .block .BlockType ;
5656import org .spongepowered .api .block .BlockTypes ;
57+ import org .spongepowered .api .command .Command ;
58+ import org .spongepowered .api .command .CommandCompletion ;
59+ import org .spongepowered .api .command .parameter .Parameter ;
5760import org .spongepowered .api .config .ConfigDir ;
5861import org .spongepowered .api .config .ConfigManager ;
5962import org .spongepowered .api .config .DefaultConfig ;
6063import org .spongepowered .api .entity .living .player .Player ;
6164import org .spongepowered .api .entity .living .player .server .ServerPlayer ;
6265import org .spongepowered .api .event .Listener ;
6366import org .spongepowered .api .event .lifecycle .LoadedGameEvent ;
67+ import org .spongepowered .api .event .lifecycle .RegisterCommandEvent ;
6468import org .spongepowered .api .event .lifecycle .StartedEngineEvent ;
6569import org .spongepowered .api .event .lifecycle .StartingEngineEvent ;
6670import org .spongepowered .api .util .Ticks ;
6771import org .spongepowered .api .util .Tristate ;
6872import org .spongepowered .api .world .server .ServerLocation ;
69- import org .spongepowered .api .world .server .ServerWorld ;
7073import org .spongepowered .configurate .CommentedConfigurationNode ;
7174import org .spongepowered .configurate .ConfigurationNode ;
7275import org .spongepowered .configurate .hocon .HoconConfigurationLoader ;
@@ -122,6 +125,7 @@ public Path getConfigDir() {
122125 private SystemSubject console ;
123126 @ Inject private PluginContainer container ;
124127
128+
125129 @ Listener
126130 public void onGameLoaded (LoadedGameEvent event ) {
127131 instance = this ;
@@ -178,6 +182,11 @@ public void onServerStarting(StartingEngineEvent<Server> event) {
178182 logger .error (I18nSupport .getInternationalisedString ("Startup - Error reading WE config" ));
179183 e .printStackTrace ();
180184 }
185+
186+ Sponge .eventManager ().registerListeners (container , new BlockListener ());
187+ if (Sponge .metricsConfigManager ().collectionState (container ) != Tristate .TRUE && !Settings .Metrics ) {
188+ return ;
189+ }
181190 final boolean noRegionProvider = !regionProviderFound ;
182191 metrics .addCustomChart (new AdvancedPie ("region_providers" , () -> {
183192 Map <String , Integer > valueMap = new HashMap <>();
@@ -194,13 +203,80 @@ public void onServerStarting(StartingEngineEvent<Server> event) {
194203 }));
195204 metrics .addCustomChart (new SimplePie ("localisation" , () -> Settings .locale ));
196205
197- if (Sponge .metricsConfigManager ().collectionState (container ) != Tristate .TRUE && !Settings .Metrics ) {
198- metrics .shutdown ();
199- }
206+
200207 //Register listener
201- Sponge .eventManager ().registerListeners (container , new BlockListener ());
208+
209+
202210
203211
212+ }
213+
214+ @ Listener
215+ public void onRegisterCommand (RegisterCommandEvent <Command .Parameterized > event ) {
216+ //Register commands
217+ //Create command
218+ Command .Parameterized createCommand = Command .builder ()
219+ .permission ("structureboxes.create" )
220+ .addParameter (Parameter .string ().completer ((context , input ) -> {
221+ final List <CommandCompletion > completions = new ArrayList <>();
222+ if (!(context .cause ().root () instanceof ServerPlayer )) {
223+ return completions ;
224+ }
225+ final String [] files = instance .getWorldEditHandler ().getSchemDir ().list (((dir , name ) -> name .endsWith (".schematic" ) || name .endsWith (".schem" )));
226+ if (files == null )
227+ return completions ;
228+ for (String file : files ) {
229+ if (!input .isEmpty () && !file .startsWith (input ))
230+ continue ;
231+ completions .add (CommandCompletion .of (file .replace (".schematic" , "" ).replace (".schem" , "" )));
232+ }
233+ return completions ;
234+ }).build ())
235+ .executor (new StructureBoxCreateCommand ())
236+ .build ();
237+
238+ //undo command
239+ Command .Parameterized undoCommand = Command .builder ()
240+ .executor (new StructureBoxUndoCommand ())
241+ .permission ("structureboxes.undo" )
242+ .build ();
243+
244+
245+ //reload command
246+ Command .Parameterized reloadCommand = Command .builder ()
247+ .executor (new StructureBoxReloadCommand ())
248+ .permission ("structureboxes.reload" )
249+ .build ();
250+
251+ //sessions command
252+ Command .Parameterized sessionsCommand = Command .builder ()
253+ .addParameter (Parameter .integerNumber ().key (Parameter .key ("page" , Integer .class )).build ())
254+ .addParameter (Parameter .string ().key (Parameter .key ("player|-a" , String .class ))
255+ .requiredPermission ("structurebox.sessions.others" )
256+ .completer ((context , input ) -> {
257+ final List <String > args = new ArrayList <>();
258+ Sponge .server ().onlinePlayers ().forEach ((p ) -> args .add (p .name ()));
259+ args .add ("-a" );
260+ final List <CommandCompletion > completions = new ArrayList <>();
261+ args .forEach ((arg ) -> {
262+ if (arg .toLowerCase ().startsWith (input .toLowerCase ())) {
263+ completions .add (CommandCompletion .of (arg ));
264+ }
265+ });
266+ return completions ;
267+ }).build ())
268+ .executor (new StructureBoxSessionsCommand ())
269+ .build ();
270+
271+ Command .Parameterized structureBoxCommand = Command .builder ()
272+ .executor (new StructureBoxCommand (container ))
273+ .addChild (createCommand , "create" , "cr" , "c" )
274+ .addChild (undoCommand , "undo" , "u" , "ud" )
275+ .addChild (reloadCommand , "reload" , "r" , "rl" )
276+ .addChild (sessionsCommand , "sessions" , "s" )
277+ .build ();
278+
279+ event .register (plugin , structureBoxCommand , "structurebox" , "sbox" , "sb" );
204280 }
205281
206282 @ Listener
@@ -251,7 +327,7 @@ public boolean isFreeSpace(UUID playerID, String schematicName, Collection<Locat
251327 final HashMap <Location , Object > originalBlocks = new HashMap <>();
252328 Player p = Sponge .server ().player (playerID ).get ();
253329 for (Location loc : locations ){
254- ServerLocation spongeLoc = ServerLocation . of (( ServerWorld ) (( SpongeWorld ) loc . getExtent ()). getWorld (), loc . getBlockX (), loc . getBlockY (), loc . getBlockZ () );
330+ ServerLocation spongeLoc = SpongeAdapter . adapt ( loc );
255331 originalBlocks .put (loc , spongeLoc .blockType ());
256332 if (!Settings .CheckFreeSpace ){
257333 continue ;
@@ -296,7 +372,7 @@ public SpongeWorldEdit getWorldEditPlugin() {
296372
297373 public void clearInterior (Collection <Location > interior ) {
298374 for (Location loc : interior ){
299- ServerLocation . of (( ServerWorld ) (( SpongeWorld ) loc . getExtent ()). getWorld (), loc . getBlockX (), loc . getBlockY (), loc . getBlockZ () ).setBlockType (BlockTypes .AIR .get (), BlockChangeFlags .NONE );
375+ SpongeAdapter . adapt ( loc ).setBlockType (BlockTypes .AIR .get (), BlockChangeFlags .NONE );
300376 }
301377 }
302378
@@ -381,6 +457,10 @@ public void loadLocales() throws IOException {
381457 }
382458
383459
460+ }
461+
462+ private void handleMetrics () {
463+
384464 }
385465
386466 public PluginContainer getPlugin () {
0 commit comments