diff --git a/src/api/java/baritone/api/event/events/WorldEvent.java b/src/api/java/baritone/api/event/events/WorldEvent.java index 2cb0eac57..c6df8caef 100644 --- a/src/api/java/baritone/api/event/events/WorldEvent.java +++ b/src/api/java/baritone/api/event/events/WorldEvent.java @@ -18,7 +18,7 @@ package baritone.api.event.events; import baritone.api.event.events.type.EventState; -import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.world.World; /** * @author Brady @@ -29,14 +29,14 @@ public final class WorldEvent { /** * The new world that is being loaded. {@code null} if being unloaded. */ - private final WorldClient world; + private final World world; /** * The state of the event */ private final EventState state; - public WorldEvent(WorldClient world, EventState state) { + public WorldEvent(World world, EventState state) { this.world = world; this.state = state; } @@ -44,7 +44,7 @@ public final class WorldEvent { /** * @return The new world that is being loaded. {@code null} if being unloaded. */ - public final WorldClient getWorld() { + public final World getWorld() { return this.world; } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index e2cc98427..82d956bd9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -21,6 +21,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; +import baritone.bot.handler.BotNetHandlerPlayClient; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.network.play.server.SPacketChunkData; import net.minecraft.network.play.server.SPacketCombatEvent; @@ -33,7 +34,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; * @author Brady * @since 8/3/2018 */ -@Mixin(NetHandlerPlayClient.class) +@Mixin(value = {NetHandlerPlayClient.class, BotNetHandlerPlayClient.class}) public class MixinNetHandlerPlayClient { @Inject( diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index a3a5fc694..2dc990d58 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -114,7 +114,7 @@ public class Baritone implements IBaritone { farmProcess = new FarmProcess(this); } - this.worldProvider = new WorldProvider(); + this.worldProvider = new WorldProvider(this); this.selectionManager = new SelectionManager(this); this.commandManager = new CommandManager(this); diff --git a/src/main/java/baritone/bot/BaritoneUser.java b/src/main/java/baritone/bot/BaritoneUser.java index f574bc48b..ccea6751c 100644 --- a/src/main/java/baritone/bot/BaritoneUser.java +++ b/src/main/java/baritone/bot/BaritoneUser.java @@ -20,6 +20,8 @@ package baritone.bot; import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.bot.IBaritoneUser; +import baritone.api.event.events.WorldEvent; +import baritone.api.event.events.type.EventState; import baritone.api.utils.IPlayerController; import baritone.bot.spec.BotMinecraft; import baritone.bot.spec.BotWorld; @@ -67,9 +69,13 @@ public final class BaritoneUser implements IBaritoneUser { } public void onWorldLoad(BotWorld world, EntityBot player, IPlayerController playerController) { + this.baritone.getGameEventHandler().onWorldEvent(new WorldEvent(world, EventState.PRE)); + this.mc.player = this.player = player; this.player.world = this.world = world; this.playerController = playerController; + + this.baritone.getGameEventHandler().onWorldEvent(new WorldEvent(world, EventState.POST)); } @Override diff --git a/src/main/java/baritone/bot/BotPlayerContext.java b/src/main/java/baritone/bot/BotPlayerContext.java index 89c5ee64f..5de01f8ce 100644 --- a/src/main/java/baritone/bot/BotPlayerContext.java +++ b/src/main/java/baritone/bot/BotPlayerContext.java @@ -17,15 +17,11 @@ package baritone.bot; -import baritone.api.BaritoneAPI; import baritone.api.bot.IBaritoneUser; import baritone.api.cache.IWorldData; import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; -import baritone.api.utils.RayTraceUtils; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; public final class BotPlayerContext implements IPlayerContext { @@ -65,7 +61,6 @@ public final class BotPlayerContext implements IPlayerContext { @Override public IWorldData worldData() { - // TODO: (bot-system): Create a solution for Bot World Data - return BaritoneAPI.getProvider().getPrimaryBaritone().getWorldProvider().getCurrentWorld(); + return bot.getBaritone().getWorldProvider().getCurrentWorld(); } } diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index c277a0d06..c1ab9af81 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -20,6 +20,7 @@ package baritone.cache; import baritone.Baritone; import baritone.api.cache.IWorldProvider; import baritone.api.utils.Helper; +import baritone.bot.BotPlayerContext; import baritone.utils.accessor.IAnvilChunkLoader; import baritone.utils.accessor.IChunkProviderServer; import net.minecraft.server.integrated.IntegratedServer; @@ -43,8 +44,13 @@ public class WorldProvider implements IWorldProvider, Helper { private static final Map worldCache = new HashMap<>(); // this is how the bots have the same cached world + private Baritone baritone; private WorldData currentWorld; + public WorldProvider(Baritone baritone) { + this.baritone = baritone; + } + @Override public final WorldData getCurrentWorld() { return this.currentWorld; @@ -91,6 +97,10 @@ public class WorldProvider implements IWorldProvider, Helper { out.write("https://github.com/cabaletta/baritone\n".getBytes()); } catch (IOException ignored) {} + if (this.baritone.getPlayerContext() instanceof BotPlayerContext) { + directory = new File(directory, "bot"); + } + // We will actually store the world data in a subfolder: "DIM" Path dir = new File(directory, "DIM" + dimension).toPath(); if (!Files.exists(dir)) { diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 36db8c0ee..de49beaac 100644 --- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -22,9 +22,7 @@ import baritone.api.cache.IWorldData; import baritone.api.utils.Helper; import baritone.api.utils.IPlayerContext; import baritone.api.utils.IPlayerController; -import baritone.api.utils.RayTraceUtils; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; /**