Skip to content

Commit

Permalink
Add /warp command.
Browse files Browse the repository at this point in the history
  - Add WorldDataManager to enable /warp functionality.
  - Add appropriate /warp toggle in Config.
  - Add ManagerLocator.init (to call appropriate function on contained managers on ServerStart.
  - Simplify various classes and avoid certain anti-patterns (PlayerData previously had required a reference to PlayerDataManager, for example)
  - Remove commented out code in various places.
  • Loading branch information
John-Paul-R committed Jun 16, 2021
1 parent 9006df3 commit 73dfadb
Show file tree
Hide file tree
Showing 13 changed files with 381 additions and 178 deletions.
5 changes: 4 additions & 1 deletion src/main/java/com/fibermc/essentialcommands/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class Config {
public static boolean ENABLE_HOME;
public static boolean ENABLE_TPA;
public static boolean ENABLE_BACK;
public static boolean ENABLE_WARP;
public static int HOME_LIMIT;
public static double TELEPORT_COOLDOWN;
public static double TELEPORT_DELAY;
Expand Down Expand Up @@ -53,6 +54,7 @@ public static void initProperties() {
props.putIfAbsent("enable_home", "true");
props.putIfAbsent("enable_tpa", "true");
props.putIfAbsent("enable_back", "true");
props.putIfAbsent("enable_warp", "true");
props.putIfAbsent("home_limit", "-1");
props.putIfAbsent("teleport_cooldown", "1D");
props.putIfAbsent("teleport_delay", "0D");
Expand All @@ -66,6 +68,7 @@ public static void initProperties() {
ENABLE_HOME = Boolean.parseBoolean((String) props.getOrDefault("enable_home", "true"));
ENABLE_TPA = Boolean.parseBoolean((String) props.getOrDefault("enable_tpa", "true"));
ENABLE_BACK = Boolean.parseBoolean((String) props.getOrDefault("enable_back", "true"));
ENABLE_WARP = Boolean.parseBoolean((String) props.getOrDefault("enable_warp", "true"));
HOME_LIMIT = Integer.parseInt((String) props.getOrDefault("home_limit", "-1"));
TELEPORT_COOLDOWN = Double.parseDouble((String) props.getOrDefault("teleport_cooldown", "1D"));
TELEPORT_DELAY = Double.parseDouble((String) props.getOrDefault("teleport_delay", "0D"));
Expand All @@ -75,7 +78,7 @@ public static void initProperties() {

public static void storeProperties() {
try{
File outFile = new File("./config/EssentialCommands.json");
File outFile = new File("./config/EssentialCommands.properties");
FileWriter writer = new FileWriter(outFile);

props.store(writer, "");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
public class EssentialCommandRegistry {

public static void register(ManagerLocator managers) {
PlayerDataManager dataManager = managers.getDataManager();
PlayerDataManager dataManager = managers.getPlayerDataManager();
TeleportRequestManager tpManager = managers.getTpManager();

WorldDataManager worldDataManager = managers.getWorldDataManager();
CommandRegistrationCallback.EVENT.register(
(CommandDispatcher<ServerCommandSource> dispatcher, boolean dedicated) -> {
final String disabledString = "[EssentialCommands] This command is not enabled.";
Expand All @@ -45,24 +45,24 @@ public static void register(ManagerLocator managers) {

if (Config.ENABLE_TPA) {
tpAskBuilder
.then(
argument("target", EntityArgumentType.player())
.executes(new TeleportAskCommand(tpManager)))
.build();
.then(
argument("target", EntityArgumentType.player())
.executes(new TeleportAskCommand(tpManager)))
.build();

tpAcceptBuilder
.then(
argument("target", EntityArgumentType.player())
.suggests(TeleportResponseSuggestion.suggestedStrings(dataManager))
.executes(new TeleportAcceptCommand(dataManager)))
.then(
argument("target", EntityArgumentType.player())
.suggests(TeleportResponseSuggestion.suggestedStrings(dataManager))
.executes(new TeleportAcceptCommand(dataManager)))
.build();

tpDenyBuilder
.then(
argument("target", EntityArgumentType.player())
.suggests(TeleportResponseSuggestion.suggestedStrings(dataManager))
.executes(new TeleportDenyCommand(dataManager)))
.build();
.then(
argument("target", EntityArgumentType.player())
.suggests(TeleportResponseSuggestion.suggestedStrings(dataManager))
.executes(new TeleportDenyCommand(dataManager)))
.build();
} else {
tpAskBuilder.executes(disabledCommandCommand);
tpAcceptBuilder.executes(disabledCommandCommand);
Expand All @@ -79,18 +79,18 @@ public static void register(ManagerLocator managers) {
//homeBuilder;

homeSetBuilder.then(
argument("home_name", StringArgumentType.word())
.executes(new HomeSetCommand(dataManager)));
argument("home_name", StringArgumentType.word())
.executes(new HomeSetCommand(dataManager)));

homeTpBuilder
.then(argument("home_name", StringArgumentType.word())
.suggests(HomeSuggestion.suggestedStrings(dataManager))
.executes(new HomeCommand(dataManager)));
.then(argument("home_name", StringArgumentType.word())
.suggests(HomeSuggestion.suggestedStrings(dataManager))
.executes(new HomeCommand(dataManager)));

homeDeleteBuilder
.then(argument("home_name", StringArgumentType.word())
.suggests(HomeSuggestion.suggestedStrings(dataManager))
.executes(new HomeDeleteCommand(dataManager)));
.then(argument("home_name", StringArgumentType.word())
.suggests(HomeSuggestion.suggestedStrings(dataManager))
.executes(new HomeDeleteCommand(dataManager)));

} else {
homeBuilder.executes(disabledCommandCommand);
Expand All @@ -108,7 +108,37 @@ public static void register(ManagerLocator managers) {
backBuilder.executes(disabledCommandCommand);
}

//-=-=-=-=-=-=-=-
//Warp
LiteralArgumentBuilder<ServerCommandSource> warpBuilder = CommandManager.literal("warp");
LiteralArgumentBuilder<ServerCommandSource> warpSetBuilder = CommandManager.literal("set");
LiteralArgumentBuilder<ServerCommandSource> warpTpBuilder = CommandManager.literal("tp");
LiteralArgumentBuilder<ServerCommandSource> warpDeleteBuilder = CommandManager.literal("delete");
if (Config.ENABLE_WARP) {
warpSetBuilder.then(
argument("warp_name", StringArgumentType.word())
.requires(serverCommandSource -> serverCommandSource.hasPermissionLevel(4))
.executes(new WarpSetCommand(worldDataManager)));

warpTpBuilder
.then(argument("warp_name", StringArgumentType.word())
.suggests(worldDataManager.getWarpSuggestions())
.executes(new WarpTpCommand(dataManager, worldDataManager)));

warpDeleteBuilder
.then(argument("warp_name", StringArgumentType.word())
.requires(serverCommandSource -> serverCommandSource.hasPermissionLevel(4))
.suggests(worldDataManager.getWarpSuggestions())
.executes(new WarpDeleteCommand(worldDataManager)));

} else {
warpBuilder.executes(disabledCommandCommand);
warpSetBuilder.executes(disabledCommandCommand);
warpTpBuilder.executes(disabledCommandCommand);
warpDeleteBuilder.executes(disabledCommandCommand);
}


//-=-=-=-=-=-=-=-
dispatcher.getRoot().addChild(tpAskBuilder.build());
dispatcher.getRoot().addChild(tpAcceptBuilder.build());
dispatcher.getRoot().addChild(tpDenyBuilder.build());
Expand All @@ -120,6 +150,12 @@ public static void register(ManagerLocator managers) {
homeNode.addChild(homeDeleteBuilder.build());

dispatcher.getRoot().addChild(backBuilder.build());

LiteralCommandNode<ServerCommandSource> warpNode = warpBuilder.build();
dispatcher.getRoot().addChild(warpNode);
warpNode.addChild(warpTpBuilder.build());
warpNode.addChild(warpSetBuilder.build());
warpNode.addChild(warpDeleteBuilder.build());
}
);
}
Expand Down
18 changes: 10 additions & 8 deletions src/main/java/com/fibermc/essentialcommands/EssentialCommands.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.fibermc.essentialcommands;

//import net.fabricmc.api.DedicatedServerModInitializer;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.api.ModInitializer;
import net.minecraft.server.MinecraftServer;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


public final class EssentialCommands implements /*DedicatedServer*/ModInitializer {
public final class EssentialCommands implements ModInitializer {
public static Logger LOGGER = LogManager.getLogger("EssentialCommands");
// private static PlayerDataManager _dataManager;
// private static TeleportRequestManager _tpManager;

public static void log(Level level, String message) {
final String logPrefix = "[EssentialCommands]: ";
Expand All @@ -21,16 +21,18 @@ public static void log(Level level, String message) {
@Override
public void onInitialize/*Server*/() {
log(Level.INFO, "Mod Load Initiated.");

//Load Preferences
Config.loadOrCreateProperties();


//init mod stuff
PlayerDataManager dataManager = new PlayerDataManager();
TeleportRequestManager tpManager = new TeleportRequestManager(dataManager);
ManagerLocator managers = new ManagerLocator(dataManager, tpManager);
PlayerDataFactory.init(managers);
ManagerLocator managers = new ManagerLocator();

ServerLifecycleEvents.SERVER_STARTED.register((MinecraftServer server) -> {
managers.init(server);
});

//TODO Currently known bug: warps will persist between worlds in a single session in singleplayer.
//Register Mod
EssentialCommandRegistry.register(managers);

Expand Down
26 changes: 19 additions & 7 deletions src/main/java/com/fibermc/essentialcommands/ManagerLocator.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,32 @@
package com.fibermc.essentialcommands;

import net.minecraft.server.MinecraftServer;

public class ManagerLocator {

private PlayerDataManager dataManager;
private TeleportRequestManager tpManager;
private final PlayerDataManager playerDataManager;
private final TeleportRequestManager tpManager;
private final WorldDataManager worldDataManager;

public ManagerLocator() {
this.playerDataManager = new PlayerDataManager();
this.tpManager = new TeleportRequestManager(this.playerDataManager);
this.worldDataManager = new WorldDataManager();
}

public ManagerLocator(PlayerDataManager dataManager, TeleportRequestManager tpManager) {
this.dataManager = dataManager;
this.tpManager = tpManager;
public void init(MinecraftServer server) {
this.worldDataManager.init(server);
}

public PlayerDataManager getDataManager() {
return dataManager;
public PlayerDataManager getPlayerDataManager() {
return playerDataManager;
}

public TeleportRequestManager getTpManager() {
return tpManager;
}

public WorldDataManager getWorldDataManager() {
return worldDataManager;
}
}
52 changes: 3 additions & 49 deletions src/main/java/com/fibermc/essentialcommands/PlayerData.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@

public class PlayerData extends PersistentState {

// Managers
private TeleportRequestManager tpManager;

// ServerPlayerEntity
private ServerPlayerEntity player;
private UUID pUuid;
Expand All @@ -39,15 +36,13 @@ public class PlayerData extends PersistentState {
private int tpCooldown;
private int tpDelay;

public PlayerData(ServerPlayerEntity player, ManagerLocator managers) {
public PlayerData(ServerPlayerEntity player) {
this.player = player;
this.pUuid = player.getUuid();
tpTimer = -1;
tpTarget = null;
tpAskers = new LinkedList<PlayerData>();
homes = new HashMap<String, MinecraftLocation>();

this.tpManager = managers.getTpManager();
}

public int getTpTimer() {
Expand Down Expand Up @@ -131,7 +126,7 @@ public NbtCompound writeNbt(NbtCompound tag) {
tag.putUuid("playerUuid", pUuid);
NbtList homesNbtList = new NbtList();
for (Entry<String, MinecraftLocation> entry : homes.entrySet()) {
NbtCompound homeTag = entry.getValue().toTag(new NbtCompound());
NbtCompound homeTag = entry.getValue().writeNbt(new NbtCompound());
homeTag.putString("homeName", entry.getKey());
homesNbtList.add(homeTag);
}
Expand All @@ -143,6 +138,7 @@ public NbtCompound writeNbt(NbtCompound tag) {
public void setPreviousLocation(MinecraftLocation location) {
this.previousLocation = location;
}

public MinecraftLocation getPreviousLocation() {
return this.previousLocation;
}
Expand Down Expand Up @@ -185,46 +181,4 @@ public void setTpCooldown(int cooldown) {
public void setTpDelay(int delay) {
this.tpDelay = delay;
}

//Just used default method
// @Override
// public void save(File file) {
// if (this.isDirty()) {
// NbtCompound compoundTag = new NbtCompound();
// compoundTag.put("data", this.toTag(new NbtCompound()));
// compoundTag.putInt("DataVersion", SharedConstants.getGameVersion().getWorldVersion());

// try {
// FileOutputStream fileOutputStream =new FileOutputStream(file);
// DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
// Throwable var4 = null;

// try {
// NbtIo.write(compoundTag, dataOutputStream);
// } catch (Throwable var14) {
// var4 = var14;
// throw var14;
// } finally {
// if (dataOutputStream != null) {
// if (var4 != null) {
// try {
// dataOutputStream.close();
// } catch (Throwable var13) {
// var4.addSuppressed(var13);
// }
// } else {
// dataOutputStream.close();
// fileOutputStream.close();
// }
// }

// }
// } catch (IOException var16) {
// //todo handle exception

// }

// this.setDirty(false);
// }
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@

public class PlayerDataFactory {

private static ManagerLocator _managers;
public static void init(ManagerLocator managers) { _managers = managers; }
public static PlayerData create(ServerPlayerEntity player) {
return new PlayerData(player, _managers);
return new PlayerData(player);
}
}
Loading

0 comments on commit 73dfadb

Please sign in to comment.