From d79d56c2f987bd11dd7982db3b5c37f0ae1e36ca Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Nov 2018 21:45:26 -0600 Subject: [PATCH 01/25] Expose all possible Baritone instances --- src/api/java/baritone/api/BaritoneAPI.java | 56 ++----------------- src/api/java/baritone/api/IBaritone.java | 6 -- .../java/baritone/api/IBaritoneProvider.java | 30 ++++++++++ src/main/java/baritone/Baritone.java | 24 +++----- src/main/java/baritone/BaritoneProvider.java | 23 +++++++- 5 files changed, 65 insertions(+), 74 deletions(-) diff --git a/src/api/java/baritone/api/BaritoneAPI.java b/src/api/java/baritone/api/BaritoneAPI.java index b9dbcd04..c1227830 100644 --- a/src/api/java/baritone/api/BaritoneAPI.java +++ b/src/api/java/baritone/api/BaritoneAPI.java @@ -17,16 +17,6 @@ package baritone.api; -import baritone.api.behavior.ILookBehavior; -import baritone.api.behavior.IMemoryBehavior; -import baritone.api.behavior.IPathingBehavior; -import baritone.api.cache.IWorldProvider; -import baritone.api.cache.IWorldScanner; -import baritone.api.event.listener.IGameEventListener; -import baritone.api.process.ICustomGoalProcess; -import baritone.api.process.IFollowProcess; -import baritone.api.process.IGetToBlockProcess; -import baritone.api.process.IMineProcess; import baritone.api.utils.SettingsUtil; import java.util.Iterator; @@ -42,59 +32,23 @@ import java.util.ServiceLoader; */ public final class BaritoneAPI { - private static final IBaritone baritone; + private static final IBaritoneProvider provider; private static final Settings settings; static { ServiceLoader baritoneLoader = ServiceLoader.load(IBaritoneProvider.class); Iterator instances = baritoneLoader.iterator(); - baritone = instances.next().getBaritoneForPlayer(null); // PWNAGE + provider = instances.next(); settings = new Settings(); SettingsUtil.readAndApply(settings); } - public static IFollowProcess getFollowProcess() { - return baritone.getFollowProcess(); - } - - public static ILookBehavior getLookBehavior() { - return baritone.getLookBehavior(); - } - - public static IMemoryBehavior getMemoryBehavior() { - return baritone.getMemoryBehavior(); - } - - public static IMineProcess getMineProcess() { - return baritone.getMineProcess(); - } - - public static IPathingBehavior getPathingBehavior() { - return baritone.getPathingBehavior(); + public static IBaritoneProvider getProvider() { + return BaritoneAPI.provider; } public static Settings getSettings() { - return settings; - } - - public static IWorldProvider getWorldProvider() { - return baritone.getWorldProvider(); - } - - public static IWorldScanner getWorldScanner() { - return baritone.getWorldScanner(); - } - - public static ICustomGoalProcess getCustomGoalProcess() { - return baritone.getCustomGoalProcess(); - } - - public static IGetToBlockProcess getGetToBlockProcess() { - return baritone.getGetToBlockProcess(); - } - - public static void registerEventListener(IGameEventListener listener) { - baritone.registerEventListener(listener); + return BaritoneAPI.settings; } } diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 7646cb8f..b462c620 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -72,12 +72,6 @@ public interface IBaritone { */ IWorldProvider getWorldProvider(); - /** - * @return The {@link IWorldScanner} instance - * @see IWorldScanner - */ - IWorldScanner getWorldScanner(); - IInputOverrideHandler getInputOverrideHandler(); ICustomGoalProcess getCustomGoalProcess(); diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 745842ce..b52e5603 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -17,13 +17,35 @@ package baritone.api; +import baritone.api.cache.IWorldScanner; import net.minecraft.client.entity.EntityPlayerSP; +import java.util.List; + /** * @author Leijurv */ public interface IBaritoneProvider { + /** + * Returns the primary {@link IBaritone} instance. This instance is persistent, and + * is represented by the local player that is created by the game itself, not a "bot" + * player through Baritone. + * + * @return The primary {@link IBaritone} instance. + */ + IBaritone getPrimaryBaritone(); + + /** + * Returns all of the active {@link IBaritone} instances. This includes the local one + * returned by {@link #getPrimaryBaritone()}. + * + * @see #getBaritoneForPlayer(EntityPlayerSP) + * + * @return All active {@link IBaritone} instances. + */ + List getAllBaritones(); + /** * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. This will likely be * replaced with {@code #getBaritoneForUser(IBaritoneUser)} when {@code bot-system} is merged. @@ -32,4 +54,12 @@ public interface IBaritoneProvider { * @return The {@link IBaritone} instance. */ IBaritone getBaritoneForPlayer(EntityPlayerSP player); + + /** + * Returns the {@link IWorldScanner} instance. This is not a type returned by + * {@link IBaritone} implementation, because it is not linked with {@link IBaritone}. + * + * @return The {@link IWorldScanner} instance. + */ + IWorldScanner getWorldScanner(); } diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index b752b63e..29cb2fb7 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -95,6 +95,7 @@ public enum Baritone implements IBaritone { private PathingControlManager pathingControlManager; + private IPlayerContext playerContext; private WorldProvider worldProvider; Baritone() { @@ -124,6 +125,7 @@ public enum Baritone implements IBaritone { getToBlockProcess = new GetToBlockProcess(this); } + this.playerContext = LocalPlayerContext.INSTANCE; this.worldProvider = new WorldProvider(); if (BaritoneAutoTest.ENABLE_AUTO_TEST) { @@ -141,11 +143,6 @@ public enum Baritone implements IBaritone { return this.gameEventHandler; } - @Override - public InputOverrideHandler getInputOverrideHandler() { - return this.inputOverrideHandler; - } - public List getBehaviors() { return this.behaviors; } @@ -155,6 +152,11 @@ public enum Baritone implements IBaritone { this.registerEventListener(behavior); } + @Override + public InputOverrideHandler getInputOverrideHandler() { + return this.inputOverrideHandler; + } + @Override public CustomGoalProcess getCustomGoalProcess() { // Iffy return customGoalProcess; @@ -167,7 +169,7 @@ public enum Baritone implements IBaritone { @Override public IPlayerContext getPlayerContext() { - return LocalPlayerContext.INSTANCE; + return playerContext; } @Override @@ -200,16 +202,6 @@ public enum Baritone implements IBaritone { return worldProvider; } - /** - * TODO-yeet This shouldn't be baritone-instance specific - * - * @return world scanner instance - */ - @Override - public WorldScanner getWorldScanner() { - return WorldScanner.INSTANCE; - } - @Override public void registerEventListener(IGameEventListener listener) { this.gameEventHandler.registerEventListener(listener); diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index a80dfe5e..aa7e08e4 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -19,15 +19,36 @@ package baritone; import baritone.api.IBaritone; import baritone.api.IBaritoneProvider; +import baritone.api.cache.IWorldScanner; +import baritone.cache.WorldScanner; import net.minecraft.client.entity.EntityPlayerSP; +import java.util.Collections; +import java.util.List; + /** * @author Brady * @since 9/29/2018 */ public final class BaritoneProvider implements IBaritoneProvider { + + @Override + public IBaritone getPrimaryBaritone() { + return Baritone.INSTANCE; + } + + @Override + public List getAllBaritones() { + return Collections.singletonList(Baritone.INSTANCE); + } + @Override public IBaritone getBaritoneForPlayer(EntityPlayerSP player) { - return Baritone.INSTANCE; // pwnage + return Baritone.INSTANCE; + } + + @Override + public IWorldScanner getWorldScanner() { + return WorldScanner.INSTANCE; } } From f9270a7ed04dc29fcdb14e3192a1b593d94bd800 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Nov 2018 21:47:40 -0600 Subject: [PATCH 02/25] my house --- src/main/java/baritone/Baritone.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 29cb2fb7..9f0ab9db 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -136,7 +136,7 @@ public enum Baritone implements IBaritone { } public PathingControlManager getPathingControlManager() { - return pathingControlManager; + return this.pathingControlManager; } public IGameEventListener getGameEventHandler() { @@ -159,47 +159,47 @@ public enum Baritone implements IBaritone { @Override public CustomGoalProcess getCustomGoalProcess() { // Iffy - return customGoalProcess; + return this.customGoalProcess; } @Override public GetToBlockProcess getGetToBlockProcess() { // Iffy - return getToBlockProcess; + return this.getToBlockProcess; } @Override public IPlayerContext getPlayerContext() { - return playerContext; + return this.playerContext; } @Override public FollowProcess getFollowProcess() { - return followProcess; + return this.followProcess; } @Override public LookBehavior getLookBehavior() { - return lookBehavior; + return this.lookBehavior; } @Override public MemoryBehavior getMemoryBehavior() { - return memoryBehavior; + return this.memoryBehavior; } @Override public MineProcess getMineProcess() { - return mineProcess; + return this.mineProcess; } @Override public PathingBehavior getPathingBehavior() { - return pathingBehavior; + return this.pathingBehavior; } @Override public WorldProvider getWorldProvider() { - return worldProvider; + return this.worldProvider; } @Override From 3ccb0c74c6e4d98c07be5cfface1b5013341cb99 Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Nov 2018 21:53:27 -0600 Subject: [PATCH 03/25] Remove timestamps from since annotations --- src/api/java/baritone/api/cache/IBlockTypeAccess.java | 2 +- src/api/java/baritone/api/event/events/ChatEvent.java | 2 +- src/api/java/baritone/api/event/events/ChunkEvent.java | 2 +- src/api/java/baritone/api/event/events/PacketEvent.java | 2 +- src/api/java/baritone/api/event/events/RenderEvent.java | 2 +- src/api/java/baritone/api/event/events/WorldEvent.java | 2 +- src/api/java/baritone/api/event/events/type/Cancellable.java | 2 +- src/api/java/baritone/api/event/events/type/EventState.java | 2 +- .../baritone/api/event/listener/AbstractGameEventListener.java | 2 +- .../java/baritone/api/event/listener/IGameEventListener.java | 2 +- src/launch/java/baritone/launch/BaritoneTweaker.java | 2 +- src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java | 2 +- src/launch/java/baritone/launch/mixins/MixinKeyBinding.java | 2 +- src/launch/java/baritone/launch/mixins/MixinMinecraft.java | 2 +- .../java/baritone/launch/mixins/MixinNetHandlerPlayClient.java | 2 +- src/launch/java/baritone/launch/mixins/MixinNetworkManager.java | 2 +- src/launch/java/baritone/launch/mixins/MixinWorldClient.java | 2 +- src/main/java/baritone/Baritone.java | 2 +- src/main/java/baritone/behavior/Behavior.java | 2 +- src/main/java/baritone/behavior/MemoryBehavior.java | 2 +- src/main/java/baritone/cache/CachedChunk.java | 2 +- src/main/java/baritone/cache/CachedRegion.java | 2 +- src/main/java/baritone/cache/CachedWorld.java | 2 +- src/main/java/baritone/cache/ChunkPacker.java | 2 +- src/main/java/baritone/cache/WorldProvider.java | 2 +- src/main/java/baritone/event/GameEventHandler.java | 2 +- src/main/java/baritone/pathing/movement/CalculationContext.java | 2 +- src/main/java/baritone/utils/Helper.java | 2 +- src/main/java/baritone/utils/InputOverrideHandler.java | 2 +- src/main/java/baritone/utils/PathRenderer.java | 2 +- src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java | 2 +- src/main/java/baritone/utils/accessor/IChunkProviderServer.java | 2 +- src/main/java/baritone/utils/pathing/PathingBlockType.java | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/api/java/baritone/api/cache/IBlockTypeAccess.java b/src/api/java/baritone/api/cache/IBlockTypeAccess.java index 242ff154..0804a73a 100644 --- a/src/api/java/baritone/api/cache/IBlockTypeAccess.java +++ b/src/api/java/baritone/api/cache/IBlockTypeAccess.java @@ -22,7 +22,7 @@ import net.minecraft.util.math.BlockPos; /** * @author Brady - * @since 8/4/2018 2:01 AM + * @since 8/4/2018 */ public interface IBlockTypeAccess { diff --git a/src/api/java/baritone/api/event/events/ChatEvent.java b/src/api/java/baritone/api/event/events/ChatEvent.java index ede83f24..5ab9f5bb 100644 --- a/src/api/java/baritone/api/event/events/ChatEvent.java +++ b/src/api/java/baritone/api/event/events/ChatEvent.java @@ -22,7 +22,7 @@ import net.minecraft.client.entity.EntityPlayerSP; /** * @author Brady - * @since 8/1/2018 6:39 PM + * @since 8/1/2018 */ public final class ChatEvent extends ManagedPlayerEvent.Cancellable { diff --git a/src/api/java/baritone/api/event/events/ChunkEvent.java b/src/api/java/baritone/api/event/events/ChunkEvent.java index 5c22d830..1541b1f1 100644 --- a/src/api/java/baritone/api/event/events/ChunkEvent.java +++ b/src/api/java/baritone/api/event/events/ChunkEvent.java @@ -21,7 +21,7 @@ import baritone.api.event.events.type.EventState; /** * @author Brady - * @since 8/2/2018 12:32 AM + * @since 8/2/2018 */ public final class ChunkEvent { diff --git a/src/api/java/baritone/api/event/events/PacketEvent.java b/src/api/java/baritone/api/event/events/PacketEvent.java index 9a3d2315..9b5295ee 100644 --- a/src/api/java/baritone/api/event/events/PacketEvent.java +++ b/src/api/java/baritone/api/event/events/PacketEvent.java @@ -23,7 +23,7 @@ import net.minecraft.network.Packet; /** * @author Brady - * @since 8/6/2018 9:31 PM + * @since 8/6/2018 */ public final class PacketEvent { diff --git a/src/api/java/baritone/api/event/events/RenderEvent.java b/src/api/java/baritone/api/event/events/RenderEvent.java index b5a77276..1f879bfc 100644 --- a/src/api/java/baritone/api/event/events/RenderEvent.java +++ b/src/api/java/baritone/api/event/events/RenderEvent.java @@ -19,7 +19,7 @@ package baritone.api.event.events; /** * @author Brady - * @since 8/5/2018 12:28 AM + * @since 8/5/2018 */ public final class RenderEvent { diff --git a/src/api/java/baritone/api/event/events/WorldEvent.java b/src/api/java/baritone/api/event/events/WorldEvent.java index c7c7e102..2cb0eac5 100644 --- a/src/api/java/baritone/api/event/events/WorldEvent.java +++ b/src/api/java/baritone/api/event/events/WorldEvent.java @@ -22,7 +22,7 @@ import net.minecraft.client.multiplayer.WorldClient; /** * @author Brady - * @since 8/4/2018 3:13 AM + * @since 8/4/2018 */ public final class WorldEvent { diff --git a/src/api/java/baritone/api/event/events/type/Cancellable.java b/src/api/java/baritone/api/event/events/type/Cancellable.java index 62ff9049..ab9707e9 100644 --- a/src/api/java/baritone/api/event/events/type/Cancellable.java +++ b/src/api/java/baritone/api/event/events/type/Cancellable.java @@ -19,7 +19,7 @@ package baritone.api.event.events.type; /** * @author Brady - * @since 8/1/2018 6:41 PM + * @since 8/1/2018 */ public class Cancellable implements ICancellable { diff --git a/src/api/java/baritone/api/event/events/type/EventState.java b/src/api/java/baritone/api/event/events/type/EventState.java index 072e12c1..5f010c30 100644 --- a/src/api/java/baritone/api/event/events/type/EventState.java +++ b/src/api/java/baritone/api/event/events/type/EventState.java @@ -19,7 +19,7 @@ package baritone.api.event.events.type; /** * @author Brady - * @since 8/2/2018 12:34 AM + * @since 8/2/2018 */ public enum EventState { diff --git a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java index 6af8e402..c11f926d 100644 --- a/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/AbstractGameEventListener.java @@ -26,7 +26,7 @@ import baritone.api.event.events.*; * * @author Brady * @see IGameEventListener - * @since 8/1/2018 6:29 PM + * @since 8/1/2018 */ public interface AbstractGameEventListener extends IGameEventListener { diff --git a/src/api/java/baritone/api/event/listener/IGameEventListener.java b/src/api/java/baritone/api/event/listener/IGameEventListener.java index b1dda0de..c3b4e688 100644 --- a/src/api/java/baritone/api/event/listener/IGameEventListener.java +++ b/src/api/java/baritone/api/event/listener/IGameEventListener.java @@ -33,7 +33,7 @@ import net.minecraft.util.text.ITextComponent; /** * @author Brady - * @since 7/31/2018 11:05 PM + * @since 7/31/2018 */ public interface IGameEventListener { diff --git a/src/launch/java/baritone/launch/BaritoneTweaker.java b/src/launch/java/baritone/launch/BaritoneTweaker.java index e78da09f..b9db9b6a 100644 --- a/src/launch/java/baritone/launch/BaritoneTweaker.java +++ b/src/launch/java/baritone/launch/BaritoneTweaker.java @@ -29,7 +29,7 @@ import java.util.List; /** * @author Brady - * @since 7/31/2018 9:59 PM + * @since 7/31/2018 */ public class BaritoneTweaker extends SimpleTweaker { diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index a180df5c..19e80b5e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -32,7 +32,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * @author Brady - * @since 8/1/2018 5:06 PM + * @since 8/1/2018 */ @Mixin(EntityPlayerSP.class) public class MixinEntityPlayerSP { diff --git a/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java b/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java index c776d228..03fe12df 100644 --- a/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java +++ b/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java @@ -26,7 +26,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; /** * @author Brady - * @since 7/31/2018 11:44 PM + * @since 7/31/2018 */ @Mixin(KeyBinding.class) public class MixinKeyBinding { diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 3826f0d7..637cf4a9 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -42,7 +42,7 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture; /** * @author Brady - * @since 7/31/2018 10:51 PM + * @since 7/31/2018 */ @Mixin(Minecraft.class) public class MixinMinecraft { diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index 498b5aff..1274f171 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -30,7 +30,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * @author Brady - * @since 8/3/2018 12:54 AM + * @since 8/3/2018 */ @Mixin(NetHandlerPlayClient.class) public class MixinNetHandlerPlayClient { diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index bf15bfc3..9576952e 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -36,7 +36,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * @author Brady - * @since 8/6/2018 9:30 PM + * @since 8/6/2018 */ @Mixin(NetworkManager.class) public class MixinNetworkManager { diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java index 322239b7..f9b4fd08 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java @@ -28,7 +28,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; /** * @author Brady - * @since 8/2/2018 12:41 AM + * @since 8/2/2018 */ @Mixin(WorldClient.class) public class MixinWorldClient { diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 9f0ab9db..4f24f6d0 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -52,7 +52,7 @@ import java.util.concurrent.TimeUnit; /** * @author Brady - * @since 7/31/2018 10:50 PM + * @since 7/31/2018 */ public enum Baritone implements IBaritone { diff --git a/src/main/java/baritone/behavior/Behavior.java b/src/main/java/baritone/behavior/Behavior.java index f1fe0d9f..36273c02 100644 --- a/src/main/java/baritone/behavior/Behavior.java +++ b/src/main/java/baritone/behavior/Behavior.java @@ -25,7 +25,7 @@ import baritone.api.utils.IPlayerContext; * A type of game event listener that is given {@link Baritone} instance context. * * @author Brady - * @since 8/1/2018 6:29 PM + * @since 8/1/2018 */ public class Behavior implements IBehavior { diff --git a/src/main/java/baritone/behavior/MemoryBehavior.java b/src/main/java/baritone/behavior/MemoryBehavior.java index 59a3af44..84507367 100644 --- a/src/main/java/baritone/behavior/MemoryBehavior.java +++ b/src/main/java/baritone/behavior/MemoryBehavior.java @@ -42,7 +42,7 @@ import java.util.*; /** * @author Brady - * @since 8/6/2018 9:47 PM + * @since 8/6/2018 */ public final class MemoryBehavior extends Behavior implements IMemoryBehavior { diff --git a/src/main/java/baritone/cache/CachedChunk.java b/src/main/java/baritone/cache/CachedChunk.java index 406a9475..1e55cb64 100644 --- a/src/main/java/baritone/cache/CachedChunk.java +++ b/src/main/java/baritone/cache/CachedChunk.java @@ -27,7 +27,7 @@ import java.util.*; /** * @author Brady - * @since 8/3/2018 1:04 AM + * @since 8/3/2018 */ public final class CachedChunk { diff --git a/src/main/java/baritone/cache/CachedRegion.java b/src/main/java/baritone/cache/CachedRegion.java index 95c20f37..d8426197 100644 --- a/src/main/java/baritone/cache/CachedRegion.java +++ b/src/main/java/baritone/cache/CachedRegion.java @@ -32,7 +32,7 @@ import java.util.zip.GZIPOutputStream; /** * @author Brady - * @since 8/3/2018 9:35 PM + * @since 8/3/2018 */ public final class CachedRegion implements ICachedRegion { diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index 9c73df70..a4884963 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -35,7 +35,7 @@ import java.util.concurrent.LinkedBlockingQueue; /** * @author Brady - * @since 8/4/2018 12:02 AM + * @since 8/4/2018 */ public final class CachedWorld implements ICachedWorld, Helper { diff --git a/src/main/java/baritone/cache/ChunkPacker.java b/src/main/java/baritone/cache/ChunkPacker.java index be7655b4..44153fdc 100644 --- a/src/main/java/baritone/cache/ChunkPacker.java +++ b/src/main/java/baritone/cache/ChunkPacker.java @@ -35,7 +35,7 @@ import java.util.*; /** * @author Brady - * @since 8/3/2018 1:09 AM + * @since 8/3/2018 */ public final class ChunkPacker { diff --git a/src/main/java/baritone/cache/WorldProvider.java b/src/main/java/baritone/cache/WorldProvider.java index 1bd27a98..fe33a4d1 100644 --- a/src/main/java/baritone/cache/WorldProvider.java +++ b/src/main/java/baritone/cache/WorldProvider.java @@ -36,7 +36,7 @@ import java.util.function.Consumer; /** * @author Brady - * @since 8/4/2018 11:06 AM + * @since 8/4/2018 */ public class WorldProvider implements IWorldProvider, Helper { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 084b5562..431a1d24 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -30,7 +30,7 @@ import java.util.List; /** * @author Brady - * @since 7/31/2018 11:04 PM + * @since 7/31/2018 */ public final class GameEventHandler implements IGameEventListener, Helper { diff --git a/src/main/java/baritone/pathing/movement/CalculationContext.java b/src/main/java/baritone/pathing/movement/CalculationContext.java index d2398ae2..cb4727cc 100644 --- a/src/main/java/baritone/pathing/movement/CalculationContext.java +++ b/src/main/java/baritone/pathing/movement/CalculationContext.java @@ -36,7 +36,7 @@ import net.minecraft.world.World; /** * @author Brady - * @since 8/7/2018 4:30 PM + * @since 8/7/2018 */ public class CalculationContext { diff --git a/src/main/java/baritone/utils/Helper.java b/src/main/java/baritone/utils/Helper.java index 196ede30..0687d560 100755 --- a/src/main/java/baritone/utils/Helper.java +++ b/src/main/java/baritone/utils/Helper.java @@ -25,7 +25,7 @@ import net.minecraft.util.text.TextFormatting; /** * @author Brady - * @since 8/1/2018 12:18 AM + * @since 8/1/2018 */ public interface Helper { diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 2a125b54..228a3e86 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -34,7 +34,7 @@ import java.util.Map; * physically forcing down the assigned key. * * @author Brady - * @since 7/31/2018 11:20 PM + * @since 7/31/2018 */ public final class InputOverrideHandler extends Behavior implements IInputOverrideHandler { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 61783bd1..c1d228a4 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -51,7 +51,7 @@ import static org.lwjgl.opengl.GL11.*; /** * @author Brady - * @since 8/9/2018 4:39 PM + * @since 8/9/2018 */ public final class PathRenderer implements Helper { diff --git a/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java b/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java index 73936deb..50582b8f 100644 --- a/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java +++ b/src/main/java/baritone/utils/accessor/IAnvilChunkLoader.java @@ -24,7 +24,7 @@ import java.io.File; /** * @author Brady * @see WorldProvider - * @since 8/4/2018 11:36 AM + * @since 8/4/2018 */ public interface IAnvilChunkLoader { diff --git a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java b/src/main/java/baritone/utils/accessor/IChunkProviderServer.java index b5512a1a..e3e412b5 100644 --- a/src/main/java/baritone/utils/accessor/IChunkProviderServer.java +++ b/src/main/java/baritone/utils/accessor/IChunkProviderServer.java @@ -23,7 +23,7 @@ import net.minecraft.world.chunk.storage.IChunkLoader; /** * @author Brady * @see WorldProvider - * @since 8/4/2018 11:33 AM + * @since 8/4/2018 */ public interface IChunkProviderServer { diff --git a/src/main/java/baritone/utils/pathing/PathingBlockType.java b/src/main/java/baritone/utils/pathing/PathingBlockType.java index 35e21fc3..43a7ebef 100644 --- a/src/main/java/baritone/utils/pathing/PathingBlockType.java +++ b/src/main/java/baritone/utils/pathing/PathingBlockType.java @@ -19,7 +19,7 @@ package baritone.utils.pathing; /** * @author Brady - * @since 8/4/2018 1:11 AM + * @since 8/4/2018 */ public enum PathingBlockType { From a0dd43244c3b4aa02c4dc399cf61fc7e28e80426 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 19:54:19 -0800 Subject: [PATCH 04/25] immense iq --- src/api/java/baritone/api/IBaritoneProvider.java | 7 +++---- src/main/java/baritone/BaritoneProvider.java | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index b52e5603..673a9857 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -20,7 +20,7 @@ package baritone.api; import baritone.api.cache.IWorldScanner; import net.minecraft.client.entity.EntityPlayerSP; -import java.util.List; +import java.util.Set; /** * @author Leijurv @@ -40,11 +40,10 @@ public interface IBaritoneProvider { * Returns all of the active {@link IBaritone} instances. This includes the local one * returned by {@link #getPrimaryBaritone()}. * - * @see #getBaritoneForPlayer(EntityPlayerSP) - * * @return All active {@link IBaritone} instances. + * @see #getBaritoneForPlayer(EntityPlayerSP) */ - List getAllBaritones(); + Set getAllBaritones(); /** * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. This will likely be diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index aa7e08e4..af1d0331 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -24,7 +24,7 @@ import baritone.cache.WorldScanner; import net.minecraft.client.entity.EntityPlayerSP; import java.util.Collections; -import java.util.List; +import java.util.Set; /** * @author Brady @@ -38,8 +38,8 @@ public final class BaritoneProvider implements IBaritoneProvider { } @Override - public List getAllBaritones() { - return Collections.singletonList(Baritone.INSTANCE); + public Set getAllBaritones() { + return Collections.singleton(Baritone.INSTANCE); } @Override From 0302c6f14b6b0abef95c281d69e7423c7345419b Mon Sep 17 00:00:00 2001 From: Brady Date: Tue, 13 Nov 2018 21:56:57 -0600 Subject: [PATCH 05/25] Fix really really bad error mega critical --- src/main/java/baritone/Baritone.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 4f24f6d0..ebedf46f 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -107,6 +107,9 @@ public enum Baritone implements IBaritone { return; } + // Define this before behaviors try and get it, or else it will be null and the builds will fail! + this.playerContext = LocalPlayerContext.INSTANCE; + this.behaviors = new ArrayList<>(); { // the Behavior constructor calls baritone.registerBehavior(this) so this populates the behaviors arraylist @@ -125,7 +128,6 @@ public enum Baritone implements IBaritone { getToBlockProcess = new GetToBlockProcess(this); } - this.playerContext = LocalPlayerContext.INSTANCE; this.worldProvider = new WorldProvider(); if (BaritoneAutoTest.ENABLE_AUTO_TEST) { From 2675852dbe0171c80c3b729bb9061c5e0a640f90 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 20:11:51 -0800 Subject: [PATCH 06/25] canc --- src/main/java/baritone/utils/BaritoneAutoTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index bf05e691..59ce91e5 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -42,7 +42,6 @@ public class BaritoneAutoTest implements AbstractGameEventListener, Helper { private static final Goal GOAL = new GoalBlock(69, 121, 420); private static final int MAX_TICKS = 3500; private static final Baritone baritone = Baritone.INSTANCE; - private static final IPlayerContext ctx = baritone.getPlayerContext(); /** * Called right after the {@link GameSettings} object is created in the {@link Minecraft} instance. @@ -72,7 +71,7 @@ public class BaritoneAutoTest implements AbstractGameEventListener, Helper { @Override public void onTick(TickEvent event) { - + IPlayerContext ctx = baritone.getPlayerContext(); // If we're on the main menu then create the test world and launch the integrated server if (mc.currentScreen instanceof GuiMainMenu) { System.out.println("Beginning Baritone automatic test routine"); From f6891feb64307511fe58de1e4b98d093b081f2f3 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 21:26:27 -0800 Subject: [PATCH 07/25] removed all references to Baritone.INSTANCE --- .../baritone/launch/mixins/MixinEntity.java | 3 +- .../launch/mixins/MixinEntityLivingBase.java | 3 +- .../launch/mixins/MixinEntityPlayerSP.java | 11 ++-- .../launch/mixins/MixinEntityRenderer.java | 6 ++- .../launch/mixins/MixinKeyBinding.java | 5 +- .../launch/mixins/MixinMinecraft.java | 39 +++++++++----- .../mixins/MixinNetHandlerPlayClient.java | 48 +++++++++++------ .../launch/mixins/MixinNetworkManager.java | 40 +++++++++++--- .../launch/mixins/MixinWorldClient.java | 43 +++++++++------ src/main/java/baritone/cache/CachedWorld.java | 12 +++-- .../java/baritone/event/GameEventHandler.java | 11 ++-- .../java/baritone/utils/BaritoneAutoTest.java | 7 ++- .../java/baritone/utils/PathRenderer.java | 53 ++++++++++++------- .../utils/player/LocalPlayerContext.java | 4 +- 14 files changed, 188 insertions(+), 97 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index 8ca1743f..93b9d901 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -18,6 +18,7 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.event.events.RotationMoveEvent; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; @@ -53,7 +54,7 @@ public class MixinEntity { // noinspection ConstantConditions if (EntityPlayerSP.class.isInstance(this)) { this.motionUpdateRotationEvent = new RotationMoveEvent((EntityPlayerSP) (Object) this, RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(this.motionUpdateRotationEvent); + ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerRotationMove(this.motionUpdateRotationEvent); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index 8e2eb515..f640f349 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -18,6 +18,7 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.event.events.RotationMoveEvent; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; @@ -56,7 +57,7 @@ public abstract class MixinEntityLivingBase extends Entity { // noinspection ConstantConditions if (EntityPlayerSP.class.isInstance(this)) { this.jumpRotationEvent = new RotationMoveEvent((EntityPlayerSP) (Object) this, RotationMoveEvent.Type.JUMP, this.rotationYaw); - Baritone.INSTANCE.getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); + ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 19e80b5e..5b908d8b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -18,10 +18,11 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.behavior.IPathingBehavior; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.type.EventState; -import baritone.behavior.PathingBehavior; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.player.PlayerCapabilities; import org.spongepowered.asm.mixin.Mixin; @@ -44,7 +45,7 @@ public class MixinEntityPlayerSP { ) private void sendChatMessage(String msg, CallbackInfo ci) { ChatEvent event = new ChatEvent((EntityPlayerSP) (Object) this, msg); - Baritone.INSTANCE.getGameEventHandler().onSendChatMessage(event); + ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onSendChatMessage(event); if (event.isCancelled()) { ci.cancel(); } @@ -60,7 +61,7 @@ public class MixinEntityPlayerSP { ) ) private void onPreUpdate(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.PRE)); + ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.PRE)); } @Inject( @@ -73,7 +74,7 @@ public class MixinEntityPlayerSP { ) ) private void onPostUpdate(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.POST)); + ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.POST)); } @Redirect( @@ -84,7 +85,7 @@ public class MixinEntityPlayerSP { ) ) private boolean isAllowFlying(PlayerCapabilities capabilities) { - PathingBehavior pathingBehavior = Baritone.INSTANCE.getPathingBehavior(); + IPathingBehavior pathingBehavior = BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getPathingBehavior(); return !pathingBehavior.isPathing() && capabilities.allowFlying; } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java b/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java index 174b9e3c..63c3c223 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java @@ -18,6 +18,8 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; import net.minecraft.client.renderer.EntityRenderer; import org.spongepowered.asm.mixin.Mixin; @@ -37,6 +39,8 @@ public class MixinEntityRenderer { ) ) private void renderWorldPass(int pass, float partialTicks, long finishTimeNano, CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + ((Baritone) ibaritone).getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); + } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java b/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java index 03fe12df..5859d3c5 100644 --- a/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java +++ b/src/launch/java/baritone/launch/mixins/MixinKeyBinding.java @@ -17,7 +17,7 @@ package baritone.launch.mixins; -import baritone.Baritone; +import baritone.api.BaritoneAPI; import net.minecraft.client.settings.KeyBinding; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -37,7 +37,8 @@ public class MixinKeyBinding { cancellable = true ) private void isKeyDown(CallbackInfoReturnable cir) { - if (Baritone.INSTANCE.getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this)) { + // only the primary baritone forces keys + if (BaritoneAPI.getProvider().getPrimaryBaritone().getInputOverrideHandler().isInputForcedDown((KeyBinding) (Object) this)) { cir.setReturnValue(true); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 637cf4a9..50ba4178 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -18,6 +18,8 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import baritone.api.event.events.BlockInteractEvent; import baritone.api.event.events.TickEvent; import baritone.api.event.events.WorldEvent; @@ -57,7 +59,7 @@ public class MixinMinecraft { at = @At("RETURN") ) private void postInit(CallbackInfo ci) { - Baritone.INSTANCE.init(); + ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).init(); } @Inject( @@ -83,12 +85,15 @@ public class MixinMinecraft { ) ) private void runTick(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onTick(new TickEvent( - EventState.PRE, - (player != null && world != null) - ? TickEvent.Type.IN - : TickEvent.Type.OUT - )); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + ((Baritone) ibaritone).getGameEventHandler().onTick(new TickEvent( + EventState.PRE, + (player != null && world != null) + ? TickEvent.Type.IN + : TickEvent.Type.OUT + )); + } + } @Inject( @@ -96,7 +101,8 @@ public class MixinMinecraft { at = @At("HEAD") ) private void runTickKeyboard(CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onProcessKeyBinds(); + // keyboard input is only the primary baritone + ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onProcessKeyBinds(); } @Inject( @@ -109,7 +115,9 @@ public class MixinMinecraft { return; } - Baritone.INSTANCE.getGameEventHandler().onWorldEvent( + // mc.world changing is only the primary baritone + + ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onWorldEvent( new WorldEvent( world, EventState.PRE @@ -124,7 +132,9 @@ public class MixinMinecraft { private void postLoadWorld(WorldClient world, String loadingMessage, CallbackInfo ci) { // still fire event for both null, as that means we've just finished exiting a world - Baritone.INSTANCE.getGameEventHandler().onWorldEvent( + // mc.world changing is only the primary baritone + + ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onWorldEvent( new WorldEvent( world, EventState.POST @@ -141,7 +151,8 @@ public class MixinMinecraft { ) ) private boolean isAllowUserInput(GuiScreen screen) { - return (Baritone.INSTANCE.getPathingBehavior().getCurrent() != null && player != null) || screen.allowUserInput; + // allow user input is only the primary baritone + return (BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().getCurrent() != null && player != null) || screen.allowUserInput; } @Inject( @@ -153,7 +164,8 @@ public class MixinMinecraft { locals = LocalCapture.CAPTURE_FAILHARD ) private void onBlockBreak(CallbackInfo ci, BlockPos pos) { - Baritone.INSTANCE.getGameEventHandler().onBlockInteract(new BlockInteractEvent(pos, BlockInteractEvent.Type.BREAK)); + // clickMouse is only for the main player + ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onBlockInteract(new BlockInteractEvent(pos, BlockInteractEvent.Type.BREAK)); } @Inject( @@ -165,6 +177,7 @@ public class MixinMinecraft { locals = LocalCapture.CAPTURE_FAILHARD ) private void onBlockUse(CallbackInfo ci, EnumHand var1[], int var2, int var3, EnumHand enumhand, ItemStack itemstack, BlockPos blockpos, int i, EnumActionResult enumactionresult) { - Baritone.INSTANCE.getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); + // rightClickMouse is only for the main player + ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index 1274f171..fa5345d2 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -18,6 +18,8 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; import net.minecraft.client.network.NetHandlerPlayClient; @@ -43,14 +45,18 @@ public class MixinNetHandlerPlayClient { ) ) private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.PRE, - ChunkEvent.Type.POPULATE, - packetIn.getChunkX(), - packetIn.getChunkZ() - ) - ); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.PRE, + ChunkEvent.Type.POPULATE, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); + } + } } @Inject( @@ -58,14 +64,18 @@ public class MixinNetHandlerPlayClient { at = @At("RETURN") ) private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - ChunkEvent.Type.POPULATE, - packetIn.getChunkX(), - packetIn.getChunkZ() - ) - ); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + ChunkEvent.Type.POPULATE, + packetIn.getChunkX(), + packetIn.getChunkZ() + ) + ); + } + } } @Inject( @@ -76,6 +86,10 @@ public class MixinNetHandlerPlayClient { ) ) private void onPlayerDeath(SPacketCombatEvent packetIn, CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onPlayerDeath(); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onPlayerDeath(); + } + } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 9576952e..4d20bb7b 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -18,6 +18,8 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import baritone.api.event.events.PacketEvent; import baritone.api.event.events.type.EventState; import io.netty.channel.Channel; @@ -53,8 +55,14 @@ public class MixinNetworkManager { at = @At("HEAD") ) private void preDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { - if (this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); + if (this.direction != EnumPacketDirection.CLIENTBOUND) { + return; + } + + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); + } } } @@ -63,8 +71,14 @@ public class MixinNetworkManager { at = @At("RETURN") ) private void postDispatchPacket(Packet inPacket, final GenericFutureListener>[] futureListeners, CallbackInfo ci) { - if (this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); + if (this.direction != EnumPacketDirection.CLIENTBOUND) { + return; + } + + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); + } } } @@ -76,8 +90,13 @@ public class MixinNetworkManager { ) ) private void preProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); + if (this.direction != EnumPacketDirection.CLIENTBOUND) { + return; + } + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); + } } } @@ -86,8 +105,13 @@ public class MixinNetworkManager { at = @At("RETURN") ) private void postProcessPacket(ChannelHandlerContext context, Packet packet, CallbackInfo ci) { - if (this.channel.isOpen() && this.direction == EnumPacketDirection.CLIENTBOUND) { - Baritone.INSTANCE.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); + if (!this.channel.isOpen() || this.direction != EnumPacketDirection.CLIENTBOUND) { + return; + } + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); + } } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java index f9b4fd08..d76e6057 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java @@ -18,6 +18,8 @@ package baritone.launch.mixins; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import baritone.api.event.events.ChunkEvent; import baritone.api.event.events.type.EventState; import net.minecraft.client.multiplayer.WorldClient; @@ -38,14 +40,19 @@ public class MixinWorldClient { at = @At("HEAD") ) private void preDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.PRE, - loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, - chunkX, - chunkZ - ) - ); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.PRE, + loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, + chunkX, + chunkZ + ) + ); + } + } + } @Inject( @@ -53,13 +60,17 @@ public class MixinWorldClient { at = @At("RETURN") ) private void postDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { - Baritone.INSTANCE.getGameEventHandler().onChunkEvent( - new ChunkEvent( - EventState.POST, - loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, - chunkX, - chunkZ - ) - ); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { + ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + new ChunkEvent( + EventState.POST, + loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, + chunkX, + chunkZ + ) + ); + } + } } } diff --git a/src/main/java/baritone/cache/CachedWorld.java b/src/main/java/baritone/cache/CachedWorld.java index a4884963..31bcceab 100644 --- a/src/main/java/baritone/cache/CachedWorld.java +++ b/src/main/java/baritone/cache/CachedWorld.java @@ -18,7 +18,10 @@ package baritone.cache; import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import baritone.api.cache.ICachedWorld; +import baritone.api.cache.IWorldData; import baritone.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; @@ -190,10 +193,11 @@ public final class CachedWorld implements ICachedWorld, Helper { * If we are still in this world and dimension, return player feet, otherwise return most recently modified chunk */ private BlockPos guessPosition() { - WorldData data = Baritone.INSTANCE.getWorldProvider().getCurrentWorld(); - if (data != null && data.getCachedWorld() == this) { - // TODO-yeet fix - return Baritone.INSTANCE.getPlayerContext().playerFeet(); + for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { + IWorldData data = ibaritone.getWorldProvider().getCurrentWorld(); + if (data != null && data.getCachedWorld() == this) { + return ibaritone.getPlayerContext().playerFeet(); + } } CachedChunk mostRecentlyModified = null; for (CachedRegion region : allRegions()) { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 431a1d24..d2739b38 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -23,6 +23,7 @@ import baritone.api.event.events.type.EventState; import baritone.api.event.listener.IGameEventListener; import baritone.cache.WorldProvider; import baritone.utils.Helper; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import java.util.ArrayList; @@ -70,17 +71,19 @@ public final class GameEventHandler implements IGameEventListener, Helper { boolean isPostPopulate = state == EventState.POST && type == ChunkEvent.Type.POPULATE; + World world = baritone.getPlayerContext().world(); + // Whenever the server sends us to another dimension, chunks are unloaded // technically after the new world has been loaded, so we perform a check // to make sure the chunk being unloaded is already loaded. boolean isPreUnload = state == EventState.PRE && type == ChunkEvent.Type.UNLOAD - && mc.world.getChunkProvider().isChunkGeneratedAt(event.getX(), event.getZ()); + && world.getChunkProvider().isChunkGeneratedAt(event.getX(), event.getZ()); if (isPostPopulate || isPreUnload) { - baritone.getWorldProvider().ifWorldLoaded(world -> { - Chunk chunk = mc.world.getChunk(event.getX(), event.getZ()); - world.getCachedWorld().queueForPacking(chunk); + baritone.getWorldProvider().ifWorldLoaded(worldData -> { + Chunk chunk = world.getChunk(event.getX(), event.getZ()); + worldData.getCachedWorld().queueForPacking(chunk); }); } diff --git a/src/main/java/baritone/utils/BaritoneAutoTest.java b/src/main/java/baritone/utils/BaritoneAutoTest.java index 59ce91e5..d86a36c4 100644 --- a/src/main/java/baritone/utils/BaritoneAutoTest.java +++ b/src/main/java/baritone/utils/BaritoneAutoTest.java @@ -17,7 +17,7 @@ package baritone.utils; -import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.event.events.TickEvent; import baritone.api.event.listener.AbstractGameEventListener; import baritone.api.pathing.goals.Goal; @@ -41,7 +41,6 @@ public class BaritoneAutoTest implements AbstractGameEventListener, Helper { private static final BlockPos STARTING_POSITION = new BlockPos(0, 65, 0); private static final Goal GOAL = new GoalBlock(69, 121, 420); private static final int MAX_TICKS = 3500; - private static final Baritone baritone = Baritone.INSTANCE; /** * Called right after the {@link GameSettings} object is created in the {@link Minecraft} instance. @@ -71,7 +70,7 @@ public class BaritoneAutoTest implements AbstractGameEventListener, Helper { @Override public void onTick(TickEvent event) { - IPlayerContext ctx = baritone.getPlayerContext(); + IPlayerContext ctx = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(); // If we're on the main menu then create the test world and launch the integrated server if (mc.currentScreen instanceof GuiMainMenu) { System.out.println("Beginning Baritone automatic test routine"); @@ -107,7 +106,7 @@ public class BaritoneAutoTest implements AbstractGameEventListener, Helper { } // Setup Baritone's pathing goal and (if needed) begin pathing - baritone.getCustomGoalProcess().setGoalAndPath(GOAL); + BaritoneAPI.getProvider().getPrimaryBaritone().getCustomGoalProcess().setGoalAndPath(GOAL); // If we have reached our goal, print a message and safely close the game if (GOAL.isInGoal(ctx.playerFeet())) { diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index c1d228a4..da19e955 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -18,6 +18,7 @@ package baritone.utils; import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.event.events.RenderEvent; import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.Goal; @@ -31,12 +32,11 @@ import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.path.PathExecutor; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -65,9 +65,26 @@ public final class PathRenderer implements Helper { // System.out.println(event.getPartialTicks()); float partialTicks = event.getPartialTicks(); Goal goal = behavior.getGoal(); - EntityPlayerSP player = mc.player; + + int thisPlayerDimension = behavior.baritone.getPlayerContext().world().provider.getDimensionType().getId(); + int currentRenderViewDimension = BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world().provider.getDimensionType().getId(); + + if (thisPlayerDimension != currentRenderViewDimension) { + // this is a path for a bot in a different dimension, don't render it + return; + } + + Entity renderView = mc.getRenderViewEntity(); + + if (renderView.world != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext().world()) { + System.out.println("I have no idea what's going on"); + System.out.println("The primary baritone is in a different world than the render view entity"); + System.out.println("Not rendering the path"); + return; + } + if (goal != null && Baritone.settings().renderGoal.value) { - drawLitDankGoalBox(player, goal, partialTicks, Baritone.settings().colorGoalBox.get()); + drawLitDankGoalBox(renderView, goal, partialTicks, Baritone.settings().colorGoalBox.get()); } if (!Baritone.settings().renderPath.get()) { return; @@ -79,34 +96,32 @@ public final class PathRenderer implements Helper { PathExecutor current = behavior.getCurrent(); // this should prevent most race conditions? PathExecutor next = behavior.getNext(); // like, now it's not possible for current!=null to be true, then suddenly false because of another thread - // TODO is this enough, or do we need to acquire a lock here? - // TODO benchmark synchronized in render loop // Render the current path, if there is one if (current != null && current.getPath() != null) { int renderBegin = Math.max(current.getPosition() - 3, 0); - drawPath(current.getPath(), renderBegin, player, partialTicks, Baritone.settings().colorCurrentPath.get(), Baritone.settings().fadePath.get(), 10, 20); + drawPath(current.getPath(), renderBegin, renderView, partialTicks, Baritone.settings().colorCurrentPath.get(), Baritone.settings().fadePath.get(), 10, 20); } if (next != null && next.getPath() != null) { - drawPath(next.getPath(), 0, player, partialTicks, Baritone.settings().colorNextPath.get(), Baritone.settings().fadePath.get(), 10, 20); + drawPath(next.getPath(), 0, renderView, partialTicks, Baritone.settings().colorNextPath.get(), Baritone.settings().fadePath.get(), 10, 20); } //long split = System.nanoTime(); if (current != null) { - drawManySelectionBoxes(player, current.toBreak(), partialTicks, Baritone.settings().colorBlocksToBreak.get()); - drawManySelectionBoxes(player, current.toPlace(), partialTicks, Baritone.settings().colorBlocksToPlace.get()); - drawManySelectionBoxes(player, current.toWalkInto(), partialTicks, Baritone.settings().colorBlocksToWalkInto.get()); + drawManySelectionBoxes(renderView, current.toBreak(), partialTicks, Baritone.settings().colorBlocksToBreak.get()); + drawManySelectionBoxes(renderView, current.toPlace(), partialTicks, Baritone.settings().colorBlocksToPlace.get()); + drawManySelectionBoxes(renderView, current.toWalkInto(), partialTicks, Baritone.settings().colorBlocksToWalkInto.get()); } // If there is a path calculation currently running, render the path calculation process AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { - drawPath(p, 0, player, partialTicks, Baritone.settings().colorBestPathSoFar.get(), Baritone.settings().fadePath.get(), 10, 20); + drawPath(p, 0, renderView, partialTicks, Baritone.settings().colorBestPathSoFar.get(), Baritone.settings().fadePath.get(), 10, 20); }); currentlyRunning.pathToMostRecentNodeConsidered().ifPresent(mr -> { - drawPath(mr, 0, player, partialTicks, Baritone.settings().colorMostRecentConsidered.get(), Baritone.settings().fadePath.get(), 10, 20); - drawManySelectionBoxes(player, Collections.singletonList(mr.getDest()), partialTicks, Baritone.settings().colorMostRecentConsidered.get()); + drawPath(mr, 0, renderView, partialTicks, Baritone.settings().colorMostRecentConsidered.get(), Baritone.settings().fadePath.get(), 10, 20); + drawManySelectionBoxes(renderView, Collections.singletonList(mr.getDest()), partialTicks, Baritone.settings().colorMostRecentConsidered.get()); }); }); //long end = System.nanoTime(); @@ -116,7 +131,7 @@ public final class PathRenderer implements Helper { //} } - public static void drawPath(IPath path, int startIndex, EntityPlayerSP player, float partialTicks, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { + public static void drawPath(IPath path, int startIndex, Entity player, float partialTicks, Color color, boolean fadeOut, int fadeStart0, int fadeEnd0) { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO); GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); @@ -175,7 +190,7 @@ public final class PathRenderer implements Helper { GlStateManager.disableBlend(); } - public static void drawLine(EntityPlayer player, double bp1x, double bp1y, double bp1z, double bp2x, double bp2y, double bp2z, float partialTicks) { + public static void drawLine(Entity player, double bp1x, double bp1y, double bp1z, double bp2x, double bp2y, double bp2z, float partialTicks) { double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks; double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks; double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks; @@ -187,7 +202,7 @@ public final class PathRenderer implements Helper { BUFFER.pos(bp1x + 0.5D - d0, bp1y + 0.5D - d1, bp1z + 0.5D - d2).endVertex(); } - public static void drawManySelectionBoxes(EntityPlayer player, Collection positions, float partialTicks, Color color) { + public static void drawManySelectionBoxes(Entity player, Collection positions, float partialTicks, Color color) { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F); @@ -206,7 +221,7 @@ public final class PathRenderer implements Helper { double renderPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks; double renderPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks; positions.forEach(pos -> { - IBlockState state = BlockStateInterface.get(Baritone.INSTANCE.getPlayerContext(), pos); + IBlockState state = BlockStateInterface.get(BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(), pos); AxisAlignedBB toDraw; if (state.getBlock().equals(Blocks.AIR)) { toDraw = Blocks.DIRT.getDefaultState().getSelectedBoundingBox(Minecraft.getMinecraft().world, pos); @@ -249,7 +264,7 @@ public final class PathRenderer implements Helper { GlStateManager.disableBlend(); } - public static void drawLitDankGoalBox(EntityPlayer player, Goal goal, float partialTicks, Color color) { + public static void drawLitDankGoalBox(Entity player, Goal goal, float partialTicks, Color color) { double renderPosX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks; double renderPosY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks; double renderPosZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks; diff --git a/src/main/java/baritone/utils/player/LocalPlayerContext.java b/src/main/java/baritone/utils/player/LocalPlayerContext.java index 355c2497..a818c2d9 100644 --- a/src/main/java/baritone/utils/player/LocalPlayerContext.java +++ b/src/main/java/baritone/utils/player/LocalPlayerContext.java @@ -17,7 +17,7 @@ package baritone.utils.player; -import baritone.Baritone; +import baritone.api.BaritoneAPI; import baritone.api.cache.IWorldData; import baritone.api.utils.IPlayerContext; import net.minecraft.client.Minecraft; @@ -56,6 +56,6 @@ public final class LocalPlayerContext implements IPlayerContext { @Override public IWorldData worldData() { - return Baritone.INSTANCE.getWorldProvider().getCurrentWorld(); + return BaritoneAPI.getProvider().getPrimaryBaritone().getWorldProvider().getCurrentWorld(); } } From c74ccaafbf61dbeac007db4e9e7b62670133691d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 21:34:11 -0800 Subject: [PATCH 08/25] remove Baritone.INSTANCE --- src/main/java/baritone/Baritone.java | 8 +------- src/main/java/baritone/BaritoneProvider.java | 9 ++++++--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index ebedf46f..c5c1b3ed 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -27,7 +27,6 @@ import baritone.behavior.LookBehavior; import baritone.behavior.MemoryBehavior; import baritone.behavior.PathingBehavior; import baritone.cache.WorldProvider; -import baritone.cache.WorldScanner; import baritone.event.GameEventHandler; import baritone.process.CustomGoalProcess; import baritone.process.FollowProcess; @@ -54,12 +53,7 @@ import java.util.concurrent.TimeUnit; * @author Brady * @since 7/31/2018 */ -public enum Baritone implements IBaritone { - - /** - * Singleton instance of this class - */ - INSTANCE; +public class Baritone implements IBaritone { private static ThreadPoolExecutor threadPool; private static File dir; diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index af1d0331..93f8faed 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -32,19 +32,22 @@ import java.util.Set; */ public final class BaritoneProvider implements IBaritoneProvider { + private final Baritone primary = new Baritone(); + @Override public IBaritone getPrimaryBaritone() { - return Baritone.INSTANCE; + return primary; } @Override public Set getAllBaritones() { - return Collections.singleton(Baritone.INSTANCE); + return Collections.singleton(primary); } @Override public IBaritone getBaritoneForPlayer(EntityPlayerSP player) { - return Baritone.INSTANCE; + // TODO implement on bot-system branch + return primary; } @Override From 57b60c734bdb695f4315b2902bf2b84408115842 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 22:15:01 -0800 Subject: [PATCH 09/25] fixes to BlockBreakHelper --- .../java/baritone/utils/BlockBreakHelper.java | 56 +++++++++++++------ .../baritone/utils/InputOverrideHandler.java | 9 +-- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index b1e9ae53..e384cf9c 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -17,6 +17,9 @@ package baritone.utils; +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.utils.IPlayerContext; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; @@ -32,41 +35,62 @@ public final class BlockBreakHelper implements Helper { * The last block that we tried to break, if this value changes * between attempts, then we re-initialize the breaking process. */ - private static BlockPos lastBlock; - private static boolean didBreakLastTick; + private BlockPos lastBlock; + private boolean didBreakLastTick; - private BlockBreakHelper() {} + private IPlayerContext playerContext; - public static void tryBreakBlock(BlockPos pos, EnumFacing side) { + public BlockBreakHelper(IPlayerContext playerContext) { + this.playerContext = playerContext; + } + + public void tryBreakBlock(BlockPos pos, EnumFacing side) { if (!pos.equals(lastBlock)) { - mc.playerController.clickBlock(pos, side); + playerContext.playerController().clickBlock(pos, side); } - if (mc.playerController.onPlayerDamageBlock(pos, side)) { - mc.player.swingArm(EnumHand.MAIN_HAND); + if (playerContext.playerController().onPlayerDamageBlock(pos, side)) { + playerContext.player().swingArm(EnumHand.MAIN_HAND); } lastBlock = pos; } - public static void stopBreakingBlock() { - if (mc.playerController != null) { - mc.playerController.resetBlockRemoving(); + public void stopBreakingBlock() { + if (playerContext.playerController() != null) { + playerContext.playerController().resetBlockRemoving(); } lastBlock = null; } - public static boolean tick(boolean isLeftClick) { - RayTraceResult trace = mc.objectMouseOver; + private boolean fakeBreak() { + if (playerContext != BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext()) { + // for a non primary player, we need to fake break always, CLICK_LEFT has no effect + return true; + } + if (!Baritone.settings().leftClickWorkaround.get()) { + // if this setting is false, we CLICK_LEFT regardless of gui status + return false; + } + return mc.currentScreen != null; + } + + public boolean tick(boolean isLeftClick) { + if (!fakeBreak()) { + if (didBreakLastTick) { + stopBreakingBlock(); + } + return isLeftClick; + } + + RayTraceResult trace = mc.objectMouseOver; // TODO per-player objectMouseOver boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK; - // If we're forcing left click, we're in a gui screen, and we're looking - // at a block, break the block without a direct game input manipulation. - if (mc.currentScreen != null && isLeftClick && isBlockTrace) { + if (isLeftClick && isBlockTrace) { tryBreakBlock(trace.getBlockPos(), trace.sideHit); didBreakLastTick = true; } else if (didBreakLastTick) { stopBreakingBlock(); didBreakLastTick = false; } - return !didBreakLastTick && isLeftClick; + return false; // fakeBreak is true so no matter what we aren't forcing CLICK_LEFT } } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 228a3e86..3670a044 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -43,8 +43,11 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri */ private final Map inputForceStateMap = new HashMap<>(); + private final BlockBreakHelper blockBreakHelper; + public InputOverrideHandler(Baritone baritone) { super(baritone); + this.blockBreakHelper = new BlockBreakHelper(baritone.getPlayerContext()); } /** @@ -109,9 +112,7 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri if (event.getType() == TickEvent.Type.OUT) { return; } - if (Baritone.settings().leftClickWorkaround.get()) { - boolean stillClick = BlockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT.getKeyBinding())); - setInputForceState(Input.CLICK_LEFT, stillClick); - } + boolean stillClick = blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT.getKeyBinding())); + setInputForceState(Input.CLICK_LEFT, stillClick); } } From e93fd596ff64c6f9be3f64c09fc6e4d028af6fc1 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 22:17:18 -0800 Subject: [PATCH 10/25] customized TickEvent Type based on player context status --- .../java/baritone/launch/mixins/MixinMinecraft.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 50ba4178..303a53b1 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -86,12 +86,12 @@ public class MixinMinecraft { ) private void runTick(CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ((Baritone) ibaritone).getGameEventHandler().onTick(new TickEvent( - EventState.PRE, - (player != null && world != null) - ? TickEvent.Type.IN - : TickEvent.Type.OUT - )); + + TickEvent.Type type = ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().world() != null + ? TickEvent.Type.IN + : TickEvent.Type.OUT; + + ((Baritone) ibaritone).getGameEventHandler().onTick(new TickEvent(EventState.PRE, type)); } } From b53f3925a402e9ff26d867932a6fd891dc1c7c43 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Tue, 13 Nov 2018 22:28:12 -0800 Subject: [PATCH 11/25] forgot to add these files lol --- src/main/java/baritone/behavior/PathingBehavior.java | 5 ++--- src/main/java/baritone/pathing/path/PathExecutor.java | 2 +- src/main/java/baritone/utils/InputOverrideHandler.java | 4 ++++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 7cba8d58..7be1d405 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -36,7 +36,6 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.pathing.path.CutoffPath; import baritone.pathing.path.PathExecutor; -import baritone.utils.BlockBreakHelper; import baritone.utils.Helper; import baritone.utils.PathRenderer; import net.minecraft.util.math.BlockPos; @@ -101,7 +100,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, if (pauseRequestedLastTick && safeToCancel) { pauseRequestedLastTick = false; baritone.getInputOverrideHandler().clearAllKeys(); - BlockBreakHelper.stopBreakingBlock(); + baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); return; } if (cancelRequested) { @@ -296,7 +295,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, next = null; baritone.getInputOverrideHandler().clearAllKeys(); AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(AbstractNodeCostSearch::cancel); - BlockBreakHelper.stopBreakingBlock(); + baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); } public void forceCancel() { // NOT exposed on public api diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index fadc2f21..270bb0ca 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -452,7 +452,7 @@ public class PathExecutor implements IPathExecutor, Helper { private void cancel() { clearKeys(); - BlockBreakHelper.stopBreakingBlock(); + behavior.baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); pathPosition = path.length() + 3; failed = true; } diff --git a/src/main/java/baritone/utils/InputOverrideHandler.java b/src/main/java/baritone/utils/InputOverrideHandler.java index 3670a044..191d145a 100755 --- a/src/main/java/baritone/utils/InputOverrideHandler.java +++ b/src/main/java/baritone/utils/InputOverrideHandler.java @@ -115,4 +115,8 @@ public final class InputOverrideHandler extends Behavior implements IInputOverri boolean stillClick = blockBreakHelper.tick(isInputForcedDown(Input.CLICK_LEFT.getKeyBinding())); setInputForceState(Input.CLICK_LEFT, stillClick); } + + public BlockBreakHelper getBlockBreakHelper() { + return blockBreakHelper; + } } From ce6ec00a89d02f66af65564c7c37c68f50f0055c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 13:24:44 -0800 Subject: [PATCH 12/25] get rid of the remaining references to mc.world --- src/api/java/baritone/api/utils/RayTraceUtils.java | 2 +- src/api/java/baritone/api/utils/RotationUtils.java | 2 +- src/api/java/baritone/api/utils/VecUtils.java | 14 +++++--------- .../baritone/pathing/movement/MovementHelper.java | 11 ++++++----- .../pathing/movement/movements/MovementAscend.java | 2 +- .../movement/movements/MovementParkour.java | 10 +++++----- .../movement/movements/MovementTraverse.java | 8 ++++---- .../java/baritone/utils/BlockStateInterface.java | 6 ++++-- 8 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 8b37ef9d..13f1081b 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -51,7 +51,7 @@ public final class RayTraceUtils { direction.y * blockReachDistance, direction.z * blockReachDistance ); - return mc.world.rayTraceBlocks(start, end, false, false, true); + return entity.world.rayTraceBlocks(start, end, false, false, true); } /** diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index e1726812..b527287e 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -203,6 +203,6 @@ public final class RotationUtils { * @return The optional rotation */ public static Optional reachableCenter(Entity entity, BlockPos pos, double blockReachDistance) { - return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(pos), blockReachDistance); + return reachableOffset(entity, pos, VecUtils.calculateBlockCenter(entity.world, pos), blockReachDistance); } } diff --git a/src/api/java/baritone/api/utils/VecUtils.java b/src/api/java/baritone/api/utils/VecUtils.java index 831e0937..090cb9d7 100644 --- a/src/api/java/baritone/api/utils/VecUtils.java +++ b/src/api/java/baritone/api/utils/VecUtils.java @@ -19,21 +19,17 @@ package baritone.api.utils; import net.minecraft.block.BlockFire; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; /** * @author Brady * @since 10/13/2018 */ public final class VecUtils { - /** - * The {@link Minecraft} instance - */ - private static final Minecraft mc = Minecraft.getMinecraft(); private VecUtils() {} @@ -44,9 +40,9 @@ public final class VecUtils { * @return The center of the block's bounding box * @see #getBlockPosCenter(BlockPos) */ - public static Vec3d calculateBlockCenter(BlockPos pos) { - IBlockState b = mc.world.getBlockState(pos); - AxisAlignedBB bbox = b.getBoundingBox(mc.world, pos); + public static Vec3d calculateBlockCenter(World world, BlockPos pos) { + IBlockState b = world.getBlockState(pos); + AxisAlignedBB bbox = b.getBoundingBox(world, pos); double xDiff = (bbox.minX + bbox.maxX) / 2; double yDiff = (bbox.minY + bbox.maxY) / 2; double zDiff = (bbox.minZ + bbox.maxZ) / 2; @@ -68,7 +64,7 @@ public final class VecUtils { * * @param pos The block position * @return The assumed center of the position - * @see #calculateBlockCenter(BlockPos) + * @see #calculateBlockCenter(World, BlockPos) */ public static Vec3d getBlockPosCenter(BlockPos pos) { return new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); diff --git a/src/main/java/baritone/pathing/movement/MovementHelper.java b/src/main/java/baritone/pathing/movement/MovementHelper.java index a715ff9f..15d79040 100644 --- a/src/main/java/baritone/pathing/movement/MovementHelper.java +++ b/src/main/java/baritone/pathing/movement/MovementHelper.java @@ -35,6 +35,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraft.world.chunk.EmptyChunk; /** @@ -85,7 +86,7 @@ public interface MovementHelper extends ActionCosts, Helper { // so the only remaining dynamic isPassables are snow and trapdoor // if they're cached as a top block, we don't know their metadata // default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) - if (mc.world.getChunk(x >> 4, z >> 4) instanceof EmptyChunk) { + if (bsi.getWorld().getChunk(x >> 4, z >> 4) instanceof EmptyChunk) { return true; } if (snow) { @@ -150,7 +151,7 @@ public interface MovementHelper extends ActionCosts, Helper { return block.isPassable(null, null); } - static boolean isReplacable(int x, int y, int z, IBlockState state) { + static boolean isReplacable(int x, int y, int z, IBlockState state, World world) { // for MovementTraverse and MovementAscend // block double plant defaults to true when the block doesn't match, so don't need to check that case // all other overrides just return true or false @@ -164,7 +165,7 @@ public interface MovementHelper extends ActionCosts, Helper { Block block = state.getBlock(); if (block instanceof BlockSnow) { // as before, default to true (mostly because it would otherwise make long distance pathing through snowy biomes impossible) - if (mc.world.getChunk(x >> 4, z >> 4) instanceof EmptyChunk) { + if (world.getChunk(x >> 4, z >> 4) instanceof EmptyChunk) { return true; } return state.getValue(BlockSnow.LAYERS) == 1; @@ -439,7 +440,7 @@ public interface MovementHelper extends ActionCosts, Helper { * water, regardless of whether or not it is flowing. * * @param ctx The player context - * @param bp The block pos + * @param bp The block pos * @return Whether or not the block is water */ static boolean isWater(IPlayerContext ctx, BlockPos bp) { @@ -454,7 +455,7 @@ public interface MovementHelper extends ActionCosts, Helper { * Returns whether or not the specified pos has a liquid * * @param ctx The player context - * @param p The pos + * @param p The pos * @return Whether or not the block is a liquid */ static boolean isLiquid(IPlayerContext ctx, BlockPos p) { diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 5321e22e..3d737580 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -76,7 +76,7 @@ public class MovementAscend extends Movement { if (!context.canPlaceThrowawayAt(destX, y, destZ)) { return COST_INF; } - if (toPlace.getBlock() != Blocks.AIR && !MovementHelper.isWater(toPlace.getBlock()) && !MovementHelper.isReplacable(destX, y, destZ, toPlace)) { + if (toPlace.getBlock() != Blocks.AIR && !MovementHelper.isWater(toPlace.getBlock()) && !MovementHelper.isReplacable(destX, y, destZ, toPlace, context.world())) { return COST_INF; } // TODO: add ability to place against .down() as well as the cardinal directions diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index 71fba81a..ede456b6 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -45,7 +45,7 @@ import java.util.Objects; public class MovementParkour extends Movement { - private static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP = { EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN }; + private static final EnumFacing[] HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.EAST, EnumFacing.WEST, EnumFacing.DOWN}; private static final BetterBlockPos[] EMPTY = new BetterBlockPos[]{}; private final EnumFacing direction; @@ -135,12 +135,12 @@ public class MovementParkour extends Movement { if (!context.canPlaceThrowawayAt(destX, y - 1, destZ)) { return; } - if (toPlace.getBlock() != Blocks.AIR && !MovementHelper.isWater(toPlace.getBlock()) && !MovementHelper.isReplacable(destX, y - 1, destZ, toPlace)) { + if (toPlace.getBlock() != Blocks.AIR && !MovementHelper.isWater(toPlace.getBlock()) && !MovementHelper.isReplacable(destX, y - 1, destZ, toPlace, context.world())) { return; } for (int i = 0; i < 5; i++) { - int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP [i].getXOffset(); - int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP [i].getZOffset(); + int againstX = destX + HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP[i].getXOffset(); + int againstZ = destZ + HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP[i].getZOffset(); if (againstX == x + xDiff * 3 && againstZ == z + zDiff * 3) { // we can't turn around that fast continue; } @@ -216,7 +216,7 @@ public class MovementParkour extends Movement { if (!MovementHelper.canWalkOn(ctx, dest.down()) && !ctx.player().onGround) { BlockPos positionToPlace = dest.down(); for (int i = 0; i < 5; i++) { - BlockPos against1 = positionToPlace.offset(HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP [i]); + BlockPos against1 = positionToPlace.offset(HORIZONTALS_BUT_ALSO_DOWN____SO_EVERY_DIRECTION_EXCEPT_UP[i]); if (against1.up().equals(src.offset(direction, 3))) { // we can't turn around that fast continue; } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index ef7a9069..d80043af 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -101,7 +101,7 @@ public class MovementTraverse extends Movement { if (srcDown == Blocks.LADDER || srcDown == Blocks.VINE) { return COST_INF; } - if (destOn.getBlock().equals(Blocks.AIR) || MovementHelper.isReplacable(destX, y - 1, destZ, destOn)) { + if (destOn.getBlock().equals(Blocks.AIR) || MovementHelper.isReplacable(destX, y - 1, destZ, destOn, context.world())) { boolean throughWater = MovementHelper.isWater(pb0.getBlock()) || MovementHelper.isWater(pb1.getBlock()); if (MovementHelper.isWater(destOn.getBlock()) && throughWater) { return COST_INF; @@ -167,7 +167,7 @@ public class MovementTraverse extends Movement { // combine the yaw to the center of the destination, and the pitch to the specific block we're trying to break // it's safe to do this since the two blocks we break (in a traverse) are right on top of each other and so will have the same yaw - float yawToDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(dest)).getYaw(); + float yawToDest = RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), dest)).getYaw(); float pitchToBreak = state.getTarget().getRotation().get().getPitch(); state.setTarget(new MovementState.MovementTarget(new Rotation(yawToDest, pitchToBreak), true)); @@ -191,7 +191,7 @@ public class MovementTraverse extends Movement { isDoorActuallyBlockingUs = true; } if (isDoorActuallyBlockingUs && !(Blocks.IRON_DOOR.equals(pb0.getBlock()) || Blocks.IRON_DOOR.equals(pb1.getBlock()))) { - return state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(positionsToBreak[0])), true)) + return state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), positionsToBreak[0])), true)) .setInput(Input.CLICK_RIGHT, true); } } @@ -205,7 +205,7 @@ public class MovementTraverse extends Movement { } if (blocked != null) { - return state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(blocked)), true)) + return state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), VecUtils.calculateBlockCenter(ctx.world(), blocked)), true)) .setInput(Input.CLICK_RIGHT, true); } } diff --git a/src/main/java/baritone/utils/BlockStateInterface.java b/src/main/java/baritone/utils/BlockStateInterface.java index 4e422eda..63ba8d83 100644 --- a/src/main/java/baritone/utils/BlockStateInterface.java +++ b/src/main/java/baritone/utils/BlockStateInterface.java @@ -18,11 +18,9 @@ package baritone.utils; import baritone.Baritone; -import baritone.api.IBaritone; import baritone.api.utils.IPlayerContext; import baritone.cache.CachedRegion; import baritone.cache.WorldData; -import baritone.pathing.movement.CalculationContext; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; @@ -54,6 +52,10 @@ public class BlockStateInterface { this.world = world; } + public World getWorld() { + return world; + } + public static Block getBlock(IPlayerContext ctx, BlockPos pos) { // won't be called from the pathing thread because the pathing thread doesn't make a single blockpos pog return get(ctx, pos).getBlock(); } From 933b295c4062f6deba8d51ea3a35258674e8b50d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 13:46:16 -0800 Subject: [PATCH 13/25] context objectMouseOver --- .../baritone/api/utils/IPlayerContext.java | 31 +++++++++++++++++++ .../baritone/api/utils/RayTraceUtils.java | 30 ------------------ .../baritone/api/utils/RotationUtils.java | 8 +++-- .../baritone/pathing/movement/Movement.java | 2 +- .../movement/movements/MovementAscend.java | 6 ++-- .../movement/movements/MovementParkour.java | 5 ++- .../movement/movements/MovementTraverse.java | 12 ++++--- .../utils/ExampleBaritoneControl.java | 3 +- .../java/baritone/utils/PathRenderer.java | 5 ++- .../utils/player/LocalPlayerContext.java | 6 ++++ 10 files changed, 58 insertions(+), 50 deletions(-) diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java index c7e7e24a..cd80a7d9 100644 --- a/src/api/java/baritone/api/utils/IPlayerContext.java +++ b/src/api/java/baritone/api/utils/IPlayerContext.java @@ -21,9 +21,14 @@ import baritone.api.cache.IWorldData; import net.minecraft.block.BlockSlab; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.PlayerControllerMP; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import java.util.Optional; + /** * @author Brady * @since 11/12/2018 @@ -38,6 +43,8 @@ public interface IPlayerContext { IWorldData worldData(); + RayTraceResult objectMouseOver(); + default BetterBlockPos playerFeet() { // TODO find a better way to deal with soul sand!!!!! BetterBlockPos feet = new BetterBlockPos(player().posX, player().posY + 0.1251, player().posZ); @@ -58,4 +65,28 @@ public interface IPlayerContext { default Rotation playerRotations() { return new Rotation(player().rotationYaw, player().rotationPitch); } + + /** + * Returns the block that the crosshair is currently placed over. Updated once per tick. + * + * @return The position of the highlighted block + */ + default Optional getSelectedBlock() { + if (objectMouseOver() != null && objectMouseOver().typeOfHit == RayTraceResult.Type.BLOCK) { + return Optional.of(objectMouseOver().getBlockPos()); + } + return Optional.empty(); + } + + /** + * Returns the entity that the crosshair is currently placed over. Updated once per tick. + * + * @return The entity + */ + default Optional getSelectedEntity() { + if (objectMouseOver() != null && objectMouseOver().typeOfHit == RayTraceResult.Type.ENTITY) { + return Optional.of(objectMouseOver().entityHit); + } + return Optional.empty(); + } } diff --git a/src/api/java/baritone/api/utils/RayTraceUtils.java b/src/api/java/baritone/api/utils/RayTraceUtils.java index 13f1081b..61086f3d 100644 --- a/src/api/java/baritone/api/utils/RayTraceUtils.java +++ b/src/api/java/baritone/api/utils/RayTraceUtils.java @@ -17,22 +17,16 @@ package baritone.api.utils; -import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; -import java.util.Optional; - /** * @author Brady * @since 8/25/2018 */ public final class RayTraceUtils { - private static final Minecraft mc = Minecraft.getMinecraft(); - private RayTraceUtils() {} /** @@ -53,28 +47,4 @@ public final class RayTraceUtils { ); return entity.world.rayTraceBlocks(start, end, false, false, true); } - - /** - * Returns the block that the crosshair is currently placed over. Updated once per render tick. - * - * @return The position of the highlighted block - */ - public static Optional getSelectedBlock() { - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == RayTraceResult.Type.BLOCK) { - return Optional.of(mc.objectMouseOver.getBlockPos()); - } - return Optional.empty(); - } - - /** - * Returns the entity that the crosshair is currently placed over. Updated once per render tick. - * - * @return The entity - */ - public static Optional getSelectedEntity() { - if (mc.objectMouseOver != null && mc.objectMouseOver.typeOfHit == RayTraceResult.Type.ENTITY) { - return Optional.of(mc.objectMouseOver.entityHit); - } - return Optional.empty(); - } } diff --git a/src/api/java/baritone/api/utils/RotationUtils.java b/src/api/java/baritone/api/utils/RotationUtils.java index b527287e..20cb0dde 100644 --- a/src/api/java/baritone/api/utils/RotationUtils.java +++ b/src/api/java/baritone/api/utils/RotationUtils.java @@ -17,8 +17,11 @@ package baritone.api.utils; +import baritone.api.BaritoneAPI; +import baritone.api.IBaritone; import net.minecraft.block.BlockFire; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.entity.Entity; import net.minecraft.util.math.*; @@ -135,8 +138,9 @@ public final class RotationUtils { * @param pos The target block position * @return The optional rotation */ - public static Optional reachable(Entity entity, BlockPos pos, double blockReachDistance) { - if (pos.equals(RayTraceUtils.getSelectedBlock().orElse(null))) { + public static Optional reachable(EntityPlayerSP entity, BlockPos pos, double blockReachDistance) { + IBaritone baritone = BaritoneAPI.getProvider().getBaritoneForPlayer(entity); + if (pos.equals(baritone.getPlayerContext().getSelectedBlock().orElse(null))) { /* * why add 0.0001? * to indicate that we actually have a desired pitch diff --git a/src/main/java/baritone/pathing/movement/Movement.java b/src/main/java/baritone/pathing/movement/Movement.java index c1b4e351..a3e841c6 100644 --- a/src/main/java/baritone/pathing/movement/Movement.java +++ b/src/main/java/baritone/pathing/movement/Movement.java @@ -153,7 +153,7 @@ public abstract class Movement implements IMovement, MovementHelper { if (reachable.isPresent()) { MovementHelper.switchToBestToolFor(ctx, BlockStateInterface.get(ctx, blockPos)); state.setTarget(new MovementState.MovementTarget(reachable.get(), true)); - if (Objects.equals(RayTraceUtils.getSelectedBlock().orElse(null), blockPos)) { + if (Objects.equals(ctx.getSelectedBlock().orElse(null), blockPos)) { state.setInput(Input.CLICK_LEFT, true); } return false; diff --git a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java index 3d737580..9c33742e 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementAscend.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementAscend.java @@ -21,7 +21,6 @@ import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.RayTraceUtils; import baritone.api.utils.RotationUtils; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; @@ -31,7 +30,6 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.BlockFalling; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -181,9 +179,9 @@ public class MovementAscend extends Movement { double faceY = (dest.getY() + anAgainst.getY()) * 0.5D; double faceZ = (dest.getZ() + anAgainst.getZ() + 1.0D) * 0.5D; state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()), true)); - EnumFacing side = Minecraft.getMinecraft().objectMouseOver.sideHit; + EnumFacing side = ctx.objectMouseOver().sideHit; - RayTraceUtils.getSelectedBlock().ifPresent(selectedBlock -> { + ctx.getSelectedBlock().ifPresent(selectedBlock -> { if (Objects.equals(selectedBlock, anAgainst) && selectedBlock.offset(side).equals(positionToPlace)) { ticksWithoutPlacement++; state.setInput(Input.SNEAK, true); diff --git a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java index ede456b6..44334569 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementParkour.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementParkour.java @@ -34,7 +34,6 @@ import baritone.utils.Helper; import baritone.utils.pathing.MutableMoveResult; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -232,8 +231,8 @@ public class MovementParkour extends Movement { if (res != null && res.typeOfHit == RayTraceResult.Type.BLOCK && res.getBlockPos().equals(against1) && res.getBlockPos().offset(res.sideHit).equals(dest.down())) { state.setTarget(new MovementState.MovementTarget(place, true)); } - RayTraceUtils.getSelectedBlock().ifPresent(selectedBlock -> { - EnumFacing side = Minecraft.getMinecraft().objectMouseOver.sideHit; + ctx.getSelectedBlock().ifPresent(selectedBlock -> { + EnumFacing side = ctx.objectMouseOver().sideHit; if (Objects.equals(selectedBlock, against1) && selectedBlock.offset(side).equals(dest.down())) { state.setInput(Input.CLICK_RIGHT, true); } diff --git a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java index d80043af..2dc0e0cf 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementTraverse.java @@ -20,7 +20,10 @@ package baritone.pathing.movement.movements; import baritone.Baritone; import baritone.api.IBaritone; import baritone.api.pathing.movement.MovementStatus; -import baritone.api.utils.*; +import baritone.api.utils.BetterBlockPos; +import baritone.api.utils.Rotation; +import baritone.api.utils.RotationUtils; +import baritone.api.utils.VecUtils; import baritone.api.utils.input.Input; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; @@ -29,7 +32,6 @@ import baritone.pathing.movement.MovementState; import baritone.utils.BlockStateInterface; import net.minecraft.block.*; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.init.Blocks; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; @@ -265,8 +267,8 @@ public class MovementTraverse extends Movement { double faceZ = (dest.getZ() + against1.getZ() + 1.0D) * 0.5D; state.setTarget(new MovementState.MovementTarget(RotationUtils.calcRotationFromVec3d(ctx.playerHead(), new Vec3d(faceX, faceY, faceZ), ctx.playerRotations()), true)); - EnumFacing side = Minecraft.getMinecraft().objectMouseOver.sideHit; - if (Objects.equals(RayTraceUtils.getSelectedBlock().orElse(null), against1) && (ctx.player().isSneaking() || Baritone.settings().assumeSafeWalk.get()) && RayTraceUtils.getSelectedBlock().get().offset(side).equals(positionToPlace)) { + EnumFacing side = ctx.objectMouseOver().sideHit; + if (Objects.equals(ctx.getSelectedBlock().orElse(null), against1) && (ctx.player().isSneaking() || Baritone.settings().assumeSafeWalk.get()) && ctx.getSelectedBlock().get().offset(side).equals(positionToPlace)) { return state.setInput(Input.CLICK_RIGHT, true); } //System.out.println("Trying to look at " + against1 + ", actually looking at" + RayTraceUtils.getSelectedBlock()); @@ -300,7 +302,7 @@ public class MovementTraverse extends Movement { state.setTarget(new MovementState.MovementTarget(backToFace, true)); } state.setInput(Input.SNEAK, true); - if (Objects.equals(RayTraceUtils.getSelectedBlock().orElse(null), goalLook)) { + if (Objects.equals(ctx.getSelectedBlock().orElse(null), goalLook)) { return state.setInput(Input.CLICK_RIGHT, true); // wait to right click until we are able to place } // Out.log("Trying to look at " + goalLook + ", actually looking at" + Baritone.whatAreYouLookingAt()); diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index 18e2f740..9808de6d 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -23,7 +23,6 @@ import baritone.api.cache.IWaypoint; import baritone.api.event.events.ChatEvent; import baritone.api.pathing.goals.*; import baritone.api.pathing.movement.ActionCosts; -import baritone.api.utils.RayTraceUtils; import baritone.api.utils.SettingsUtil; import baritone.behavior.Behavior; import baritone.behavior.PathingBehavior; @@ -270,7 +269,7 @@ public class ExampleBaritoneControl extends Behavior implements Helper { String name = msg.substring(6).trim(); Optional toFollow = Optional.empty(); if (name.length() == 0) { - toFollow = RayTraceUtils.getSelectedEntity(); + toFollow = ctx.getSelectedEntity(); } else { for (EntityPlayer pl : ctx.world().playerEntities) { String theirName = pl.getName().trim().toLowerCase(); diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index da19e955..443cd035 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -31,7 +31,6 @@ import baritone.behavior.PathingBehavior; import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.path.PathExecutor; import net.minecraft.block.state.IBlockState; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; @@ -224,9 +223,9 @@ public final class PathRenderer implements Helper { IBlockState state = BlockStateInterface.get(BaritoneAPI.getProvider().getPrimaryBaritone().getPlayerContext(), pos); AxisAlignedBB toDraw; if (state.getBlock().equals(Blocks.AIR)) { - toDraw = Blocks.DIRT.getDefaultState().getSelectedBoundingBox(Minecraft.getMinecraft().world, pos); + toDraw = Blocks.DIRT.getDefaultState().getSelectedBoundingBox(player.world, pos); } else { - toDraw = state.getSelectedBoundingBox(Minecraft.getMinecraft().world, pos); + toDraw = state.getSelectedBoundingBox(player.world, pos); } toDraw = toDraw.expand(expand, expand, expand).offset(-renderPosX, -renderPosY, -renderPosZ); BUFFER.begin(GL_LINE_STRIP, DefaultVertexFormats.POSITION); diff --git a/src/main/java/baritone/utils/player/LocalPlayerContext.java b/src/main/java/baritone/utils/player/LocalPlayerContext.java index a818c2d9..02c08c11 100644 --- a/src/main/java/baritone/utils/player/LocalPlayerContext.java +++ b/src/main/java/baritone/utils/player/LocalPlayerContext.java @@ -23,6 +23,7 @@ import baritone.api.utils.IPlayerContext; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.PlayerControllerMP; +import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; /** @@ -58,4 +59,9 @@ public final class LocalPlayerContext implements IPlayerContext { public IWorldData worldData() { return BaritoneAPI.getProvider().getPrimaryBaritone().getWorldProvider().getCurrentWorld(); } + + @Override + public RayTraceResult objectMouseOver() { + return mc.objectMouseOver; + } } From 5a52cea41559b168ebeb8f69e66416f57b46eb61 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 13:48:09 -0800 Subject: [PATCH 14/25] epic --- src/main/java/baritone/utils/BlockBreakHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/utils/BlockBreakHelper.java b/src/main/java/baritone/utils/BlockBreakHelper.java index e384cf9c..d4d03f67 100644 --- a/src/main/java/baritone/utils/BlockBreakHelper.java +++ b/src/main/java/baritone/utils/BlockBreakHelper.java @@ -81,7 +81,7 @@ public final class BlockBreakHelper implements Helper { return isLeftClick; } - RayTraceResult trace = mc.objectMouseOver; // TODO per-player objectMouseOver + RayTraceResult trace = playerContext.objectMouseOver(); boolean isBlockTrace = trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK; if (isLeftClick && isBlockTrace) { From e4045e134330eb9e3e9e1e2e65507f45962685e9 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 13:48:45 -0800 Subject: [PATCH 15/25] and another --- .../java/baritone/pathing/movement/movements/MovementFall.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/movement/movements/MovementFall.java b/src/main/java/baritone/pathing/movement/movements/MovementFall.java index 11b3dfd7..ef89919b 100644 --- a/src/main/java/baritone/pathing/movement/movements/MovementFall.java +++ b/src/main/java/baritone/pathing/movement/movements/MovementFall.java @@ -77,7 +77,7 @@ public class MovementFall extends Movement { targetRotation = new Rotation(toDest.getYaw(), 90.0F); - RayTraceResult trace = mc.objectMouseOver; + RayTraceResult trace = ctx.objectMouseOver(); if (trace != null && trace.typeOfHit == RayTraceResult.Type.BLOCK && ctx.player().rotationPitch > 89.0F) { state.setInput(Input.CLICK_RIGHT, true); } From c3a367078504ca6c4f3f0a1783051c6d273ef75f Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 13:57:37 -0800 Subject: [PATCH 16/25] unused imports --- src/api/java/baritone/api/IBaritone.java | 1 - src/api/java/baritone/api/pathing/movement/IMovement.java | 1 - src/main/java/baritone/pathing/path/PathExecutor.java | 1 - 3 files changed, 3 deletions(-) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index b462c620..451e7990 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -21,7 +21,6 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IMemoryBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; -import baritone.api.cache.IWorldScanner; import baritone.api.event.listener.IGameEventListener; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IFollowProcess; diff --git a/src/api/java/baritone/api/pathing/movement/IMovement.java b/src/api/java/baritone/api/pathing/movement/IMovement.java index 5c3eac14..7b3eca5f 100644 --- a/src/api/java/baritone/api/pathing/movement/IMovement.java +++ b/src/api/java/baritone/api/pathing/movement/IMovement.java @@ -18,7 +18,6 @@ package baritone.api.pathing.movement; import baritone.api.utils.BetterBlockPos; -import baritone.api.utils.IPlayerContext; import net.minecraft.util.math.BlockPos; import java.util.List; diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index 270bb0ca..dca2a0e9 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -32,7 +32,6 @@ import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.MovementHelper; import baritone.pathing.movement.movements.*; -import baritone.utils.BlockBreakHelper; import baritone.utils.BlockStateInterface; import baritone.utils.Helper; import net.minecraft.init.Blocks; From ea81cd76caef3ae3bd279cddfd0c681808768982 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:00:56 -0800 Subject: [PATCH 17/25] sigh --- src/api/java/baritone/api/IBaritoneProvider.java | 13 ++++++++++--- src/main/java/baritone/BaritoneProvider.java | 14 ++++---------- src/main/java/baritone/event/GameEventHandler.java | 4 ++-- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/api/java/baritone/api/IBaritoneProvider.java b/src/api/java/baritone/api/IBaritoneProvider.java index 673a9857..d17e8e00 100644 --- a/src/api/java/baritone/api/IBaritoneProvider.java +++ b/src/api/java/baritone/api/IBaritoneProvider.java @@ -20,7 +20,7 @@ package baritone.api; import baritone.api.cache.IWorldScanner; import net.minecraft.client.entity.EntityPlayerSP; -import java.util.Set; +import java.util.List; /** * @author Leijurv @@ -43,7 +43,7 @@ public interface IBaritoneProvider { * @return All active {@link IBaritone} instances. * @see #getBaritoneForPlayer(EntityPlayerSP) */ - Set getAllBaritones(); + List getAllBaritones(); /** * Provides the {@link IBaritone} instance for a given {@link EntityPlayerSP}. This will likely be @@ -52,7 +52,14 @@ public interface IBaritoneProvider { * @param player The player * @return The {@link IBaritone} instance. */ - IBaritone getBaritoneForPlayer(EntityPlayerSP player); + default IBaritone getBaritoneForPlayer(EntityPlayerSP player) { + for (IBaritone baritone : getAllBaritones()) { + if (player.equals(baritone.getPlayerContext().player())) { + return baritone; + } + } + throw new IllegalStateException("No baritone for player " + player); + } /** * Returns the {@link IWorldScanner} instance. This is not a type returned by diff --git a/src/main/java/baritone/BaritoneProvider.java b/src/main/java/baritone/BaritoneProvider.java index 93f8faed..73e5e6e5 100644 --- a/src/main/java/baritone/BaritoneProvider.java +++ b/src/main/java/baritone/BaritoneProvider.java @@ -21,10 +21,9 @@ import baritone.api.IBaritone; import baritone.api.IBaritoneProvider; import baritone.api.cache.IWorldScanner; import baritone.cache.WorldScanner; -import net.minecraft.client.entity.EntityPlayerSP; import java.util.Collections; -import java.util.Set; +import java.util.List; /** * @author Brady @@ -40,14 +39,9 @@ public final class BaritoneProvider implements IBaritoneProvider { } @Override - public Set getAllBaritones() { - return Collections.singleton(primary); - } - - @Override - public IBaritone getBaritoneForPlayer(EntityPlayerSP player) { - // TODO implement on bot-system branch - return primary; + public List getAllBaritones() { + // TODO return a CopyOnWriteArrayList + return Collections.singletonList(primary); } @Override diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index d2739b38..6fd4665b 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -26,8 +26,8 @@ import baritone.utils.Helper; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; -import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; /** * @author Brady @@ -37,7 +37,7 @@ public final class GameEventHandler implements IGameEventListener, Helper { private final Baritone baritone; - private final List listeners = new ArrayList<>(); + private final List listeners = new CopyOnWriteArrayList<>(); public GameEventHandler(Baritone baritone) { this.baritone = baritone; From b56cdcda523a26513612c6236614b5daf2a34d42 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:19:24 -0800 Subject: [PATCH 18/25] remove that toxic cloud --- .../api/behavior/IPathingBehavior.java | 2 +- .../baritone/behavior/PathingBehavior.java | 80 +++++++++---------- .../pathing/calc/AbstractNodeCostSearch.java | 13 ++- .../baritone/pathing/path/PathExecutor.java | 2 +- .../java/baritone/utils/PathRenderer.java | 3 +- .../baritone/utils/PathingControlManager.java | 5 +- 6 files changed, 46 insertions(+), 59 deletions(-) diff --git a/src/api/java/baritone/api/behavior/IPathingBehavior.java b/src/api/java/baritone/api/behavior/IPathingBehavior.java index e9ebe405..0f44f2ee 100644 --- a/src/api/java/baritone/api/behavior/IPathingBehavior.java +++ b/src/api/java/baritone/api/behavior/IPathingBehavior.java @@ -71,7 +71,7 @@ public interface IPathingBehavior extends IBehavior { /** * @return The current path finder being executed */ - Optional getPathFinder(); + Optional getInProgress(); /** * @return The current path executor diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 7be1d405..14f1694e 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -24,7 +24,6 @@ import baritone.api.event.events.PlayerUpdateEvent; import baritone.api.event.events.RenderEvent; import baritone.api.event.events.TickEvent; import baritone.api.pathing.calc.IPath; -import baritone.api.pathing.calc.IPathFinder; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; @@ -57,7 +56,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, private boolean cancelRequested; private boolean calcFailedLastTick; - private volatile boolean isPathCalcInProgress; + private volatile AbstractNodeCostSearch inProgress; private final Object pathCalcLock = new Object(); private final Object pathPlanLock = new Object(); @@ -141,7 +140,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, } // at this point, current just ended, but we aren't in the goal and have no plan for the future synchronized (pathCalcLock) { - if (isPathCalcInProgress) { + if (inProgress != null) { queuePathEvent(PathEvent.PATH_FINISHED_NEXT_STILL_CALCULATING); // if we aren't calculating right now return; @@ -166,7 +165,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, next = null; } synchronized (pathCalcLock) { - if (isPathCalcInProgress) { + if (inProgress != null) { // if we aren't calculating right now return; } @@ -238,8 +237,8 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, } @Override - public Optional getPathFinder() { - return Optional.ofNullable(AbstractNodeCostSearch.currentlyRunning()); + public Optional getInProgress() { + return Optional.ofNullable(inProgress); } @Override @@ -284,7 +283,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, current = null; next = null; cancelRequested = true; - AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(AbstractNodeCostSearch::cancel); + getInProgress().ifPresent(AbstractNodeCostSearch::cancel); // only cancel ours // do everything BUT clear keys } @@ -294,14 +293,14 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, current = null; next = null; baritone.getInputOverrideHandler().clearAllKeys(); - AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(AbstractNodeCostSearch::cancel); + getInProgress().ifPresent(AbstractNodeCostSearch::cancel); baritone.getInputOverrideHandler().getBlockBreakHelper().stopBreakingBlock(); } public void forceCancel() { // NOT exposed on public api cancelEverything(); secretInternalSegmentCancel(); - isPathCalcInProgress = false; + inProgress = null; } /** @@ -321,7 +320,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, return false; } synchronized (pathCalcLock) { - if (isPathCalcInProgress) { + if (inProgress != null) { return false; } queuePathEvent(PathEvent.CALC_STARTED); @@ -383,19 +382,35 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, * @param talkAboutIt */ private void findPathInNewThread(final BlockPos start, final boolean talkAboutIt, final Optional previous) { - synchronized (pathCalcLock) { - if (isPathCalcInProgress) { - throw new IllegalStateException("Already doing it"); - } - isPathCalcInProgress = true; + // this must be called with synchronization on pathCalcLock! + // actually, we can check this, muahaha + if (!Thread.holdsLock(pathCalcLock)) { + throw new IllegalStateException("Must be called with synchronization on pathCalcLock"); + // why do it this way? it's already indented so much that putting the whole thing in a synchronized(pathCalcLock) was just too much lol + } + if (inProgress != null) { + throw new IllegalStateException("Already doing it"); // should have been checked by caller + } + Goal goal = this.goal; + if (goal == null) { + logDebug("no goal"); // TODO should this be an exception too? definitely should be checked by caller + return; + } + long timeout; + if (current == null) { + timeout = Baritone.settings().pathTimeoutMS.get(); + } else { + timeout = Baritone.settings().planAheadTimeoutMS.get(); } CalculationContext context = new CalculationContext(baritone); // not safe to create on the other thread, it looks up a lot of stuff in minecraft + AbstractNodeCostSearch pathfinder = createPathfinder(start, goal, previous, context); + inProgress = pathfinder; Baritone.getExecutor().execute(() -> { if (talkAboutIt) { logDebug("Starting to search for path from " + start + " to " + goal); } - PathCalculationResult calcResult = findPath(start, previous, context); + PathCalculationResult calcResult = pathfinder.calculate(timeout); Optional path = calcResult.path; if (Baritone.settings().cutoffAtLoadBoundary.get()) { path = path.map(p -> { @@ -453,51 +468,28 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, } } synchronized (pathCalcLock) { - isPathCalcInProgress = false; + inProgress = null; } } }); } - /** - * Actually do the pathing - * - * @param start - * @return - */ - private PathCalculationResult findPath(BlockPos start, Optional previous, CalculationContext context) { - Goal goal = this.goal; - if (goal == null) { - logDebug("no goal"); - return new PathCalculationResult(PathCalculationResult.Type.CANCELLATION, Optional.empty()); - } + private AbstractNodeCostSearch createPathfinder(BlockPos start, Goal goal, Optional previous, CalculationContext context) { + Goal transformed = goal; if (Baritone.settings().simplifyUnloadedYCoord.get() && goal instanceof IGoalRenderPos) { BlockPos pos = ((IGoalRenderPos) goal).getGoalPos(); if (context.world().getChunk(pos) instanceof EmptyChunk) { logDebug("Simplifying " + goal.getClass() + " to GoalXZ due to distance"); - goal = new GoalXZ(pos.getX(), pos.getZ()); + transformed = new GoalXZ(pos.getX(), pos.getZ()); } } - long timeout; - if (current == null) { - timeout = Baritone.settings().pathTimeoutMS.get(); - } else { - timeout = Baritone.settings().planAheadTimeoutMS.get(); - } Optional> favoredPositions; if (Baritone.settings().backtrackCostFavoringCoefficient.get() == 1D) { favoredPositions = Optional.empty(); } else { favoredPositions = previous.map(IPath::positions).map(Collection::stream).map(x -> x.map(BetterBlockPos::longHash)).map(x -> x.collect(Collectors.toList())).map(HashSet::new); // <-- okay this is EPIC } - try { - IPathFinder pf = new AStarPathFinder(start.getX(), start.getY(), start.getZ(), goal, favoredPositions, context); - return pf.calculate(timeout); - } catch (Exception e) { - logDebug("Pathing exception: " + e); - e.printStackTrace(); - return new PathCalculationResult(PathCalculationResult.Type.EXCEPTION, Optional.empty()); - } + return new AStarPathFinder(start.getX(), start.getY(), start.getZ(), transformed, favoredPositions, context); } @Override diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index 79a56037..a0f4f6e4 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -23,6 +23,7 @@ import baritone.api.pathing.calc.IPathFinder; import baritone.api.pathing.goals.Goal; import baritone.api.utils.PathCalculationResult; import baritone.pathing.movement.CalculationContext; +import baritone.utils.Helper; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import java.util.Optional; @@ -107,6 +108,10 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { } else { return new PathCalculationResult(PathCalculationResult.Type.SUCCESS_SEGMENT, path); } + } catch (Exception e) { + Helper.HELPER.logDebug("Pathing exception: " + e); + e.printStackTrace(); + return new PathCalculationResult(PathCalculationResult.Type.EXCEPTION, Optional.empty()); } finally { // this is run regardless of what exception may or may not be raised by calculate0 currentlyRunning = null; @@ -218,12 +223,4 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { public final Goal getGoal() { return goal; } - - public static Optional getCurrentlyRunning() { - return Optional.ofNullable(currentlyRunning); - } - - public static AbstractNodeCostSearch currentlyRunning() { - return currentlyRunning; - } } diff --git a/src/main/java/baritone/pathing/path/PathExecutor.java b/src/main/java/baritone/pathing/path/PathExecutor.java index dca2a0e9..5dfc420d 100644 --- a/src/main/java/baritone/pathing/path/PathExecutor.java +++ b/src/main/java/baritone/pathing/path/PathExecutor.java @@ -295,7 +295,7 @@ public class PathExecutor implements IPathExecutor, Helper { } private boolean shouldPause() { - Optional current = AbstractNodeCostSearch.getCurrentlyRunning(); + Optional current = behavior.getInProgress(); if (!current.isPresent()) { return false; } diff --git a/src/main/java/baritone/utils/PathRenderer.java b/src/main/java/baritone/utils/PathRenderer.java index 443cd035..e14c14da 100644 --- a/src/main/java/baritone/utils/PathRenderer.java +++ b/src/main/java/baritone/utils/PathRenderer.java @@ -28,7 +28,6 @@ import baritone.api.pathing.goals.GoalXZ; import baritone.api.utils.BetterBlockPos; import baritone.api.utils.interfaces.IGoalRenderPos; import baritone.behavior.PathingBehavior; -import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.path.PathExecutor; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.BufferBuilder; @@ -113,7 +112,7 @@ public final class PathRenderer implements Helper { } // If there is a path calculation currently running, render the path calculation process - AbstractNodeCostSearch.getCurrentlyRunning().ifPresent(currentlyRunning -> { + behavior.getInProgress().ifPresent(currentlyRunning -> { currentlyRunning.bestPathSoFar().ifPresent(p -> { drawPath(p, 0, renderView, partialTicks, Baritone.settings().colorBestPathSoFar.get(), Baritone.settings().fadePath.get(), 10, 20); }); diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index 9ea193a1..a818b7c5 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -24,7 +24,6 @@ import baritone.api.pathing.goals.Goal; import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.behavior.PathingBehavior; -import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.path.PathExecutor; import net.minecraft.util.math.BlockPos; @@ -90,12 +89,12 @@ public class PathingControlManager { p.cancelSegmentIfSafe(); break; case FORCE_REVALIDATE_GOAL_AND_PATH: - if (!p.isPathing() && !AbstractNodeCostSearch.getCurrentlyRunning().isPresent()) { + if (!p.isPathing() && !p.getInProgress().isPresent()) { p.secretInternalSetGoalAndPath(command.goal); } break; case REVALIDATE_GOAL_AND_PATH: - if (!p.isPathing() && !AbstractNodeCostSearch.getCurrentlyRunning().isPresent()) { + if (!p.isPathing() && !p.getInProgress().isPresent()) { p.secretInternalSetGoalAndPath(command.goal); } break; From 80d6d7fd5892129fb87abc9dba0e39622bc41fd8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:21:36 -0800 Subject: [PATCH 19/25] simplify --- src/main/java/baritone/behavior/PathingBehavior.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 14f1694e..b2132910 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -146,7 +146,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, return; } queuePathEvent(PathEvent.CALC_STARTED); - findPathInNewThread(pathStart(), true, Optional.empty()); + findPathInNewThread(pathStart(), true); } return; } @@ -181,7 +181,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, // and this path has 5 seconds or less left logDebug("Path almost over. Planning ahead..."); queuePathEvent(PathEvent.NEXT_SEGMENT_CALC_STARTED); - findPathInNewThread(current.getPath().getDest(), false, Optional.of(current.getPath())); + findPathInNewThread(current.getPath().getDest(), false); } } } @@ -324,7 +324,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, return false; } queuePathEvent(PathEvent.CALC_STARTED); - findPathInNewThread(pathStart(), true, Optional.empty()); + findPathInNewThread(pathStart(), true); return true; } } @@ -381,7 +381,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, * @param start * @param talkAboutIt */ - private void findPathInNewThread(final BlockPos start, final boolean talkAboutIt, final Optional previous) { + private void findPathInNewThread(final BlockPos start, final boolean talkAboutIt) { // this must be called with synchronization on pathCalcLock! // actually, we can check this, muahaha if (!Thread.holdsLock(pathCalcLock)) { @@ -403,7 +403,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, timeout = Baritone.settings().planAheadTimeoutMS.get(); } CalculationContext context = new CalculationContext(baritone); // not safe to create on the other thread, it looks up a lot of stuff in minecraft - AbstractNodeCostSearch pathfinder = createPathfinder(start, goal, previous, context); + AbstractNodeCostSearch pathfinder = createPathfinder(start, goal, Optional.ofNullable(current).map(PathExecutor::getPath), context); inProgress = pathfinder; Baritone.getExecutor().execute(() -> { if (talkAboutIt) { From 8385bc35ed9539fabcdd4711b043ba647792e7b6 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:26:35 -0800 Subject: [PATCH 20/25] wow thats a rare bug --- src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index a0f4f6e4..3285a5ce 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -193,7 +193,7 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { @Override public Optional bestPathSoFar() { - if (startNode == null || bestSoFar[0] == null) { + if (startNode == null || bestSoFar == null || bestSoFar[0] == null) { return Optional.empty(); } for (int i = 0; i < bestSoFar.length; i++) { From f808fc98020c04ad0a0c61d31e1f4acd79d0a707 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:27:30 -0800 Subject: [PATCH 21/25] general cleanup --- .../pathing/calc/AbstractNodeCostSearch.java | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java index 3285a5ce..fa55a998 100644 --- a/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java +++ b/src/main/java/baritone/pathing/calc/AbstractNodeCostSearch.java @@ -35,11 +35,6 @@ import java.util.Optional; */ public abstract class AbstractNodeCostSearch implements IPathFinder { - /** - * The currently running search task - */ - private static AbstractNodeCostSearch currentlyRunning = null; - protected final int startX; protected final int startY; protected final int startZ; @@ -114,19 +109,10 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { return new PathCalculationResult(PathCalculationResult.Type.EXCEPTION, Optional.empty()); } finally { // this is run regardless of what exception may or may not be raised by calculate0 - currentlyRunning = null; isFinished = true; } } - /** - * Don't set currentlyRunning to this until everything is all ready to go, and we're about to enter the main loop. - * For example, bestSoFar is null so bestPathSoFar (which gets bestSoFar[0]) could NPE if we set currentlyRunning before calculate0 - */ - protected void loopBegin() { - currentlyRunning = this; - } - protected abstract Optional calculate0(long timeout); /** @@ -161,22 +147,6 @@ public abstract class AbstractNodeCostSearch implements IPathFinder { return node; } - public static void forceCancel() { - currentlyRunning = null; - } - - public PathNode mostRecentNodeConsidered() { - return mostRecentConsidered; - } - - public PathNode bestNodeSoFar() { - return bestSoFar[0]; - } - - public PathNode startNode() { - return startNode; - } - @Override public Optional pathToMostRecentNodeConsidered() { try { From f6dee1ecb7c2792f23926ab4a08d930669826928 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:29:33 -0800 Subject: [PATCH 22/25] add todo --- src/main/java/baritone/behavior/PathingBehavior.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index b2132910..78cd0913 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -335,7 +335,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, * * @return The starting {@link BlockPos} for a new path */ - public BlockPos pathStart() { + public BlockPos pathStart() { // TODO move to a helper or util class BetterBlockPos feet = ctx.playerFeet(); if (!MovementHelper.canWalkOn(ctx, feet.down())) { if (ctx.player().onGround) { From 237f1846d384f21277f331af625f8b74eb74f8f2 Mon Sep 17 00:00:00 2001 From: Brady Date: Wed, 14 Nov 2018 16:29:15 -0600 Subject: [PATCH 23/25] Remove Baritone casts --- src/api/java/baritone/api/IBaritone.java | 9 ++--- .../api/event/listener/IEventBus.java | 36 +++++++++++++++++++ .../baritone/launch/mixins/MixinEntity.java | 3 +- .../launch/mixins/MixinEntityLivingBase.java | 3 +- .../launch/mixins/MixinEntityPlayerSP.java | 7 ++-- .../launch/mixins/MixinEntityRenderer.java | 3 +- .../launch/mixins/MixinMinecraft.java | 13 ++++--- .../mixins/MixinNetHandlerPlayClient.java | 7 ++-- .../launch/mixins/MixinNetworkManager.java | 9 +++-- .../launch/mixins/MixinWorldClient.java | 5 ++- src/main/java/baritone/Baritone.java | 14 +++----- .../java/baritone/event/GameEventHandler.java | 5 +-- .../baritone/utils/PathingControlManager.java | 2 +- 13 files changed, 68 insertions(+), 48 deletions(-) create mode 100644 src/api/java/baritone/api/event/listener/IEventBus.java diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 451e7990..5ca54a25 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -21,7 +21,7 @@ import baritone.api.behavior.ILookBehavior; import baritone.api.behavior.IMemoryBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; -import baritone.api.event.listener.IGameEventListener; +import baritone.api.event.listener.IEventBus; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IFollowProcess; import baritone.api.process.IGetToBlockProcess; @@ -79,10 +79,5 @@ public interface IBaritone { IPlayerContext getPlayerContext(); - /** - * Registers a {@link IGameEventListener} with Baritone's "event bus". - * - * @param listener The listener - */ - void registerEventListener(IGameEventListener listener); + IEventBus getGameEventHandler(); } diff --git a/src/api/java/baritone/api/event/listener/IEventBus.java b/src/api/java/baritone/api/event/listener/IEventBus.java new file mode 100644 index 00000000..52240a7c --- /dev/null +++ b/src/api/java/baritone/api/event/listener/IEventBus.java @@ -0,0 +1,36 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package baritone.api.event.listener; + +/** + * A type of {@link IGameEventListener} that can have additional listeners + * registered so that they receive the events that are dispatched to this + * listener. + * + * @author Brady + * @since 11/14/2018 + */ +public interface IEventBus extends IGameEventListener { + + /** + * Registers the specified {@link IGameEventListener} to this event bus + * + * @param listener The listener + */ + void registerEventListener(IGameEventListener listener); +} diff --git a/src/launch/java/baritone/launch/mixins/MixinEntity.java b/src/launch/java/baritone/launch/mixins/MixinEntity.java index 93b9d901..fe498202 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntity.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntity.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.event.events.RotationMoveEvent; import net.minecraft.client.entity.EntityPlayerSP; @@ -54,7 +53,7 @@ public class MixinEntity { // noinspection ConstantConditions if (EntityPlayerSP.class.isInstance(this)) { this.motionUpdateRotationEvent = new RotationMoveEvent((EntityPlayerSP) (Object) this, RotationMoveEvent.Type.MOTION_UPDATE, this.rotationYaw); - ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerRotationMove(this.motionUpdateRotationEvent); + BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerRotationMove(this.motionUpdateRotationEvent); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java index f640f349..1a7d298f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityLivingBase.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.event.events.RotationMoveEvent; import net.minecraft.client.entity.EntityPlayerSP; @@ -57,7 +56,7 @@ public abstract class MixinEntityLivingBase extends Entity { // noinspection ConstantConditions if (EntityPlayerSP.class.isInstance(this)) { this.jumpRotationEvent = new RotationMoveEvent((EntityPlayerSP) (Object) this, RotationMoveEvent.Type.JUMP, this.rotationYaw); - ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); + BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerRotationMove(this.jumpRotationEvent); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java index 5b908d8b..9c9509f0 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityPlayerSP.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.behavior.IPathingBehavior; import baritone.api.event.events.ChatEvent; @@ -45,7 +44,7 @@ public class MixinEntityPlayerSP { ) private void sendChatMessage(String msg, CallbackInfo ci) { ChatEvent event = new ChatEvent((EntityPlayerSP) (Object) this, msg); - ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onSendChatMessage(event); + BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onSendChatMessage(event); if (event.isCancelled()) { ci.cancel(); } @@ -61,7 +60,7 @@ public class MixinEntityPlayerSP { ) ) private void onPreUpdate(CallbackInfo ci) { - ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.PRE)); + BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.PRE)); } @Inject( @@ -74,7 +73,7 @@ public class MixinEntityPlayerSP { ) ) private void onPostUpdate(CallbackInfo ci) { - ((Baritone) BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this)).getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.POST)); + BaritoneAPI.getProvider().getBaritoneForPlayer((EntityPlayerSP) (Object) this).getGameEventHandler().onPlayerUpdate(new PlayerUpdateEvent((EntityPlayerSP) (Object) this, EventState.POST)); } @Redirect( diff --git a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java b/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java index 63c3c223..dfd01e46 100644 --- a/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java +++ b/src/launch/java/baritone/launch/mixins/MixinEntityRenderer.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.RenderEvent; @@ -40,7 +39,7 @@ public class MixinEntityRenderer { ) private void renderWorldPass(int pass, float partialTicks, long finishTimeNano, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { - ((Baritone) ibaritone).getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); + ibaritone.getGameEventHandler().onRenderPass(new RenderEvent(partialTicks)); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java index 303a53b1..12e91574 100644 --- a/src/launch/java/baritone/launch/mixins/MixinMinecraft.java +++ b/src/launch/java/baritone/launch/mixins/MixinMinecraft.java @@ -91,7 +91,7 @@ public class MixinMinecraft { ? TickEvent.Type.IN : TickEvent.Type.OUT; - ((Baritone) ibaritone).getGameEventHandler().onTick(new TickEvent(EventState.PRE, type)); + ibaritone.getGameEventHandler().onTick(new TickEvent(EventState.PRE, type)); } } @@ -102,7 +102,7 @@ public class MixinMinecraft { ) private void runTickKeyboard(CallbackInfo ci) { // keyboard input is only the primary baritone - ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onProcessKeyBinds(); + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onProcessKeyBinds(); } @Inject( @@ -117,7 +117,7 @@ public class MixinMinecraft { // mc.world changing is only the primary baritone - ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onWorldEvent( + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onWorldEvent( new WorldEvent( world, EventState.PRE @@ -133,8 +133,7 @@ public class MixinMinecraft { // still fire event for both null, as that means we've just finished exiting a world // mc.world changing is only the primary baritone - - ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onWorldEvent( + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onWorldEvent( new WorldEvent( world, EventState.POST @@ -165,7 +164,7 @@ public class MixinMinecraft { ) private void onBlockBreak(CallbackInfo ci, BlockPos pos) { // clickMouse is only for the main player - ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onBlockInteract(new BlockInteractEvent(pos, BlockInteractEvent.Type.BREAK)); + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(pos, BlockInteractEvent.Type.BREAK)); } @Inject( @@ -178,6 +177,6 @@ public class MixinMinecraft { ) private void onBlockUse(CallbackInfo ci, EnumHand var1[], int var2, int var3, EnumHand enumhand, ItemStack itemstack, BlockPos blockpos, int i, EnumActionResult enumactionresult) { // rightClickMouse is only for the main player - ((Baritone) BaritoneAPI.getProvider().getPrimaryBaritone()).getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); + BaritoneAPI.getProvider().getPrimaryBaritone().getGameEventHandler().onBlockInteract(new BlockInteractEvent(blockpos, BlockInteractEvent.Type.USE)); } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java index fa5345d2..9fc1bd6f 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetHandlerPlayClient.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.ChunkEvent; @@ -47,7 +46,7 @@ public class MixinNetHandlerPlayClient { private void preRead(SPacketChunkData packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.PRE, ChunkEvent.Type.POPULATE, @@ -66,7 +65,7 @@ public class MixinNetHandlerPlayClient { private void postHandleChunkData(SPacketChunkData packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, ChunkEvent.Type.POPULATE, @@ -88,7 +87,7 @@ public class MixinNetHandlerPlayClient { private void onPlayerDeath(SPacketCombatEvent packetIn, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player().connection == (NetHandlerPlayClient) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onPlayerDeath(); + ibaritone.getGameEventHandler().onPlayerDeath(); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java index 4d20bb7b..577be96d 100644 --- a/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java +++ b/src/launch/java/baritone/launch/mixins/MixinNetworkManager.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.PacketEvent; @@ -61,7 +60,7 @@ public class MixinNetworkManager { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, inPacket)); } } } @@ -77,7 +76,7 @@ public class MixinNetworkManager { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); + ibaritone.getGameEventHandler().onSendPacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, inPacket)); } } } @@ -95,7 +94,7 @@ public class MixinNetworkManager { } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); + ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.PRE, packet)); } } } @@ -110,7 +109,7 @@ public class MixinNetworkManager { } for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().player() != null && ibaritone.getPlayerContext().player().connection.getNetworkManager() == (NetworkManager) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); + ibaritone.getGameEventHandler().onReceivePacket(new PacketEvent((NetworkManager) (Object) this, EventState.POST, packet)); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java index d76e6057..7c156163 100644 --- a/src/launch/java/baritone/launch/mixins/MixinWorldClient.java +++ b/src/launch/java/baritone/launch/mixins/MixinWorldClient.java @@ -17,7 +17,6 @@ package baritone.launch.mixins; -import baritone.Baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.event.events.ChunkEvent; @@ -42,7 +41,7 @@ public class MixinWorldClient { private void preDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.PRE, loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, @@ -62,7 +61,7 @@ public class MixinWorldClient { private void postDoPreChunk(int chunkX, int chunkZ, boolean loadChunk, CallbackInfo ci) { for (IBaritone ibaritone : BaritoneAPI.getProvider().getAllBaritones()) { if (ibaritone.getPlayerContext().world() == (WorldClient) (Object) this) { - ((Baritone) ibaritone).getGameEventHandler().onChunkEvent( + ibaritone.getGameEventHandler().onChunkEvent( new ChunkEvent( EventState.POST, loadChunk ? ChunkEvent.Type.LOAD : ChunkEvent.Type.UNLOAD, diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index c5c1b3ed..bd5b97e8 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -20,7 +20,7 @@ package baritone; import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.Settings; -import baritone.api.event.listener.IGameEventListener; +import baritone.api.event.listener.IEventBus; import baritone.api.utils.IPlayerContext; import baritone.behavior.Behavior; import baritone.behavior.LookBehavior; @@ -125,7 +125,7 @@ public class Baritone implements IBaritone { this.worldProvider = new WorldProvider(); if (BaritoneAutoTest.ENABLE_AUTO_TEST) { - registerEventListener(BaritoneAutoTest.INSTANCE); + this.gameEventHandler.registerEventListener(BaritoneAutoTest.INSTANCE); } this.initialized = true; @@ -135,17 +135,13 @@ public class Baritone implements IBaritone { return this.pathingControlManager; } - public IGameEventListener getGameEventHandler() { - return this.gameEventHandler; - } - public List getBehaviors() { return this.behaviors; } public void registerBehavior(Behavior behavior) { this.behaviors.add(behavior); - this.registerEventListener(behavior); + this.gameEventHandler.registerEventListener(behavior); } @Override @@ -199,8 +195,8 @@ public class Baritone implements IBaritone { } @Override - public void registerEventListener(IGameEventListener listener) { - this.gameEventHandler.registerEventListener(listener); + public IEventBus getGameEventHandler() { + return this.gameEventHandler; } public static Settings settings() { diff --git a/src/main/java/baritone/event/GameEventHandler.java b/src/main/java/baritone/event/GameEventHandler.java index 6fd4665b..7ac04643 100644 --- a/src/main/java/baritone/event/GameEventHandler.java +++ b/src/main/java/baritone/event/GameEventHandler.java @@ -20,6 +20,7 @@ package baritone.event; import baritone.Baritone; import baritone.api.event.events.*; import baritone.api.event.events.type.EventState; +import baritone.api.event.listener.IEventBus; import baritone.api.event.listener.IGameEventListener; import baritone.cache.WorldProvider; import baritone.utils.Helper; @@ -33,7 +34,7 @@ import java.util.concurrent.CopyOnWriteArrayList; * @author Brady * @since 7/31/2018 */ -public final class GameEventHandler implements IGameEventListener, Helper { +public final class GameEventHandler implements IEventBus, Helper { private final Baritone baritone; @@ -140,8 +141,8 @@ public final class GameEventHandler implements IGameEventListener, Helper { listeners.forEach(l -> l.onPathEvent(event)); } + @Override public final void registerEventListener(IGameEventListener listener) { this.listeners.add(listener); } - } diff --git a/src/main/java/baritone/utils/PathingControlManager.java b/src/main/java/baritone/utils/PathingControlManager.java index a818b7c5..fa58a069 100644 --- a/src/main/java/baritone/utils/PathingControlManager.java +++ b/src/main/java/baritone/utils/PathingControlManager.java @@ -43,7 +43,7 @@ public class PathingControlManager { public PathingControlManager(Baritone baritone) { this.baritone = baritone; this.processes = new HashSet<>(); - baritone.registerEventListener(new AbstractGameEventListener() { // needs to be after all behavior ticks + baritone.getGameEventHandler().registerEventListener(new AbstractGameEventListener() { // needs to be after all behavior ticks @Override public void onTick(TickEvent event) { if (event.getType() == TickEvent.Type.OUT) { From f5d0143b09bc12baca994c5a20733a81fa4440aa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 14:37:41 -0800 Subject: [PATCH 24/25] im dumb --- src/main/java/baritone/pathing/calc/AStarPathFinder.java | 1 - src/main/java/baritone/utils/ExampleBaritoneControl.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/baritone/pathing/calc/AStarPathFinder.java b/src/main/java/baritone/pathing/calc/AStarPathFinder.java index b9babdda..c9b7a11e 100644 --- a/src/main/java/baritone/pathing/calc/AStarPathFinder.java +++ b/src/main/java/baritone/pathing/calc/AStarPathFinder.java @@ -79,7 +79,6 @@ public final class AStarPathFinder extends AbstractNodeCostSearch implements Hel int pathingMaxChunkBorderFetch = Baritone.settings().pathingMaxChunkBorderFetch.get(); // grab all settings beforehand so that changing settings during pathing doesn't cause a crash or unpredictable behavior double favorCoeff = Baritone.settings().backtrackCostFavoringCoefficient.get(); boolean minimumImprovementRepropagation = Baritone.settings().minimumImprovementRepropagation.get(); - loopBegin(); while (!openSet.isEmpty() && numEmptyChunk < pathingMaxChunkBorderFetch && System.nanoTime() / 1000000L - timeoutTime < 0 && !cancelRequested) { if (slowPath) { try { diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index 9808de6d..841349e4 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -28,7 +28,6 @@ import baritone.behavior.Behavior; import baritone.behavior.PathingBehavior; import baritone.cache.ChunkPacker; import baritone.cache.Waypoint; -import baritone.pathing.calc.AbstractNodeCostSearch; import baritone.pathing.movement.Movement; import baritone.pathing.movement.Moves; import baritone.process.CustomGoalProcess; @@ -230,7 +229,6 @@ public class ExampleBaritoneControl extends Behavior implements Helper { } if (msg.equals("forcecancel")) { pathingBehavior.cancelEverything(); - AbstractNodeCostSearch.forceCancel(); pathingBehavior.forceCancel(); logDirect("ok force canceled"); return true; From 57c0613843af34306463c78f3c184e2481f65dbd Mon Sep 17 00:00:00 2001 From: Leijurv Date: Wed, 14 Nov 2018 16:39:04 -0800 Subject: [PATCH 25/25] rename --- src/main/java/baritone/Baritone.java | 4 ++-- ...calPlayerContext.java => PrimaryPlayerContext.java} | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) rename src/main/java/baritone/utils/player/{LocalPlayerContext.java => PrimaryPlayerContext.java} (85%) diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index bd5b97e8..42403e84 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -36,7 +36,7 @@ import baritone.utils.BaritoneAutoTest; import baritone.utils.ExampleBaritoneControl; import baritone.utils.InputOverrideHandler; import baritone.utils.PathingControlManager; -import baritone.utils.player.LocalPlayerContext; +import baritone.utils.player.PrimaryPlayerContext; import net.minecraft.client.Minecraft; import java.io.File; @@ -102,7 +102,7 @@ public class Baritone implements IBaritone { } // Define this before behaviors try and get it, or else it will be null and the builds will fail! - this.playerContext = LocalPlayerContext.INSTANCE; + this.playerContext = PrimaryPlayerContext.INSTANCE; this.behaviors = new ArrayList<>(); { diff --git a/src/main/java/baritone/utils/player/LocalPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java similarity index 85% rename from src/main/java/baritone/utils/player/LocalPlayerContext.java rename to src/main/java/baritone/utils/player/PrimaryPlayerContext.java index 02c08c11..4247e92b 100644 --- a/src/main/java/baritone/utils/player/LocalPlayerContext.java +++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java @@ -20,7 +20,7 @@ package baritone.utils.player; import baritone.api.BaritoneAPI; import baritone.api.cache.IWorldData; import baritone.api.utils.IPlayerContext; -import net.minecraft.client.Minecraft; +import baritone.utils.Helper; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.PlayerControllerMP; import net.minecraft.util.math.RayTraceResult; @@ -32,13 +32,9 @@ import net.minecraft.world.World; * @author Brady * @since 11/12/2018 */ -public final class LocalPlayerContext implements IPlayerContext { +public enum PrimaryPlayerContext implements IPlayerContext, Helper { - private static final Minecraft mc = Minecraft.getMinecraft(); - - public static final LocalPlayerContext INSTANCE = new LocalPlayerContext(); - - private LocalPlayerContext() {} + INSTANCE; @Override public EntityPlayerSP player() {