From 186652a8d8a213d6be2b10d8b6a20ee0f3839508 Mon Sep 17 00:00:00 2001 From: Brady Date: Sun, 18 Nov 2018 19:52:11 -0600 Subject: [PATCH 01/11] Protocol lol --- PROTOCOL.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 PROTOCOL.md diff --git a/PROTOCOL.md b/PROTOCOL.md new file mode 100644 index 00000000..8713120b --- /dev/null +++ b/PROTOCOL.md @@ -0,0 +1,36 @@ +# Baritone Comms Protocol + +## Data Types + +| Name | Descriptor | Java | +|------------|-----------------------------------------------------------|-----------------------------| +| coordinate | Big endian 8-byte floating point number | [readDouble], [writeDouble] | +| string | unsigned short (length) followed by UTF-8 character bytes | [readUTF], [writeUTF] | + +## Inbound + +Allows the server to execute a chat command on behalf of the client's player + +### Chat + +| Name | Type | +|---------|--------| +| Message | string | + +## Outbound + +Update the player position with the server + +### Status + +| Name | Type | +|------|------------| +| X | coordinate | +| Y | coordinate | +| Z | coordinate | + + +[readUTF]: https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html#readUTF() +[writeUTF]: https://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html#writeUTF(java.lang.String) +[readDouble]: https://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html#readDouble() +[writeDouble]: https://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html#writeDouble(double) \ No newline at end of file From 0dc67593bb97a052737b81e056499525f6f07824 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Sun, 18 Nov 2018 21:56:46 -0800 Subject: [PATCH 02/11] lots more status --- src/api/java/baritone/api/IBaritone.java | 3 + .../java/comms/upward/MessageStatus.java | 58 ++++++++++++++++++- src/main/java/baritone/Baritone.java | 1 + .../baritone/behavior/ControllerBehavior.java | 26 ++++++++- 4 files changed, 86 insertions(+), 2 deletions(-) diff --git a/src/api/java/baritone/api/IBaritone.java b/src/api/java/baritone/api/IBaritone.java index 5ca54a25..14805375 100644 --- a/src/api/java/baritone/api/IBaritone.java +++ b/src/api/java/baritone/api/IBaritone.java @@ -22,6 +22,7 @@ import baritone.api.behavior.IMemoryBehavior; import baritone.api.behavior.IPathingBehavior; import baritone.api.cache.IWorldProvider; import baritone.api.event.listener.IEventBus; +import baritone.api.pathing.calc.IPathingControlManager; import baritone.api.process.ICustomGoalProcess; import baritone.api.process.IFollowProcess; import baritone.api.process.IGetToBlockProcess; @@ -59,6 +60,8 @@ public interface IBaritone { */ IMineProcess getMineProcess(); + IPathingControlManager getPathingControlManager(); + /** * @return The {@link IPathingBehavior} instance * @see IPathingBehavior diff --git a/src/comms/java/comms/upward/MessageStatus.java b/src/comms/java/comms/upward/MessageStatus.java index 55a29828..7a5e74af 100644 --- a/src/comms/java/comms/upward/MessageStatus.java +++ b/src/comms/java/comms/upward/MessageStatus.java @@ -29,17 +29,59 @@ public class MessageStatus implements iMessage { public final double x; public final double y; public final double z; + public final float yaw; + public final float pitch; + public final boolean onGround; + public final float health; + public final float saturation; + public final int foodLevel; + public final boolean hasCurrentSegment; + public final boolean hasNextSegment; + public final boolean calcInProgress; + public final double ticksRemainingInCurrent; + public final boolean calcFailedLastTick; + public final boolean safeToCancel; + public final String currentGoal; + public final String currentProcess; public MessageStatus(DataInputStream in) throws IOException { this.x = in.readDouble(); this.y = in.readDouble(); this.z = in.readDouble(); + this.yaw = in.readFloat(); + this.pitch = in.readFloat(); + this.onGround = in.readBoolean(); + this.health = in.readFloat(); + this.saturation = in.readFloat(); + this.foodLevel = in.readInt(); + this.hasCurrentSegment = in.readBoolean(); + this.hasNextSegment = in.readBoolean(); + this.calcInProgress = in.readBoolean(); + this.ticksRemainingInCurrent = in.readDouble(); + this.calcFailedLastTick = in.readBoolean(); + this.safeToCancel = in.readBoolean(); + this.currentGoal = in.readUTF(); + this.currentProcess = in.readUTF(); } - public MessageStatus(double x, double y, double z) { + public MessageStatus(double x, double y, double z, float yaw, float pitch, boolean onGround, float health, float saturation, int foodLevel, boolean hasCurrentSegment, boolean hasNextSegment, boolean calcInProgress, double ticksRemainingInCurrent, boolean calcFailedLastTick, boolean safeToCancel, String currentGoal, String currentProcess) { this.x = x; this.y = y; this.z = z; + this.yaw = yaw; + this.pitch = pitch; + this.onGround = onGround; + this.health = health; + this.saturation = saturation; + this.foodLevel = foodLevel; + this.hasCurrentSegment = hasCurrentSegment; + this.hasNextSegment = hasNextSegment; + this.calcInProgress = calcInProgress; + this.ticksRemainingInCurrent = ticksRemainingInCurrent; + this.calcFailedLastTick = calcFailedLastTick; + this.safeToCancel = safeToCancel; + this.currentGoal = currentGoal; + this.currentProcess = currentProcess; } @Override @@ -47,6 +89,20 @@ public class MessageStatus implements iMessage { out.writeDouble(x); out.writeDouble(y); out.writeDouble(z); + out.writeFloat(yaw); + out.writeFloat(pitch); + out.writeBoolean(onGround); + out.writeFloat(health); + out.writeFloat(saturation); + out.writeInt(foodLevel); + out.writeBoolean(hasCurrentSegment); + out.writeBoolean(hasNextSegment); + out.writeBoolean(calcInProgress); + out.writeDouble(ticksRemainingInCurrent); + out.writeBoolean(calcFailedLastTick); + out.writeBoolean(safeToCancel); + out.writeUTF(currentGoal); + out.writeUTF(currentProcess); } @Override diff --git a/src/main/java/baritone/Baritone.java b/src/main/java/baritone/Baritone.java index 0b42e112..7ee40e55 100755 --- a/src/main/java/baritone/Baritone.java +++ b/src/main/java/baritone/Baritone.java @@ -139,6 +139,7 @@ public class Baritone implements IBaritone { this.gameEventHandler.registerEventListener(behavior); } + @Override public PathingControlManager getPathingControlManager() { return this.pathingControlManager; } diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index f1deb618..3f8329bd 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -20,6 +20,7 @@ package baritone.behavior; import baritone.Baritone; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TickEvent; +import baritone.api.process.IBaritoneProcess; import baritone.utils.Helper; import comms.BufferedConnection; import comms.IConnection; @@ -43,10 +44,33 @@ public class ControllerBehavior extends Behavior implements IMessageListener { if (event.getType() == TickEvent.Type.OUT) { return; } - trySend(new MessageStatus(ctx.player().posX, ctx.player().posY, ctx.player().posZ)); + trySend(buildStatus()); readAndHandle(); } + public MessageStatus buildStatus() { + // TODO inventory + return new MessageStatus( + ctx.player().posX, + ctx.player().posY, + ctx.player().posZ, + ctx.player().rotationYaw, + ctx.player().rotationPitch, + ctx.player().onGround, + ctx.player().getHealth(), + ctx.player().getFoodStats().getSaturationLevel(), + ctx.player().getFoodStats().getFoodLevel(), + baritone.getPathingBehavior().getCurrent() != null, + baritone.getPathingBehavior().getNext() != null, + baritone.getPathingBehavior().getInProgress().isPresent(), + baritone.getPathingBehavior().ticksRemainingInSegment().orElse(0D), + baritone.getPathingBehavior().calcFailedLastTick(), + baritone.getPathingBehavior().isSafeToCancel(), + baritone.getPathingBehavior().getGoal() + "", + baritone.getPathingControlManager().mostRecentInControl().map(IBaritoneProcess::displayName).orElse("") + ); + } + private void readAndHandle() { if (conn == null) { return; From 81ecc209d382e0abeab7d62c90a324d9dcd9c214 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 10:09:13 -0800 Subject: [PATCH 03/11] synchronize partial reads and writes to a socket --- src/comms/java/comms/ConstructingDeserializer.java | 2 +- src/comms/java/comms/SerializedConnection.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/comms/java/comms/ConstructingDeserializer.java b/src/comms/java/comms/ConstructingDeserializer.java index c6407976..5b49ecdb 100644 --- a/src/comms/java/comms/ConstructingDeserializer.java +++ b/src/comms/java/comms/ConstructingDeserializer.java @@ -39,7 +39,7 @@ public enum ConstructingDeserializer implements MessageDeserializer { } @Override - public iMessage deserialize(DataInputStream in) throws IOException { + public synchronized iMessage deserialize(DataInputStream in) throws IOException { int type = ((int) in.readByte()) & 0xff; try { return MSGS.get(type).getConstructor(DataInputStream.class).newInstance(in); diff --git a/src/comms/java/comms/SerializedConnection.java b/src/comms/java/comms/SerializedConnection.java index 0952854d..c4191194 100644 --- a/src/comms/java/comms/SerializedConnection.java +++ b/src/comms/java/comms/SerializedConnection.java @@ -35,7 +35,7 @@ public class SerializedConnection implements IConnection { } @Override - public void sendMessage(iMessage message) throws IOException { + public synchronized void sendMessage(iMessage message) throws IOException { message.writeHeader(out); message.write(out); } From c423d5f575bf06e2cb7599bb19808d45849b0c93 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 11:35:13 -0800 Subject: [PATCH 04/11] report path start position --- src/comms/java/comms/upward/MessageStatus.java | 14 +++++++++++++- .../java/baritone/behavior/ControllerBehavior.java | 8 +++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/comms/java/comms/upward/MessageStatus.java b/src/comms/java/comms/upward/MessageStatus.java index 7a5e74af..53786a01 100644 --- a/src/comms/java/comms/upward/MessageStatus.java +++ b/src/comms/java/comms/upward/MessageStatus.java @@ -35,6 +35,9 @@ public class MessageStatus implements iMessage { public final float health; public final float saturation; public final int foodLevel; + public final int pathStartX; + public final int pathStartY; + public final int pathStartZ; public final boolean hasCurrentSegment; public final boolean hasNextSegment; public final boolean calcInProgress; @@ -54,6 +57,9 @@ public class MessageStatus implements iMessage { this.health = in.readFloat(); this.saturation = in.readFloat(); this.foodLevel = in.readInt(); + this.pathStartX = in.readInt(); + this.pathStartY = in.readInt(); + this.pathStartZ = in.readInt(); this.hasCurrentSegment = in.readBoolean(); this.hasNextSegment = in.readBoolean(); this.calcInProgress = in.readBoolean(); @@ -64,7 +70,7 @@ public class MessageStatus implements iMessage { this.currentProcess = in.readUTF(); } - public MessageStatus(double x, double y, double z, float yaw, float pitch, boolean onGround, float health, float saturation, int foodLevel, boolean hasCurrentSegment, boolean hasNextSegment, boolean calcInProgress, double ticksRemainingInCurrent, boolean calcFailedLastTick, boolean safeToCancel, String currentGoal, String currentProcess) { + public MessageStatus(double x, double y, double z, float yaw, float pitch, boolean onGround, float health, float saturation, int foodLevel, int pathStartX, int pathStartY, int pathStartZ, boolean hasCurrentSegment, boolean hasNextSegment, boolean calcInProgress, double ticksRemainingInCurrent, boolean calcFailedLastTick, boolean safeToCancel, String currentGoal, String currentProcess) { this.x = x; this.y = y; this.z = z; @@ -74,6 +80,9 @@ public class MessageStatus implements iMessage { this.health = health; this.saturation = saturation; this.foodLevel = foodLevel; + this.pathStartX = pathStartX; + this.pathStartY = pathStartY; + this.pathStartZ = pathStartZ; this.hasCurrentSegment = hasCurrentSegment; this.hasNextSegment = hasNextSegment; this.calcInProgress = calcInProgress; @@ -95,6 +104,9 @@ public class MessageStatus implements iMessage { out.writeFloat(health); out.writeFloat(saturation); out.writeInt(foodLevel); + out.writeInt(pathStartX); + out.writeInt(pathStartY); + out.writeInt(pathStartZ); out.writeBoolean(hasCurrentSegment); out.writeBoolean(hasNextSegment); out.writeBoolean(calcInProgress); diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index 3f8329bd..736d6ac6 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -28,6 +28,7 @@ import comms.IMessageListener; import comms.downward.MessageChat; import comms.iMessage; import comms.upward.MessageStatus; +import net.minecraft.util.math.BlockPos; import java.io.IOException; import java.util.List; @@ -49,7 +50,9 @@ public class ControllerBehavior extends Behavior implements IMessageListener { } public MessageStatus buildStatus() { - // TODO inventory + // TODO report inventory and echest contents + // TODO figure out who should remember echest contents when it isn't open, baritone or tenor? + BlockPos pathStart = baritone.getPathingBehavior().pathStart(); return new MessageStatus( ctx.player().posX, ctx.player().posY, @@ -60,6 +63,9 @@ public class ControllerBehavior extends Behavior implements IMessageListener { ctx.player().getHealth(), ctx.player().getFoodStats().getSaturationLevel(), ctx.player().getFoodStats().getFoodLevel(), + pathStart.getX(), + pathStart.getY(), + pathStart.getZ(), baritone.getPathingBehavior().getCurrent() != null, baritone.getPathingBehavior().getNext() != null, baritone.getPathingBehavior().getInProgress().isPresent(), From 3a2620192b37bd4bb0f1a326818b6f4fe2433b6d Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 11:46:47 -0800 Subject: [PATCH 05/11] too much log spam --- src/main/java/baritone/behavior/PathingBehavior.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 42186b5b..de973a5f 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -358,7 +358,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, } if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) { // this is plausible - logDebug("Faking path start assuming player is standing off the edge of a block"); + //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; } } @@ -367,7 +367,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, // !onGround // we're in the middle of a jump if (MovementHelper.canWalkOn(ctx, feet.down().down())) { - logDebug("Faking path start assuming player is midair and falling"); + //logDebug("Faking path start assuming player is midair and falling"); return feet.down(); } } From fdd758bc90fd3fc93685e7782837e9591e217485 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 11:46:47 -0800 Subject: [PATCH 06/11] too much log spam --- src/main/java/baritone/behavior/PathingBehavior.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/baritone/behavior/PathingBehavior.java b/src/main/java/baritone/behavior/PathingBehavior.java index 42186b5b..de973a5f 100644 --- a/src/main/java/baritone/behavior/PathingBehavior.java +++ b/src/main/java/baritone/behavior/PathingBehavior.java @@ -358,7 +358,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, } if (MovementHelper.canWalkOn(ctx, possibleSupport.down()) && MovementHelper.canWalkThrough(ctx, possibleSupport) && MovementHelper.canWalkThrough(ctx, possibleSupport.up())) { // this is plausible - logDebug("Faking path start assuming player is standing off the edge of a block"); + //logDebug("Faking path start assuming player is standing off the edge of a block"); return possibleSupport; } } @@ -367,7 +367,7 @@ public final class PathingBehavior extends Behavior implements IPathingBehavior, // !onGround // we're in the middle of a jump if (MovementHelper.canWalkOn(ctx, feet.down().down())) { - logDebug("Faking path start assuming player is midair and falling"); + //logDebug("Faking path start assuming player is midair and falling"); return feet.down(); } } From e0d894d2964fe7c858eec6d03d505ff0c967c504 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 12:09:35 -0800 Subject: [PATCH 07/11] computation request and response --- .../java/baritone/api/pathing/calc/IPath.java | 11 ++- src/comms/java/comms/IMessageListener.java | 10 +++ .../downward/MessageComputationRequest.java | 62 ++++++++++++++++ .../upward/MessageComputationResponse.java | 72 +++++++++++++++++++ .../baritone/behavior/ControllerBehavior.java | 40 +++++++++++ 5 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 src/comms/java/comms/downward/MessageComputationRequest.java create mode 100644 src/comms/java/comms/upward/MessageComputationResponse.java diff --git a/src/api/java/baritone/api/pathing/calc/IPath.java b/src/api/java/baritone/api/pathing/calc/IPath.java index 133de5ef..c3f7fc14 100644 --- a/src/api/java/baritone/api/pathing/calc/IPath.java +++ b/src/api/java/baritone/api/pathing/calc/IPath.java @@ -104,7 +104,7 @@ public interface IPath { * Returns the estimated number of ticks to complete the path from the given node index. * * @param pathPosition The index of the node we're calculating from - * @return The estimated number of ticks remaining frm the given position + * @return The estimated number of ticks remaining from the given position */ default double ticksRemainingFrom(int pathPosition) { double sum = 0; @@ -115,6 +115,15 @@ public interface IPath { return sum; } + /** + * Returns the estimated amount of time needed to complete this path from start to finish + * + * @return The estimated amount of time, in ticks + */ + default double totalTicks() { + return ticksRemainingFrom(0); + } + /** * Cuts off this path at the loaded chunk border, and returns the resulting path. Default * implementation just returns this path, without the intended functionality. diff --git a/src/comms/java/comms/IMessageListener.java b/src/comms/java/comms/IMessageListener.java index afed4cfe..94300f1f 100644 --- a/src/comms/java/comms/IMessageListener.java +++ b/src/comms/java/comms/IMessageListener.java @@ -18,6 +18,8 @@ package comms; import comms.downward.MessageChat; +import comms.downward.MessageComputationRequest; +import comms.upward.MessageComputationResponse; import comms.upward.MessageStatus; public interface IMessageListener { @@ -29,6 +31,14 @@ public interface IMessageListener { unhandled(message); } + default void handle(MessageComputationRequest message) { + unhandled(message); + } + + default void handle(MessageComputationResponse message) { + unhandled(message); + } + default void unhandled(iMessage msg) { // can override this to throw UnsupportedOperationException, if you want to make sure you're handling everything // default is to silently ignore messages without handlers diff --git a/src/comms/java/comms/downward/MessageComputationRequest.java b/src/comms/java/comms/downward/MessageComputationRequest.java new file mode 100644 index 00000000..065c27a2 --- /dev/null +++ b/src/comms/java/comms/downward/MessageComputationRequest.java @@ -0,0 +1,62 @@ +/* + * 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 comms.downward; + +import comms.IMessageListener; +import comms.iMessage; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class MessageComputationRequest implements iMessage { + public final long computationID; + public final int startX; + public final int startY; + public final int startZ; + public final String goal; // TODO find a better way to do this lol + + public MessageComputationRequest(DataInputStream in) throws IOException { + this.computationID = in.readLong(); + this.startX = in.readInt(); + this.startY = in.readInt(); + this.startZ = in.readInt(); + this.goal = in.readUTF(); + } + + public MessageComputationRequest(long computationID, int startX, int startY, int startZ, String goal) { + this.computationID = computationID; + this.startX = startX; + this.startY = startY; + this.startZ = startZ; + this.goal = goal; + } + + @Override + public void write(DataOutputStream out) throws IOException { + out.writeLong(computationID); + out.writeInt(startX); + out.writeInt(startY); + out.writeUTF(goal); + } + + @Override + public void handle(IMessageListener listener) { + listener.handle(this); + } +} diff --git a/src/comms/java/comms/upward/MessageComputationResponse.java b/src/comms/java/comms/upward/MessageComputationResponse.java new file mode 100644 index 00000000..60118979 --- /dev/null +++ b/src/comms/java/comms/upward/MessageComputationResponse.java @@ -0,0 +1,72 @@ +/* + * 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 comms.upward; + +import comms.IMessageListener; +import comms.iMessage; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class MessageComputationResponse implements iMessage { + public final long computationID; + public final int pathLength; + public final double pathCost; + public final boolean endsInGoal; + public final int endX; + public final int endY; + public final int endZ; + + public MessageComputationResponse(DataInputStream in) throws IOException { + this.computationID = in.readLong(); + this.pathLength = in.readInt(); + this.pathCost = in.readDouble(); + this.endsInGoal = in.readBoolean(); + this.endX = in.readInt(); + this.endY = in.readInt(); + this.endZ = in.readInt(); + } + + public MessageComputationResponse(long computationID, int pathLength, double pathCost, boolean endsInGoal, int endX, int endY, int endZ) { + this.computationID = computationID; + this.pathLength = pathLength; + this.pathCost = pathCost; + this.endsInGoal = endsInGoal; + this.endX = endX; + this.endY = endY; + this.endZ = endZ; + } + + @Override + public void write(DataOutputStream out) throws IOException { + out.writeLong(computationID); + out.writeInt(pathLength); + out.writeDouble(pathCost); + out.writeBoolean(endsInGoal); + out.writeInt(endX); + out.writeInt(endY); + out.writeInt(endZ); + } + + @Override + public void handle(IMessageListener listener) { + listener.handle(this); + } +} + diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index 736d6ac6..405ccc4d 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -20,20 +20,31 @@ package baritone.behavior; import baritone.Baritone; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TickEvent; +import baritone.api.pathing.calc.IPath; +import baritone.api.pathing.goals.Goal; +import baritone.api.pathing.goals.GoalYLevel; import baritone.api.process.IBaritoneProcess; +import baritone.api.utils.BetterBlockPos; +import baritone.pathing.movement.CalculationContext; import baritone.utils.Helper; +import baritone.utils.pathing.SegmentedCalculator; import comms.BufferedConnection; import comms.IConnection; import comms.IMessageListener; import comms.downward.MessageChat; +import comms.downward.MessageComputationRequest; import comms.iMessage; +import comms.upward.MessageComputationResponse; import comms.upward.MessageStatus; import net.minecraft.util.math.BlockPos; import java.io.IOException; import java.util.List; +import java.util.Objects; +import java.util.Optional; public class ControllerBehavior extends Behavior implements IMessageListener { + public ControllerBehavior(Baritone baritone) { super(baritone); } @@ -126,6 +137,35 @@ public class ControllerBehavior extends Behavior implements IMessageListener { baritone.getGameEventHandler().onSendChatMessage(event); } + @Override + public void handle(MessageComputationRequest msg) { + BetterBlockPos start = new BetterBlockPos(msg.startX, msg.startY, msg.startZ); + // TODO this may require scanning the world for blocks of a certain type, idk how to manage that + Goal goal = new GoalYLevel(Integer.parseInt(msg.goal)); // im already winston + SegmentedCalculator.calculateSegmentsThreaded(start, goal, new CalculationContext(baritone), path -> { + if (path.isPresent() && !Objects.equals(path.get().getGoal(), goal)) { + throw new IllegalStateException(); // sanity check + } + try { + conn.sendMessage(buildResponse(path, msg)); + } catch (IOException e) { + // nothing we can do about this, we just completed a computation but our tenor connection was closed in the meantime + // just discard the path we made for them =(( + e.printStackTrace(); // and complain =) + } + }); + } + + private static MessageComputationResponse buildResponse(Optional optPath, MessageComputationRequest req) { + if (optPath.isPresent()) { + IPath path = optPath.get(); + BetterBlockPos dest = path.getDest(); + return new MessageComputationResponse(req.computationID, path.length(), path.totalTicks(), path.getGoal().isInGoal(dest), dest.x, dest.y, dest.z); + } else { + return new MessageComputationResponse(req.computationID, 0, 0, false, 0, 0, 0); + } + } + @Override public void unhandled(iMessage msg) { Helper.HELPER.logDebug("Unhandled message received by ControllerBehavior " + msg); From c57f65f832439a692543122d679769b0c71872f8 Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 13:17:03 -0800 Subject: [PATCH 08/11] complete new segmented calculation system --- .../baritone/behavior/ControllerBehavior.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index 405ccc4d..a0783272 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -20,7 +20,6 @@ package baritone.behavior; import baritone.Baritone; import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TickEvent; -import baritone.api.pathing.calc.IPath; import baritone.api.pathing.goals.Goal; import baritone.api.pathing.goals.GoalYLevel; import baritone.api.process.IBaritoneProcess; @@ -41,7 +40,6 @@ import net.minecraft.util.math.BlockPos; import java.io.IOException; import java.util.List; import java.util.Objects; -import java.util.Optional; public class ControllerBehavior extends Behavior implements IMessageListener { @@ -143,29 +141,27 @@ public class ControllerBehavior extends Behavior implements IMessageListener { // TODO this may require scanning the world for blocks of a certain type, idk how to manage that Goal goal = new GoalYLevel(Integer.parseInt(msg.goal)); // im already winston SegmentedCalculator.calculateSegmentsThreaded(start, goal, new CalculationContext(baritone), path -> { - if (path.isPresent() && !Objects.equals(path.get().getGoal(), goal)) { + if (!Objects.equals(path.getGoal(), goal)) { throw new IllegalStateException(); // sanity check } try { - conn.sendMessage(buildResponse(path, msg)); + BetterBlockPos dest = path.getDest(); + conn.sendMessage(new MessageComputationResponse(msg.computationID, path.length(), path.totalTicks(), path.getGoal().isInGoal(dest), dest.x, dest.y, dest.z)); } catch (IOException e) { // nothing we can do about this, we just completed a computation but our tenor connection was closed in the meantime // just discard the path we made for them =(( e.printStackTrace(); // and complain =) } + }, () -> { + try { + conn.sendMessage(new MessageComputationResponse(msg.computationID, 0, 0, false, 0, 0, 0)); + } catch (IOException e) { + // same deal + e.printStackTrace(); + } }); } - private static MessageComputationResponse buildResponse(Optional optPath, MessageComputationRequest req) { - if (optPath.isPresent()) { - IPath path = optPath.get(); - BetterBlockPos dest = path.getDest(); - return new MessageComputationResponse(req.computationID, path.length(), path.totalTicks(), path.getGoal().isInGoal(dest), dest.x, dest.y, dest.z); - } else { - return new MessageComputationResponse(req.computationID, 0, 0, false, 0, 0, 0); - } - } - @Override public void unhandled(iMessage msg) { Helper.HELPER.logDebug("Unhandled message received by ControllerBehavior " + msg); From f222980a1a609d34b93bd989bd1f6793f5543a5c Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 13:32:18 -0800 Subject: [PATCH 09/11] move comms to cabaletta.comms --- .../{ => cabaletta}/comms/BufferedConnection.java | 2 +- .../comms/ConstructingDeserializer.java | 2 +- .../java/{ => cabaletta}/comms/IConnection.java | 2 +- .../java/{ => cabaletta}/comms/IMessageListener.java | 6 +++--- .../{ => cabaletta}/comms/MessageDeserializer.java | 2 +- src/comms/java/{ => cabaletta}/comms/Pipe.java | 2 +- .../{ => cabaletta}/comms/SerializedConnection.java | 2 +- .../java/{ => cabaletta}/comms/SocketConnection.java | 2 +- .../{ => cabaletta}/comms/downward/MessageChat.java | 6 +++--- src/comms/java/{ => cabaletta}/comms/iMessage.java | 2 +- .../{ => cabaletta}/comms/upward/MessageStatus.java | 6 +++--- .../java/baritone/behavior/ControllerBehavior.java | 12 ++++++------ .../java/baritone/utils/ExampleBaritoneControl.java | 2 +- 13 files changed, 24 insertions(+), 24 deletions(-) rename src/comms/java/{ => cabaletta}/comms/BufferedConnection.java (99%) rename src/comms/java/{ => cabaletta}/comms/ConstructingDeserializer.java (98%) rename src/comms/java/{ => cabaletta}/comms/IConnection.java (97%) rename src/comms/java/{ => cabaletta}/comms/IMessageListener.java (90%) rename src/comms/java/{ => cabaletta}/comms/MessageDeserializer.java (97%) rename src/comms/java/{ => cabaletta}/comms/Pipe.java (99%) rename src/comms/java/{ => cabaletta}/comms/SerializedConnection.java (98%) rename src/comms/java/{ => cabaletta}/comms/SocketConnection.java (97%) rename src/comms/java/{ => cabaletta}/comms/downward/MessageChat.java (92%) rename src/comms/java/{ => cabaletta}/comms/iMessage.java (98%) rename src/comms/java/{ => cabaletta}/comms/upward/MessageStatus.java (97%) diff --git a/src/comms/java/comms/BufferedConnection.java b/src/comms/java/cabaletta/comms/BufferedConnection.java similarity index 99% rename from src/comms/java/comms/BufferedConnection.java rename to src/comms/java/cabaletta/comms/BufferedConnection.java index 450010e7..b5ff35c9 100644 --- a/src/comms/java/comms/BufferedConnection.java +++ b/src/comms/java/cabaletta/comms/BufferedConnection.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.EOFException; import java.io.IOException; diff --git a/src/comms/java/comms/ConstructingDeserializer.java b/src/comms/java/cabaletta/comms/ConstructingDeserializer.java similarity index 98% rename from src/comms/java/comms/ConstructingDeserializer.java rename to src/comms/java/cabaletta/comms/ConstructingDeserializer.java index 5b49ecdb..eb15bdf0 100644 --- a/src/comms/java/comms/ConstructingDeserializer.java +++ b/src/comms/java/cabaletta/comms/ConstructingDeserializer.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.DataInputStream; import java.io.IOException; diff --git a/src/comms/java/comms/IConnection.java b/src/comms/java/cabaletta/comms/IConnection.java similarity index 97% rename from src/comms/java/comms/IConnection.java rename to src/comms/java/cabaletta/comms/IConnection.java index dc54beb0..02046fe3 100644 --- a/src/comms/java/comms/IConnection.java +++ b/src/comms/java/cabaletta/comms/IConnection.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.IOException; diff --git a/src/comms/java/comms/IMessageListener.java b/src/comms/java/cabaletta/comms/IMessageListener.java similarity index 90% rename from src/comms/java/comms/IMessageListener.java rename to src/comms/java/cabaletta/comms/IMessageListener.java index afed4cfe..d1c91038 100644 --- a/src/comms/java/comms/IMessageListener.java +++ b/src/comms/java/cabaletta/comms/IMessageListener.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; -import comms.downward.MessageChat; -import comms.upward.MessageStatus; +import cabaletta.comms.downward.MessageChat; +import cabaletta.comms.upward.MessageStatus; public interface IMessageListener { default void handle(MessageStatus message) { diff --git a/src/comms/java/comms/MessageDeserializer.java b/src/comms/java/cabaletta/comms/MessageDeserializer.java similarity index 97% rename from src/comms/java/comms/MessageDeserializer.java rename to src/comms/java/cabaletta/comms/MessageDeserializer.java index aece828d..264a753d 100644 --- a/src/comms/java/comms/MessageDeserializer.java +++ b/src/comms/java/cabaletta/comms/MessageDeserializer.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.DataInputStream; import java.io.IOException; diff --git a/src/comms/java/comms/Pipe.java b/src/comms/java/cabaletta/comms/Pipe.java similarity index 99% rename from src/comms/java/comms/Pipe.java rename to src/comms/java/cabaletta/comms/Pipe.java index c189af60..42e28899 100644 --- a/src/comms/java/comms/Pipe.java +++ b/src/comms/java/cabaletta/comms/Pipe.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.EOFException; import java.io.IOException; diff --git a/src/comms/java/comms/SerializedConnection.java b/src/comms/java/cabaletta/comms/SerializedConnection.java similarity index 98% rename from src/comms/java/comms/SerializedConnection.java rename to src/comms/java/cabaletta/comms/SerializedConnection.java index c4191194..5ac482a9 100644 --- a/src/comms/java/comms/SerializedConnection.java +++ b/src/comms/java/cabaletta/comms/SerializedConnection.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.*; diff --git a/src/comms/java/comms/SocketConnection.java b/src/comms/java/cabaletta/comms/SocketConnection.java similarity index 97% rename from src/comms/java/comms/SocketConnection.java rename to src/comms/java/cabaletta/comms/SocketConnection.java index e40d5a1a..95bb83d5 100644 --- a/src/comms/java/comms/SocketConnection.java +++ b/src/comms/java/cabaletta/comms/SocketConnection.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.IOException; import java.net.Socket; diff --git a/src/comms/java/comms/downward/MessageChat.java b/src/comms/java/cabaletta/comms/downward/MessageChat.java similarity index 92% rename from src/comms/java/comms/downward/MessageChat.java rename to src/comms/java/cabaletta/comms/downward/MessageChat.java index b04d2a31..be6b0f3b 100644 --- a/src/comms/java/comms/downward/MessageChat.java +++ b/src/comms/java/cabaletta/comms/downward/MessageChat.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package comms.downward; +package cabaletta.comms.downward; -import comms.IMessageListener; -import comms.iMessage; +import cabaletta.comms.IMessageListener; +import cabaletta.comms.iMessage; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/comms/java/comms/iMessage.java b/src/comms/java/cabaletta/comms/iMessage.java similarity index 98% rename from src/comms/java/comms/iMessage.java rename to src/comms/java/cabaletta/comms/iMessage.java index 67ec2965..7d00ab4c 100644 --- a/src/comms/java/comms/iMessage.java +++ b/src/comms/java/cabaletta/comms/iMessage.java @@ -15,7 +15,7 @@ * along with Baritone. If not, see . */ -package comms; +package cabaletta.comms; import java.io.DataOutputStream; import java.io.IOException; diff --git a/src/comms/java/comms/upward/MessageStatus.java b/src/comms/java/cabaletta/comms/upward/MessageStatus.java similarity index 97% rename from src/comms/java/comms/upward/MessageStatus.java rename to src/comms/java/cabaletta/comms/upward/MessageStatus.java index 53786a01..f7727fc1 100644 --- a/src/comms/java/comms/upward/MessageStatus.java +++ b/src/comms/java/cabaletta/comms/upward/MessageStatus.java @@ -15,10 +15,10 @@ * along with Baritone. If not, see . */ -package comms.upward; +package cabaletta.comms.upward; -import comms.IMessageListener; -import comms.iMessage; +import cabaletta.comms.IMessageListener; +import cabaletta.comms.iMessage; import java.io.DataInputStream; import java.io.DataOutputStream; diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index 736d6ac6..bc697f8b 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -22,12 +22,12 @@ import baritone.api.event.events.ChatEvent; import baritone.api.event.events.TickEvent; import baritone.api.process.IBaritoneProcess; import baritone.utils.Helper; -import comms.BufferedConnection; -import comms.IConnection; -import comms.IMessageListener; -import comms.downward.MessageChat; -import comms.iMessage; -import comms.upward.MessageStatus; +import cabaletta.comms.BufferedConnection; +import cabaletta.comms.IConnection; +import cabaletta.comms.IMessageListener; +import cabaletta.comms.downward.MessageChat; +import cabaletta.comms.iMessage; +import cabaletta.comms.upward.MessageStatus; import net.minecraft.util.math.BlockPos; import java.io.IOException; diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index 36d031c2..1291f8e1 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -32,7 +32,7 @@ import baritone.pathing.movement.CalculationContext; import baritone.pathing.movement.Movement; import baritone.pathing.movement.Moves; import baritone.process.CustomGoalProcess; -import comms.SocketConnection; +import cabaletta.comms.SocketConnection; import net.minecraft.block.Block; import net.minecraft.client.multiplayer.ChunkProviderClient; import net.minecraft.entity.Entity; From 16fec4a1a088c4e60743be0a0db74256cfc90adc Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 16:09:59 -0800 Subject: [PATCH 10/11] buffered connection creation helper --- src/comms/java/cabaletta/comms/BufferedConnection.java | 8 ++++++++ src/main/java/baritone/behavior/ControllerBehavior.java | 6 +----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/comms/java/cabaletta/comms/BufferedConnection.java b/src/comms/java/cabaletta/comms/BufferedConnection.java index b5ff35c9..6fb07998 100644 --- a/src/comms/java/cabaletta/comms/BufferedConnection.java +++ b/src/comms/java/cabaletta/comms/BufferedConnection.java @@ -83,4 +83,12 @@ public class BufferedConnection implements IConnection { } return msgs; } + + public static BufferedConnection makeBuffered(IConnection conn) { + if (conn instanceof BufferedConnection) { + return (BufferedConnection) conn; + } else { + return new BufferedConnection(conn); + } + } } diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index bc697f8b..1c18bf07 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -106,11 +106,7 @@ public class ControllerBehavior extends Behavior implements IMessageListener { public void connectTo(IConnection conn) { disconnect(); - if (conn instanceof BufferedConnection) { - this.conn = (BufferedConnection) conn; - } else { - this.conn = new BufferedConnection(conn); - } + this.conn = BufferedConnection.makeBuffered(conn); } public void disconnect() { From 11e44acf65d6abb7697130195f1dff4f240ab0fa Mon Sep 17 00:00:00 2001 From: Leijurv Date: Fri, 23 Nov 2018 16:35:03 -0800 Subject: [PATCH 11/11] helper to handle pending msgs --- src/comms/java/cabaletta/comms/BufferedConnection.java | 4 ++++ src/main/java/baritone/behavior/ControllerBehavior.java | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/comms/java/cabaletta/comms/BufferedConnection.java b/src/comms/java/cabaletta/comms/BufferedConnection.java index 6fb07998..f21a684c 100644 --- a/src/comms/java/cabaletta/comms/BufferedConnection.java +++ b/src/comms/java/cabaletta/comms/BufferedConnection.java @@ -84,6 +84,10 @@ public class BufferedConnection implements IConnection { return msgs; } + public void handleAllPendingMessages(IMessageListener listener) throws IOException { + receiveMessagesNonBlocking().forEach(msg -> msg.handle(listener)); + } + public static BufferedConnection makeBuffered(IConnection conn) { if (conn instanceof BufferedConnection) { return (BufferedConnection) conn; diff --git a/src/main/java/baritone/behavior/ControllerBehavior.java b/src/main/java/baritone/behavior/ControllerBehavior.java index 1c18bf07..90247834 100644 --- a/src/main/java/baritone/behavior/ControllerBehavior.java +++ b/src/main/java/baritone/behavior/ControllerBehavior.java @@ -31,7 +31,6 @@ import cabaletta.comms.upward.MessageStatus; import net.minecraft.util.math.BlockPos; import java.io.IOException; -import java.util.List; public class ControllerBehavior extends Behavior implements IMessageListener { public ControllerBehavior(Baritone baritone) { @@ -82,8 +81,7 @@ public class ControllerBehavior extends Behavior implements IMessageListener { return; } try { - List msgs = conn.receiveMessagesNonBlocking(); - msgs.forEach(msg -> msg.handle(this)); + conn.handleAllPendingMessages(this); } catch (IOException e) { e.printStackTrace(); disconnect();