mirror of
https://github.com/dragonruler1000/hdm-mod.git
synced 2025-06-29 00:19:32 -05:00
Refactor teleportation logic and add custom dimension config
Simplified portal activation logic to improve readability and efficiency, removing redundant checks and consolidating teleport code paths. Added configuration file for the "world1" custom dimension, defining its properties and behavior and fixing the bug I was having.
This commit is contained in:
parent
79949bc13b
commit
02d4df7c55
2 changed files with 38 additions and 44 deletions
|
@ -104,56 +104,35 @@ public class Window extends HorizontalBlock {
|
|||
Hand handIn,
|
||||
BlockRayTraceResult hit
|
||||
) {
|
||||
// Only process on the server side, avoid duplicating logic on client
|
||||
if (worldIn.isRemote()) return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
|
||||
// Do nothing if the player is crouching (commonly used for alternative interactions)
|
||||
if (player.isCrouching()) return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
|
||||
if (!worldIn.isRemote() && !player.isCrouching()) {
|
||||
MinecraftServer server = worldIn.getServer();
|
||||
if (server == null) return ActionResultType.PASS;
|
||||
|
||||
// Get the server instance safely
|
||||
if (worldIn.getServer() == null) return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
|
||||
MinecraftServer server = worldIn.getServer();
|
||||
boolean goingToCustom = worldIn.getDimensionKey() != ModDimensions.World1;
|
||||
|
||||
// Check if in custom dimension; if so, teleport to Overworld
|
||||
if (worldIn.getDimensionKey() == ModDimensions.World1) {
|
||||
ServerWorld overWorld = server.getWorld(World.OVERWORLD);
|
||||
if (overWorld != null) {
|
||||
player.changeDimension(overWorld, new SimpleTeleporter(pos, false));
|
||||
}
|
||||
}
|
||||
ServerWorld targetWorld = (worldIn.getDimensionKey() == ModDimensions.World1)
|
||||
? server.getWorld(World.OVERWORLD)
|
||||
: server.getWorld(ModDimensions.World1);
|
||||
|
||||
// Set up for teleportation based on current dimension
|
||||
ServerWorld targetWorld;
|
||||
boolean goingToCustom = worldIn.getDimensionKey() != ModDimensions.World1;
|
||||
if (worldIn.getDimensionKey() == ModDimensions.World1) {
|
||||
ServerWorld overWorld = server.getWorld(World.OVERWORLD);
|
||||
if (overWorld != null) {
|
||||
player.changeDimension(overWorld, new SimpleTeleporter(pos, false));
|
||||
}
|
||||
}
|
||||
|
||||
if (goingToCustom) {
|
||||
// Teleporting from Overworld to custom dimension
|
||||
targetWorld = server.getWorld(ModDimensions.World1);
|
||||
} else {
|
||||
// From custom dimension, teleport to Overworld
|
||||
ServerWorld world1 = server.getWorld(ModDimensions.World1);
|
||||
if (world1 != null) {
|
||||
player.changeDimension(world1, new SimpleTeleporter(pos, true));
|
||||
}
|
||||
targetWorld = server.getWorld(World.OVERWORLD);
|
||||
}
|
||||
if (targetWorld != null) {
|
||||
SimpleTeleporter teleporter = new SimpleTeleporter(pos, goingToCustom);
|
||||
player.changeDimension(targetWorld, teleporter);
|
||||
}
|
||||
|
||||
// Attempt teleport if a valid world was found
|
||||
if (targetWorld != null) {
|
||||
SimpleTeleporter teleporter = new SimpleTeleporter(pos, goingToCustom);
|
||||
player.changeDimension(targetWorld, teleporter);
|
||||
System.out.println("[DEBUG] Portal activated on server!");
|
||||
player.sendMessage(new StringTextComponent("Teleport logic running!"), player.getUniqueID());
|
||||
player.sendMessage(new StringTextComponent("Teleport attempted!"), player.getUniqueID());
|
||||
return ActionResultType.SUCCESS;
|
||||
|
||||
// Notify the player about the result
|
||||
if (teleporter.wasSuccessful()) {
|
||||
player.sendMessage(new StringTextComponent("Teleportation successful!"), player.getUniqueID());
|
||||
} else {
|
||||
player.sendMessage(new StringTextComponent("Teleportation failed: no safe location found."), player.getUniqueID());
|
||||
}
|
||||
|
||||
return ActionResultType.SUCCESS;
|
||||
}
|
||||
|
||||
// Fall back to default processing if teleportation did not occur
|
||||
return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
|
||||
}
|
||||
return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
15
src/main/resources/data/hdm_mod/dimension_type/world1.json
Normal file
15
src/main/resources/data/hdm_mod/dimension_type/world1.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"logical_height": 256,
|
||||
"infiniburn": "minecraft:infiniburn_overworld",
|
||||
"effects": "minecraft:overworld",
|
||||
"ambient_light": 0,
|
||||
"bed_works": true,
|
||||
"respawn_anchor_works": false,
|
||||
"has_raids": true,
|
||||
"ultrawarm": false,
|
||||
"natural": true,
|
||||
"coordinate_scale": 1,
|
||||
"piglin_safe": false,
|
||||
"has_skylight": true,
|
||||
"has_ceiling": false
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue