2024-11-29 09:00:14 +00:00
package jesse.keeblarcraft.Commands ;
import org.apache.logging.log4j.core.jmx.Server ;
import com.mojang.brigadier.arguments.StringArgumentType ;
import jesse.keeblarcraft.Keeblarcraft ;
import jesse.keeblarcraft.ConfigMgr.ConfigManager ;
import jesse.keeblarcraft.ConfigMgr.GeneralConfig ;
import jesse.keeblarcraft.EventMgr.DimensionLoadingEvent ;
import jesse.keeblarcraft.Utils.DirectionalVec ;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback ;
import net.minecraft.block.Block ;
import net.minecraft.block.BlockState ;
import net.minecraft.block.Blocks ;
import net.minecraft.block.ChestBlock ;
import net.minecraft.block.entity.BlockEntity ;
import net.minecraft.command.argument.EntityArgumentType ;
import net.minecraft.inventory.EnderChestInventory ;
import net.minecraft.item.ItemPlacementContext ;
import net.minecraft.nbt.NbtList ;
import net.minecraft.registry.RegistryKey ;
import net.minecraft.registry.RegistryKeys ;
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.Identifier ;
import net.minecraft.util.math.BlockPos ;
import net.minecraft.util.math.Vec3d ;
import net.minecraft.world.World ;
import net.minecraft.world.dimension.DimensionType ;
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 ) ;
} ) ;
}
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 ;
}
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;
// }
}