From a58cc55a5e0d231ed3b669d6d082dead11fb53ce Mon Sep 17 00:00:00 2001 From: Aria Date: Tue, 28 Feb 2023 09:13:42 -0700 Subject: [PATCH] Finish fixing RTP --- gradle.properties | 2 +- .../zontreck/essentials/AriasEssentials.java | 9 ++++ .../commands/homes/HomesCommand.java | 2 +- .../commands/teleport/RTPCommand.java | 41 +++---------------- .../commands/warps/WarpCommand.java | 20 +-------- .../essentials/configs/EssentialsConfig.java | 5 +++ .../events/RTPNotCancelledEvent.java | 23 +++++++++++ .../essentials/util/ForgeEventsHandler.java | 20 +++++++++ .../essentials/util/RTPContainer.java | 16 +++++++- .../util/RandomPositionLocator.java | 10 ++++- 10 files changed, 89 insertions(+), 59 deletions(-) create mode 100644 src/main/java/dev/zontreck/essentials/configs/EssentialsConfig.java create mode 100644 src/main/java/dev/zontreck/essentials/events/RTPNotCancelledEvent.java diff --git a/gradle.properties b/gradle.properties index 417e091..ab81b18 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,4 +12,4 @@ my_modid="ariasessentials" mc_version=1.18.2 forge_version=40.2.1 parchment_version=2022.11.06 -libz_version=1.0.5.0227232305 +libz_version=1.0.5.0228230829 diff --git a/src/main/java/dev/zontreck/essentials/AriasEssentials.java b/src/main/java/dev/zontreck/essentials/AriasEssentials.java index d54f0bc..220bc9d 100644 --- a/src/main/java/dev/zontreck/essentials/AriasEssentials.java +++ b/src/main/java/dev/zontreck/essentials/AriasEssentials.java @@ -15,6 +15,7 @@ import dev.zontreck.essentials.commands.CommandRegister; import dev.zontreck.essentials.homes.Homes; import dev.zontreck.essentials.homes.HomesProvider; import dev.zontreck.essentials.util.EssentialsDatastore; +import dev.zontreck.essentials.util.ForgeEventsHandler; import dev.zontreck.libzontreck.events.ProfileLoadedEvent; import dev.zontreck.libzontreck.events.ProfileUnloadedEvent; import dev.zontreck.libzontreck.profiles.Profile; @@ -24,6 +25,7 @@ import net.minecraftforge.event.server.ServerStoppingEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; @Mod(AriasEssentials.MODID) @@ -36,10 +38,17 @@ public class AriasEssentials { public AriasEssentials() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); + bus.addListener(this::setup); EssentialsDatastore.initialize(); MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(new CommandRegister()); + MinecraftForge.EVENT_BUS.register(new ForgeEventsHandler()); + } + + public void setup(FMLCommonSetupEvent ev) + { + } diff --git a/src/main/java/dev/zontreck/essentials/commands/homes/HomesCommand.java b/src/main/java/dev/zontreck/essentials/commands/homes/HomesCommand.java index 55386cc..fefb94e 100644 --- a/src/main/java/dev/zontreck/essentials/commands/homes/HomesCommand.java +++ b/src/main/java/dev/zontreck/essentials/commands/homes/HomesCommand.java @@ -46,7 +46,7 @@ public class HomesCommand { for (Home string : homes.getList()) { Style st = Style.EMPTY.withFont(Style.DEFAULT_FONT).withHoverEvent(HoverTip.get(ChatColor.BOLD+ChatColor.DARK_GREEN+"Click here to go to this home")).withClickEvent(Clickable.command("/home "+string.homeName)); - ChatHelpers.broadcastTo(player.getUUID(), new TextComponent(ChatColor.BOLD + ChatColor.MINECOIN_GOLD+"["+ChatColor.resetChat()+ChatColor.UNDERLINE+ChatColor.BOLD+ChatColor.DARK_GREEN+"HOME"+ChatColor.resetChat()+ChatColor.BOLD+ChatColor.MINECOIN_GOLD+"] "+ChatColor.resetChat()+ChatColor.YELLOW+string).setStyle(st), ctx.getSource().getServer()); + ChatHelpers.broadcastTo(player.getUUID(), new TextComponent(ChatColor.BOLD + ChatColor.MINECOIN_GOLD+"["+ChatColor.resetChat()+ChatColor.UNDERLINE+ChatColor.BOLD+ChatColor.DARK_GREEN+"HOME"+ChatColor.resetChat()+ChatColor.BOLD+ChatColor.MINECOIN_GOLD+"] "+ChatColor.resetChat()+ChatColor.YELLOW+string.homeName).setStyle(st), ctx.getSource().getServer()); } }catch(CommandSyntaxException ex) diff --git a/src/main/java/dev/zontreck/essentials/commands/teleport/RTPCommand.java b/src/main/java/dev/zontreck/essentials/commands/teleport/RTPCommand.java index 9200e2d..eec6a16 100644 --- a/src/main/java/dev/zontreck/essentials/commands/teleport/RTPCommand.java +++ b/src/main/java/dev/zontreck/essentials/commands/teleport/RTPCommand.java @@ -2,16 +2,9 @@ package dev.zontreck.essentials.commands.teleport; import com.mojang.brigadier.CommandDispatcher; -import dev.zontreck.essentials.AriasEssentials; -import dev.zontreck.essentials.Messages; -import dev.zontreck.essentials.util.RTPContainer; import dev.zontreck.essentials.util.RandomPositionFactory; -import dev.zontreck.libzontreck.chat.ChatColor; -import dev.zontreck.libzontreck.util.ChatHelpers; -import dev.zontreck.libzontreck.vectors.Vector3; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; -import net.minecraft.network.chat.TextComponent; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; @@ -44,7 +37,7 @@ public class RTPCommand { } final ServerPlayer pla = (ServerPlayer)source.getEntity(); - final TeleportContainer cont = new TeleportContainer(pla, Vec3.ZERO, pla.getRotationVector(), source.getLevel()); + //final TeleportContainer cont = new TeleportContainer(pla, Vec3.ZERO, pla.getRotationVector(), source.getLevel()); @@ -52,37 +45,15 @@ public class RTPCommand { @Override public void run(){ // We can now execute the loop to search for a safe spot! - Vector3 v = new Vector3(); + //Vector3 v = new Vector3(); // RTP is not designed to be safe really, but we at least want to check if where we are putting the player is air Vec3 pos = pla.position(); - boolean found_place= false; - RTPContainer container = RandomPositionFactory.beginRTPSearch(pla, pos, pla.getRotationVector(), pla.getLevel()); - while(!container.complete) - { - if(!AriasEssentials.ALIVE) - { - container.aborted=true; - container.containingThread.interrupt(); - return; - } - if(container.tries>30) - { - // abort! - return; - - } - } - v = container.container.world_pos.Position; - - ChatHelpers.broadcastTo(pla.getUUID(), new TextComponent(Messages.ESSENTIALS_PREFIX + ChatColor.DARK_PURPLE+" A suitable location has been found. Wormhole opening now!"), pla.server); - - // Apply the effect - TeleportActioner.ApplyTeleportEffect(pla); - cont.Position=v.asMinecraftVector(); - - TeleportActioner.PerformTeleport(cont); + //boolean found_place= false; + RandomPositionFactory.beginRTPSearch(pla, pos, pla.getRotationVector(), pla.getLevel()); + return; + } }); diff --git a/src/main/java/dev/zontreck/essentials/commands/warps/WarpCommand.java b/src/main/java/dev/zontreck/essentials/commands/warps/WarpCommand.java index 188b875..fb4a153 100644 --- a/src/main/java/dev/zontreck/essentials/commands/warps/WarpCommand.java +++ b/src/main/java/dev/zontreck/essentials/commands/warps/WarpCommand.java @@ -76,24 +76,8 @@ public class WarpCommand { if(type==1){ try { dest.Position = Vector3.ZERO; - RTPContainer cont = RandomPositionFactory.beginRTPSearch(p, Vec3.ZERO, Vec2.ZERO, f_dim); - while(!cont.complete) - { - if(!AriasEssentials.ALIVE) - { - cont.aborted=true; - cont.containingThread.interrupt(); - return; - } - if(cont.tries>30) - { - return; - } - } - dest.Position = cont.container.world_pos.Position; - - //RTPCommand.findPosition(source.getLevel(), false, p.getUUID()); - ChatHelpers.broadcastTo(p.getUUID(), new TextComponent(Messages.ESSENTIALS_PREFIX+ChatColor.doColors(" !Dark_Green!Location found, warping!")), p.server); + RandomPositionFactory.beginRTPSearch(p, Vec3.ZERO, Vec2.ZERO, f_dim); + return; } catch (Exception e) { e.printStackTrace(); return; diff --git a/src/main/java/dev/zontreck/essentials/configs/EssentialsConfig.java b/src/main/java/dev/zontreck/essentials/configs/EssentialsConfig.java new file mode 100644 index 0000000..5549a0c --- /dev/null +++ b/src/main/java/dev/zontreck/essentials/configs/EssentialsConfig.java @@ -0,0 +1,5 @@ +package dev.zontreck.essentials.configs; + +public class EssentialsConfig { + +} diff --git a/src/main/java/dev/zontreck/essentials/events/RTPNotCancelledEvent.java b/src/main/java/dev/zontreck/essentials/events/RTPNotCancelledEvent.java new file mode 100644 index 0000000..d60c4d1 --- /dev/null +++ b/src/main/java/dev/zontreck/essentials/events/RTPNotCancelledEvent.java @@ -0,0 +1,23 @@ +package dev.zontreck.essentials.events; + +import dev.zontreck.essentials.util.RTPContainer; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.Event; + +/** + * Fired if the RTP Was not cancelled to signal that a warp should occur now! + */ +public class RTPNotCancelledEvent extends Event +{ + public final RTPContainer container; + public RTPNotCancelledEvent(RTPContainer container) + { + this.container=container; + } + + public void send() + { + MinecraftForge.EVENT_BUS.post(this); + } + +} diff --git a/src/main/java/dev/zontreck/essentials/util/ForgeEventsHandler.java b/src/main/java/dev/zontreck/essentials/util/ForgeEventsHandler.java index 83cf419..1a4b259 100644 --- a/src/main/java/dev/zontreck/essentials/util/ForgeEventsHandler.java +++ b/src/main/java/dev/zontreck/essentials/util/ForgeEventsHandler.java @@ -7,9 +7,18 @@ import java.nio.file.Path; import java.util.UUID; import dev.zontreck.essentials.AriasEssentials; +import dev.zontreck.essentials.Messages; +import dev.zontreck.essentials.commands.teleport.TeleportActioner; +import dev.zontreck.essentials.commands.teleport.TeleportContainer; +import dev.zontreck.essentials.commands.teleport.TeleportDestination; +import dev.zontreck.essentials.events.RTPNotCancelledEvent; import dev.zontreck.essentials.homes.HomesProvider; +import dev.zontreck.libzontreck.chat.ChatColor; import dev.zontreck.libzontreck.events.ProfileLoadedEvent; import dev.zontreck.libzontreck.events.ProfileUnloadedEvent; +import dev.zontreck.libzontreck.util.ChatHelpers; +import dev.zontreck.libzontreck.vectors.WorldPosition; +import net.minecraft.network.chat.TextComponent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -34,4 +43,15 @@ public class ForgeEventsHandler { AriasEssentials.player_homes.remove(UUID.fromString(ev.user_id)); AriasEssentials.LOGGER.info("Homes unloaded"); } + + + @SubscribeEvent + public void onRTPNotCancelled(final RTPNotCancelledEvent ev) + { + final TeleportContainer contain = ev.container.container; + + ChatHelpers.broadcastTo(contain.PlayerInst.getUUID(), new TextComponent(Messages.ESSENTIALS_PREFIX + ChatColor.DARK_PURPLE+" A suitable location has been found. Wormhole opening now!"), contain.PlayerInst.server); + TeleportActioner.ApplyTeleportEffect(contain.PlayerInst); + TeleportActioner.PerformTeleport(contain); + } } diff --git a/src/main/java/dev/zontreck/essentials/util/RTPContainer.java b/src/main/java/dev/zontreck/essentials/util/RTPContainer.java index f070b86..b5c643b 100644 --- a/src/main/java/dev/zontreck/essentials/util/RTPContainer.java +++ b/src/main/java/dev/zontreck/essentials/util/RTPContainer.java @@ -80,6 +80,8 @@ public class RTPContainer { public void newPosition() { if(!AriasEssentials.ALIVE)return; containingThread=Thread.currentThread(); + if(tries>=30)return; + AriasEssentials.LOGGER.info("RTPContainer starts looking for new position"); Random rng = new Random(Instant.now().getEpochSecond()); Vector3 pos = new Vector3(rng.nextDouble(0xFFFF), 0, rng.nextDouble(0xFFFF)); BlockPos bpos = pos.asBlockPos(); @@ -107,6 +109,7 @@ public class RTPContainer { } tries++; + AriasEssentials.LOGGER.info("RTPContainer returns new position"); } private void spiralPositions(Vector3 position) @@ -133,8 +136,8 @@ public class RTPContainer { } newPosition(); } - - public boolean isSafe(BlockPos blockPos) { + private boolean safe(BlockPos blockPos) + { containingThread=Thread.currentThread(); BlockState b = container.Dimension.getBlockState(blockPos); BlockState b2 = container.Dimension.getBlockState(blockPos.above()); @@ -152,4 +155,13 @@ public class RTPContainer { return false; } + public boolean isSafe(BlockPos blockPos) { + boolean s = safe(blockPos); + if(s) + { + AriasEssentials.LOGGER.info("/!\\ SAFE /!\\"); + }else AriasEssentials.LOGGER.info("/!\\ NOT SAFE /!\\"); + + return s; + } } diff --git a/src/main/java/dev/zontreck/essentials/util/RandomPositionLocator.java b/src/main/java/dev/zontreck/essentials/util/RandomPositionLocator.java index 1d12da8..ea4af1d 100644 --- a/src/main/java/dev/zontreck/essentials/util/RandomPositionLocator.java +++ b/src/main/java/dev/zontreck/essentials/util/RandomPositionLocator.java @@ -3,6 +3,7 @@ package dev.zontreck.essentials.util; import dev.zontreck.essentials.AriasEssentials; import dev.zontreck.essentials.Messages; import dev.zontreck.essentials.events.RTPEvent; +import dev.zontreck.essentials.events.RTPNotCancelledEvent; import dev.zontreck.libzontreck.chat.ChatColor; import dev.zontreck.libzontreck.util.ChatHelpers; import dev.zontreck.libzontreck.util.DelayedExecutorService; @@ -43,7 +44,7 @@ public class RandomPositionLocator implements Runnable levl.setChunkForced(cpos.x, cpos.z, true); int curChecks=0; - while(curChecks<30) + while(curChecks<10) { if(contain.isSafe(contain.container.world_pos.Position.asBlockPos())) { @@ -54,9 +55,13 @@ public class RandomPositionLocator implements Runnable if(MinecraftForge.EVENT_BUS.post(new RTPEvent(contain.container.PlayerInst, contain.container.world_pos))) { contain.complete=false; + contain.container.Position = contain.container.world_pos.Position.asMinecraftVector(); ChatHelpers.broadcastTo(contain.container.PlayerInst.getUUID(), new TextComponent(Messages.ESSENTIALS_PREFIX + ChatColor.doColors(" !Dark_Red!Last position checked was probably claimed. Another mod has asked us not to send you to that location, continuing the search")), contain.container.PlayerInst.server); break; + }else { + AriasEssentials.LOGGER.info("RTP Not cancelled. Actioning"); + new RTPNotCancelledEvent(contain).send(); } return; }else { @@ -80,7 +85,8 @@ public class RandomPositionLocator implements Runnable // Schedule the task to execute //run(); RandomPositionLocator next = new RandomPositionLocator(contain); - DelayedExecutorService.getInstance().schedule(next, 2); + DelayedExecutorService.getInstance().schedule(next, 1); + AriasEssentials.LOGGER.info("Giving up current RTP search. Scheduling another search in 1 second"); } }