From d7bf4b37e0b650404aade6a0ef2f8a79b4c5c422 Mon Sep 17 00:00:00 2001 From: stevenrs11 Date: Wed, 8 Nov 2023 22:15:24 -0600 Subject: [PATCH] various fixes --- .../java/org/dimdev/dimdoors/ModConfig.java | 1 + .../org/dimdev/dimdoors/item/ModItems.java | 2 +- .../dimdoors/item/RiftSignatureItem.java | 16 ++-- .../item/StabilizedRiftSignatureItem.java | 83 +------------------ .../dimdoors/rift/targets/EscapeTarget.java | 16 ++++ .../resources/assets/dimdoors/lang/en_us.json | 4 + 6 files changed, 34 insertions(+), 88 deletions(-) diff --git a/common/src/main/java/org/dimdev/dimdoors/ModConfig.java b/common/src/main/java/org/dimdev/dimdoors/ModConfig.java index c9ecbae3..664c0079 100644 --- a/common/src/main/java/org/dimdev/dimdoors/ModConfig.java +++ b/common/src/main/java/org/dimdev/dimdoors/ModConfig.java @@ -172,6 +172,7 @@ public final class ModConfig implements ConfigData { @RequiresRestart @Tooltip private WorldList worldsLeadingToLimbo = new WorldList(List.of(), false); @Tooltip public boolean hardcoreLimbo = false; + @Tooltip public int limboReturnDistance = 20000; @Tooltip public float limboBlocksCorruptingOverworldAmount = 5; public boolean shouldUseLimbo(ResourceKey level) { return worldsLeadingToLimbo.blacklist != worldsLeadingToLimbo.list.contains(level.location().toString()); diff --git a/common/src/main/java/org/dimdev/dimdoors/item/ModItems.java b/common/src/main/java/org/dimdev/dimdoors/item/ModItems.java index e80c2014..24540706 100644 --- a/common/src/main/java/org/dimdev/dimdoors/item/ModItems.java +++ b/common/src/main/java/org/dimdev/dimdoors/item/ModItems.java @@ -59,7 +59,7 @@ public final class ModItems { public static final RegistrySupplier RIFT_REMOVER = register("rift_remover", properties -> new RiftRemoverItem(properties.stacksTo(1).durability(100))); - public static final RegistrySupplier RIFT_SIGNATURE = register("rift_signature", properties -> new RiftSignatureItem(properties.stacksTo(1).durability(1))); + public static final RegistrySupplier RIFT_SIGNATURE = register("rift_signature", properties -> new RiftSignatureItem(properties.stacksTo(1).durability(1),true)); public static final RegistrySupplier STABILIZED_RIFT_SIGNATURE = register("stabilized_rift_signature", properties -> new StabilizedRiftSignatureItem(properties.stacksTo(1).durability(20))); diff --git a/common/src/main/java/org/dimdev/dimdoors/item/RiftSignatureItem.java b/common/src/main/java/org/dimdev/dimdoors/item/RiftSignatureItem.java index b946a27a..1c566617 100644 --- a/common/src/main/java/org/dimdev/dimdoors/item/RiftSignatureItem.java +++ b/common/src/main/java/org/dimdev/dimdoors/item/RiftSignatureItem.java @@ -39,9 +39,12 @@ import java.util.function.BiFunction; public class RiftSignatureItem extends Item { public static final String ID = "rift_signature"; + public boolean shouldclear; + + public RiftSignatureItem(Item.Properties settings, boolean clear) { - public RiftSignatureItem(Item.Properties settings) { super(settings); + shouldclear = clear; } @Override @@ -111,11 +114,11 @@ public class RiftSignatureItem extends Item { // } if(placedRiftLogic != null) { - placedRiftLogic.getRift(target.getWorld(), target.pos).ifPresent(a -> a.setDestination(RiftReference.tryMakeRelative(target, source))); + placedRiftLogic.getRift((ServerLevel) world, pos).ifPresent(a -> a.setDestination(RiftReference.tryMakeRelative(source, target))); } - if((placedRiftLogic = PlacementLogic.getLogic(world, pos)) != null) { - placedRiftLogic.getRift((ServerLevel) world, pos).ifPresent(a -> a.setDestination(RiftReference.tryMakeRelative(source, target))); + if((placedRiftLogic = PlacementLogic.getLogic(target.getWorld(), target.pos)) != null) { + placedRiftLogic.getRift(target.getWorld(), target.pos).ifPresent(a -> a.setDestination(RiftReference.tryMakeRelative(target, source))); } @@ -135,8 +138,9 @@ public class RiftSignatureItem extends Item { stack.hurtAndBreak(1, player, a -> {}); // TODO: calculate damage based on position? - - clearSource(stack); + if(shouldclear){ + clearSource(stack); + } player.displayClientMessage(Component.translatable(this.getDescriptionId() + ".created"), true); // null = send sound to the player too, we have to do this because this code is not run client-side world.playSound(null, player.blockPosition(), ModSoundEvents.RIFT_END.get(), SoundSource.BLOCKS, 0.6f, 1); diff --git a/common/src/main/java/org/dimdev/dimdoors/item/StabilizedRiftSignatureItem.java b/common/src/main/java/org/dimdev/dimdoors/item/StabilizedRiftSignatureItem.java index 06add640..88df6572 100644 --- a/common/src/main/java/org/dimdev/dimdoors/item/StabilizedRiftSignatureItem.java +++ b/common/src/main/java/org/dimdev/dimdoors/item/StabilizedRiftSignatureItem.java @@ -22,91 +22,12 @@ import org.dimdev.dimdoors.block.entity.DetachedRiftBlockEntity; import org.dimdev.dimdoors.rift.targets.RiftReference; import org.dimdev.dimdoors.sound.ModSoundEvents; -public class StabilizedRiftSignatureItem extends Item { // TODO: common superclass with rift signature +public class StabilizedRiftSignatureItem extends RiftSignatureItem { // TODO: common superclass with rift signature public static final String ID = "stabilized_rift_signature"; public StabilizedRiftSignatureItem(Item.Properties settings) { - super(settings); + super(settings,false); } - @Override - public boolean isFoil(ItemStack stack) { - return stack.getTag() != null && stack.getTag().contains("destination"); - } - @Override - public InteractionResult useOn(UseOnContext itemUsageContext) { - Player player = itemUsageContext.getPlayer(); - Level world = itemUsageContext.getLevel(); - BlockPos pos = itemUsageContext.getClickedPos(); - InteractionHand hand = itemUsageContext.getHand(); - Direction side = itemUsageContext.getClickedFace(); - - BlockPlaceContext itemPlacementContext = new BlockPlaceContext(itemUsageContext); - - ItemStack stack = player.getItemInHand(hand); - pos = world.getBlockState(pos).getBlock().canBeReplaced(world.getBlockState(pos), new BlockPlaceContext(itemUsageContext)) ? pos : pos.relative(side); - // Fail if the player can't place a block there - if (!player.mayUseItemAt(pos, side.getOpposite(), stack)) { - return InteractionResult.FAIL; - } - - if (world.isClientSide) { - return InteractionResult.SUCCESS; - } - - RotatedLocation target = getTarget(stack); - - if (target == null) { - // The link signature has not been used. Store its current target as the first location. - setSource(stack, new RotatedLocation(world.dimension(), pos, player.getYRot(), 0)); - player.displayClientMessage(Component.translatable(this.getDescriptionId() + ".stored"), true); - world.playSound(null, player.blockPosition(), ModSoundEvents.RIFT_START.get(), SoundSource.BLOCKS, 0.6f, 1); - } else { - // Place a rift at the target point - if (target.getBlockState().getBlock() != ModBlocks.DETACHED_RIFT) { - if (!target.getBlockState().getBlock().canBeReplaced(world.getBlockState(target.getBlockPos()), itemPlacementContext)) { - player.displayClientMessage(Component.translatable("tools.target_became_block"), true); - // Don't clear source, stabilized signatures always stay bound - return InteractionResult.FAIL; - } - Level targetWorld = DimensionalDoors.getWorld(target.world); - targetWorld.setBlockAndUpdate(target.getBlockPos(), ModBlocks.DETACHED_RIFT.get().defaultBlockState()); - DetachedRiftBlockEntity rift1 = (DetachedRiftBlockEntity) target.getBlockEntity(); - rift1.register(); - } - - // Place a rift at the source point - world.setBlockAndUpdate(pos, ModBlocks.DETACHED_RIFT.get().defaultBlockState()); - DetachedRiftBlockEntity rift2 = (DetachedRiftBlockEntity) world.getBlockEntity(pos); - rift2.setDestination(RiftReference.tryMakeRelative(new Location((ServerLevel) world, pos), target)); - rift2.register(); - - stack.hurtAndBreak(1, player, playerEntity -> {}); - - player.displayClientMessage(Component.translatable(this.getDescriptionId() + ".created"), true); - world.playSound(null, player.blockPosition(), ModSoundEvents.RIFT_END.get(), SoundSource.BLOCKS, 0.6f, 1); - } - - return InteractionResult.SUCCESS; - } - - public static void setSource(ItemStack itemStack, RotatedLocation destination) { - if (!itemStack.hasTag()) itemStack.setTag(new CompoundTag()); - itemStack.getTag().put("destination", RotatedLocation.serialize(destination)); - } - - public static void clearSource(ItemStack itemStack) { - if (itemStack.hasTag()) { - itemStack.getTag().remove("destination"); - } - } - - public static RotatedLocation getTarget(ItemStack itemStack) { - if (itemStack.hasTag() && itemStack.getTag().contains("destination")) { - return RotatedLocation.deserialize(itemStack.getTag().getCompound("destination")); - } else { - return null; - } - } } diff --git a/common/src/main/java/org/dimdev/dimdoors/rift/targets/EscapeTarget.java b/common/src/main/java/org/dimdev/dimdoors/rift/targets/EscapeTarget.java index e84dbdfa..63a6f595 100644 --- a/common/src/main/java/org/dimdev/dimdoors/rift/targets/EscapeTarget.java +++ b/common/src/main/java/org/dimdev/dimdoors/rift/targets/EscapeTarget.java @@ -22,6 +22,7 @@ import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.block.UnravelUtil; import org.dimdev.dimdoors.world.ModDimensions; +import java.util.Random; import java.util.UUID; import static org.dimdev.dimdoors.api.util.EntityUtils.chat; @@ -84,6 +85,8 @@ public class EscapeTarget extends VirtualTarget implements EntityTarget { // TOD } */ + destLoc = randomizeLimboReturn(destLoc, DimensionalDoors.getConfig().getLimboConfig().limboReturnDistance); //todo add minimum radius + if (destLoc != null && this.canEscapeLimbo) { Location location = destLoc; //VirtualLocation.fromLocation(new Location((ServerWorld) entity.world, destLoc.pos)).projectToWorld(false); //TODO Fix world projection. @@ -135,6 +138,19 @@ public class EscapeTarget extends VirtualTarget implements EntityTarget { // TOD return nbt; } + public static Location randomizeLimboReturn(Location playerSpawn, int range){ + return new Location(playerSpawn.getWorld(), randomizeCoord(playerSpawn.getX(), range), playerSpawn.getY(), randomizeCoord(playerSpawn.getZ(),range)); + } + + public static int randomizeCoord(int coord, int range){ + Random random = new Random(); + int offset = random.nextInt(range + 1); // Generate a random offset within the range + boolean isPositive = random.nextBoolean(); // Randomly decide whether the offset should be positive or negative + + // Apply the offset with the direction (positive or negative) + return isPositive ? coord + offset : coord - offset; + } + public static EscapeTarget fromNbt(CompoundTag nbt) { return new EscapeTarget(nbt.getBoolean("canEscapeLimbo")); } diff --git a/common/src/main/resources/assets/dimdoors/lang/en_us.json b/common/src/main/resources/assets/dimdoors/lang/en_us.json index ef69c4ba..71a4ae10 100644 --- a/common/src/main/resources/assets/dimdoors/lang/en_us.json +++ b/common/src/main/resources/assets/dimdoors/lang/en_us.json @@ -361,6 +361,10 @@ "text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.list.@Tooltip": "List of the ids for worlds in the blacklsit/whitelist.", "text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.blacklist": "Is it a blacklist?", "text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.blacklist.@Tooltip": "Boolean that determines if list is a blacklist or white list for worlds.", + "text.autoconfig.dimdoors.option.limbo.limboReturnDistance.@Tooltip": "Distance from spawn that limbo returns you", + "text.autoconfig.dimdoors.option.limbo.limboReturnDistance": "Limbo Return Radius", + + "text.autoconfig.dimdoors.category.graphics": "Graphics Settings", "text.autoconfig.dimdoors.option.graphics.highlightRiftCoreFor": "Time to Highlight Rift Core",