diff --git a/src/api/java/baritone/api/utils/IPlayerContext.java b/src/api/java/baritone/api/utils/IPlayerContext.java
index cd80a7d9..83040ab5 100644
--- a/src/api/java/baritone/api/utils/IPlayerContext.java
+++ b/src/api/java/baritone/api/utils/IPlayerContext.java
@@ -20,7 +20,6 @@ package baritone.api.utils;
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;
@@ -37,7 +36,7 @@ public interface IPlayerContext {
EntityPlayerSP player();
- PlayerControllerMP playerController();
+ IPlayerController playerController();
World world();
diff --git a/src/api/java/baritone/api/utils/IPlayerController.java b/src/api/java/baritone/api/utils/IPlayerController.java
new file mode 100644
index 00000000..bf987a06
--- /dev/null
+++ b/src/api/java/baritone/api/utils/IPlayerController.java
@@ -0,0 +1,43 @@
+/*
+ * 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.utils;
+
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.GameType;
+
+/**
+ * @author Brady
+ * @since 12/14/2018
+ */
+public interface IPlayerController {
+
+ boolean clickBlock(BlockPos pos, EnumFacing side);
+
+ boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side);
+
+ void resetBlockRemoving();
+
+ void setGameType(GameType type);
+
+ GameType getGameType();
+
+ default double getBlockReachDistance() {
+ return this.getGameType().isCreative() ? 5.0F : 4.5F;
+ }
+}
diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java
index 4247e92b..05b1f80a 100644
--- a/src/main/java/baritone/utils/player/PrimaryPlayerContext.java
+++ b/src/main/java/baritone/utils/player/PrimaryPlayerContext.java
@@ -20,6 +20,7 @@ package baritone.utils.player;
import baritone.api.BaritoneAPI;
import baritone.api.cache.IWorldData;
import baritone.api.utils.IPlayerContext;
+import baritone.api.utils.IPlayerController;
import baritone.utils.Helper;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.multiplayer.PlayerControllerMP;
@@ -42,8 +43,8 @@ public enum PrimaryPlayerContext implements IPlayerContext, Helper {
}
@Override
- public PlayerControllerMP playerController() {
- return mc.playerController;
+ public IPlayerController playerController() {
+ return PrimaryPlayerController.INSTANCE;
}
@Override
diff --git a/src/main/java/baritone/utils/player/PrimaryPlayerController.java b/src/main/java/baritone/utils/player/PrimaryPlayerController.java
new file mode 100644
index 00000000..750d578c
--- /dev/null
+++ b/src/main/java/baritone/utils/player/PrimaryPlayerController.java
@@ -0,0 +1,58 @@
+/*
+ * 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.utils.player;
+
+import baritone.api.utils.IPlayerController;
+import baritone.utils.Helper;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.GameType;
+
+/**
+ * @author Brady
+ * @since 12/14/2018
+ */
+public enum PrimaryPlayerController implements IPlayerController, Helper {
+
+ INSTANCE;
+
+ @Override
+ public boolean clickBlock(BlockPos pos, EnumFacing side) {
+ return mc.playerController.clickBlock(pos, side);
+ }
+
+ @Override
+ public boolean onPlayerDamageBlock(BlockPos pos, EnumFacing side) {
+ return mc.playerController.onPlayerDamageBlock(pos, side);
+ }
+
+ @Override
+ public void resetBlockRemoving() {
+ mc.playerController.resetBlockRemoving();
+ }
+
+ @Override
+ public void setGameType(GameType type) {
+ mc.playerController.setGameType(type);
+ }
+
+ @Override
+ public GameType getGameType() {
+ return mc.playerController.getCurrentGameType();
+ }
+}