2024-11-29 09:00:14 +00:00
package jesse.keeblarcraft.Commands ;
import com.mojang.brigadier.arguments.StringArgumentType ;
import jesse.keeblarcraft.ConfigMgr.ConfigManager ;
import jesse.keeblarcraft.ConfigMgr.GeneralConfig ;
import jesse.keeblarcraft.Utils.DirectionalVec ;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback ;
import net.minecraft.server.command.CommandManager ;
import net.minecraft.server.network.ServerPlayerEntity ;
import net.minecraft.server.world.ServerWorld ;
import net.minecraft.text.Text ;
import net.minecraft.util.math.Vec3d ;
public class MiscCommands {
ConfigManager config = new ConfigManager ( ) ;
public void RegisterCommands ( ) {
// CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
// var magicInv = CommandManager.literal("magic-inv").build();
// var claim = CommandManager.literal("claim").executes(context -> ClaimInventory(context.getSource().getPlayer())).build();
// dispatcher.getRoot().addChild(magicInv);
// magicInv.addChild(claim);
// });
// CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> {
// var eChest = CommandManager.literal("enderchest").build();
// var player = CommandManager.argument("PLAYER", EntityArgumentType.player()).executes(
// context -> GetEnderchestOfPlayer(context.getSource().getPlayer(), EntityArgumentType.getPlayer(context, "PLAYER"))
// ).build();
// dispatcher.getRoot().addChild(eChest);
// eChest.addChild(player);
// // Alias
// dispatcher.register(CommandManager.literal("echest").redirect(eChest));
// });
CommandRegistrationCallback . EVENT . register ( ( dispatcher , registryAccess , environment ) - > {
var forceSpawn = CommandManager . literal ( " set-global-spawn " ) . executes ( context - > ForceGlobalSpawn ( context . getSource ( ) . getPlayer ( ) ) ) . build ( ) ;
dispatcher . getRoot ( ) . addChild ( forceSpawn ) ;
} ) ;
CommandRegistrationCallback . EVENT . register ( ( dispatcher , registryAccess , environment ) - > {
var warp = CommandManager . literal ( " warp " ) . build ( ) ;
var warpLoc = CommandManager . argument ( " LOCATION " , StringArgumentType . string ( ) )
. executes ( context - > Warp ( context . getSource ( ) . getPlayer ( ) , StringArgumentType . getString ( context , " LOCATION " ) ) ) . build ( ) ;
dispatcher . getRoot ( ) . addChild ( warp ) ;
warp . addChild ( warpLoc ) ;
} ) ;
2024-12-21 07:07:14 +00:00
CommandRegistrationCallback . EVENT . register ( ( dispatcher , registryAccess , environment ) - > {
var warp = CommandManager . literal ( " nick " ) . build ( ) ;
var warpLoc = CommandManager . argument ( " CUSTOM_NICKNAME " , StringArgumentType . string ( ) )
. executes ( context - > SetNickname ( context . getSource ( ) . getPlayer ( ) , StringArgumentType . getString ( context , " CUSTOM_NICKNAME " ) ) ) . build ( ) ;
dispatcher . getRoot ( ) . addChild ( warp ) ;
warp . addChild ( warpLoc ) ;
} ) ;
2024-11-29 09:00:14 +00:00
}
public int Warp ( ServerPlayerEntity player , String location ) {
if ( player . hasPermissionLevel ( 4 ) ) {
2024-12-06 03:37:27 +00:00
System . out . println ( " Player is opped " ) ;
2024-11-29 09:00:14 +00:00
// hard coding spawn as only valid warp location. a more robust warp system can come later
DirectionalVec coords = GeneralConfig . GetInstance ( ) . GetSpawnCoords ( ) ;
2024-12-06 03:37:27 +00:00
// DIRTY HACK: I am unsure how to compare the straight registry key. So for now, we will just iterate over all the worlds in the server. This really should
// not be a big deal since I have never seen a server with hundreds of worlds... but you never know I guess.
for ( ServerWorld world : player . getServer ( ) . getWorlds ( ) ) {
System . out . println ( " Matched! " ) ;
if ( world . getRegistryKey ( ) . toString ( ) . equals ( coords . world . toString ( ) ) ) {
try {
player . teleport ( world , coords . x , coords . y , coords . z , coords . yaw , coords . pitch ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
break ;
} else {
System . out . println ( " KEY { " + world . getRegistryKey ( ) + " } DID NOT MATCH OURS { " + coords . world + " } " ) ;
}
}
System . out . println ( " POST TELEPORT " ) ;
2024-11-29 09:00:14 +00:00
} else {
player . sendMessage ( Text . of ( " This command is only available to server admins at the moment! " ) ) ;
}
return 0 ;
}
public int ForceGlobalSpawn ( ServerPlayerEntity player ) {
if ( player . hasPermissionLevel ( 4 ) ) {
Vec3d coords = player . getPos ( ) ;
DirectionalVec spawnVec = new DirectionalVec ( ) ;
spawnVec . x = coords . x ;
spawnVec . y = coords . y ;
spawnVec . z = coords . z ;
spawnVec . pitch = player . getPitch ( ) ;
spawnVec . yaw = player . getYaw ( ) ;
spawnVec . world = player . getWorld ( ) . getRegistryKey ( ) ;
2024-12-06 03:37:27 +00:00
System . out . println ( " REG KEY OF SET: " + player . getWorld ( ) . getRegistryKey ( ) . toString ( ) ) ;
System . out . println ( " REG KEY OF SET: " + player . getWorld ( ) . getRegistryKey ( ) ) ;
2024-11-29 09:00:14 +00:00
player . sendMessage ( Text . of ( " Global spawn has been set to [X, Y, Z]--[YAW, PITCH]: [ " +
spawnVec . x + " " + spawnVec . y + " " + spawnVec . z + " ]-- " + " [ " + spawnVec . yaw + " " + spawnVec . pitch + " ] " + " IN WORLD " +
player . getWorld ( ) . asString ( ) ) ) ;
GeneralConfig . GetInstance ( ) . SetSpawnCoords ( spawnVec ) ;
} else {
player . sendMessage ( Text . of ( " You do not have permission to use this command. " ) ) ;
}
return 0 ;
}
2024-12-21 07:07:14 +00:00
public int SetNickname ( ServerPlayerEntity player , String name ) {
player . setCustomName ( Text . of ( name ) ) ;
2024-12-23 03:28:39 +00:00
player . setCustomNameVisible ( true ) ;
2024-12-21 07:07:14 +00:00
return 0 ;
}
2024-11-29 09:00:14 +00:00
public int GetEnderchestOfPlayer ( ServerPlayerEntity cmdInitiator , ServerPlayerEntity targetPlayer ) {
// if (cmdInitiator.hasPermissionLevel(4)) {
// EnderChestInventory enderInv = targetPlayer.getEnderChestInventory();
// enderInv.
// } else {
// }
return 0 ;
}
// public int ClaimInventory(ServerPlayerEntity player) {
// Vec3d playerPosition = player.getPos();
// BlockPos blockPosition = new BlockPos((int) playerPosition.x + 4, (int) playerPosition.y, (int) playerPosition.z).east();
// BlockPos blockPosition2 = new BlockPos((int) playerPosition.x + 3, (int) playerPosition.y, (int) playerPosition.z).east();
// // Verify we can place the blocks before loading cached inventory
// if (player.getWorld().setBlockState(blockPosition, chestState)
// && player.getWorld().setBlockState(blockPosition2, chestState)) {
// // The below code WILL remove the inventory from the dimension cache. Only get
// // it when we succeed in placing chests!
// NbtList nbtInventory = DimensionLoadingEvent.GetInstance().GetInventory(player.getUuidAsString());
// if (nbtInventory != null) {
// BlockEntity block = player.getWorld().getBlockEntity(blockPosition);
// BlockEntity block2 = player.getWorld().getBlockEntity(blockPosition2);
// if (block != null && block2 != null) {
// block.markDirty();
// block2.markDirty();
// }
// player.sendMessage(Text.of("Look around, your magic inventory chest was placed near you!"));
// }
// } else {
// player.sendMessage(Text.of("Well, this is embarassing! Could not place magic inventory chest near you!"));
// }
// return 0;
// }
}