From 735cf47c35e6f6c3f1e5160143edb51b55b011ff Mon Sep 17 00:00:00 2001 From: Leijurv Date: Mon, 28 Jan 2019 17:34:14 -0800 Subject: [PATCH] actually works --- src/api/java/baritone/api/Settings.java | 5 ++ .../launch/mixins/MixinChunkCache.java | 16 ++++++- .../launch/mixins/MixinChunkRenderWorker.java | 46 +++++++++++++++++++ src/launch/resources/mixins.baritone.json | 1 + .../utils/ExampleBaritoneControl.java | 8 ++++ 5 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java diff --git a/src/api/java/baritone/api/Settings.java b/src/api/java/baritone/api/Settings.java index 1b4f62e0..46c835cd 100644 --- a/src/api/java/baritone/api/Settings.java +++ b/src/api/java/baritone/api/Settings.java @@ -445,6 +445,11 @@ public class Settings { */ public Setting pathThroughCachedOnly = new Setting<>(false); + /** + * 😎 + */ + public Setting renderCachedChunks = new Setting<>(false); + /** * Whether or not to use the "#" command prefix */ diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkCache.java b/src/launch/java/baritone/launch/mixins/MixinChunkCache.java index 17fefb6d..f8d0a0bf 100644 --- a/src/launch/java/baritone/launch/mixins/MixinChunkCache.java +++ b/src/launch/java/baritone/launch/mixins/MixinChunkCache.java @@ -38,9 +38,21 @@ public class MixinChunkCache { private void getBlockState(BlockPos pos, CallbackInfoReturnable ci) { Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); IPlayerContext ctx = baritone.getPlayerContext(); - if (ctx.player() != null && ctx.world() != null && baritone.bsi != null) { + if (ctx.player() != null && ctx.world() != null && baritone.bsi != null && Baritone.settings().renderCachedChunks.get()) { ci.setReturnValue(baritone.bsi.get0(pos)); - //ci.setReturnValue(Blocks.DIRT.getDefaultState()); + } + } + + @Inject( + method = "isEmpty", + at = @At("HEAD"), + cancellable = true + ) + private void isEmpty(CallbackInfoReturnable ci) { + Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); + IPlayerContext ctx = baritone.getPlayerContext(); + if (ctx.player() != null && ctx.world() != null && baritone.bsi != null && Baritone.settings().renderCachedChunks.get()) { + ci.setReturnValue(false); } } } diff --git a/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java b/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java new file mode 100644 index 00000000..493d4869 --- /dev/null +++ b/src/launch/java/baritone/launch/mixins/MixinChunkRenderWorker.java @@ -0,0 +1,46 @@ +/* + * 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.launch.mixins; + +import baritone.Baritone; +import baritone.api.BaritoneAPI; +import baritone.api.utils.IPlayerContext; +import net.minecraft.client.renderer.chunk.ChunkRenderWorker; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ChunkRenderWorker.class) +public class MixinChunkRenderWorker { + @Inject( + method = "isChunkExisting", + at = @At("HEAD"), + cancellable = true + ) + private void isChunkExisting(BlockPos pos, World world, CallbackInfoReturnable ci) { + Baritone baritone = (Baritone) BaritoneAPI.getProvider().getPrimaryBaritone(); + IPlayerContext ctx = baritone.getPlayerContext(); + if (ctx.player() != null && ctx.world() != null && baritone.bsi != null && Baritone.settings().renderCachedChunks.get()) { + ci.setReturnValue(baritone.bsi.isLoaded(pos.getX(), pos.getZ())); + } + } +} + diff --git a/src/launch/resources/mixins.baritone.json b/src/launch/resources/mixins.baritone.json index eab28fdb..9a7dce45 100644 --- a/src/launch/resources/mixins.baritone.json +++ b/src/launch/resources/mixins.baritone.json @@ -13,6 +13,7 @@ "MixinChunkCache", "MixinChunkProviderClient", "MixinChunkProviderServer", + "MixinChunkRenderWorker", "MixinEntity", "MixinEntityLivingBase", "MixinEntityPlayerSP", diff --git a/src/main/java/baritone/utils/ExampleBaritoneControl.java b/src/main/java/baritone/utils/ExampleBaritoneControl.java index 508a5e1b..f5d054be 100644 --- a/src/main/java/baritone/utils/ExampleBaritoneControl.java +++ b/src/main/java/baritone/utils/ExampleBaritoneControl.java @@ -24,6 +24,7 @@ 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.BetterBlockPos; import baritone.api.utils.SettingsUtil; import baritone.behavior.Behavior; import baritone.behavior.PathingBehavior; @@ -35,6 +36,7 @@ import baritone.pathing.movement.Moves; import baritone.process.CustomGoalProcess; import baritone.utils.pathing.SegmentedCalculator; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ChunkProviderClient; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -284,6 +286,12 @@ public class ExampleBaritoneControl extends Behavior implements Helper { logDirect("Baritone settings reset"); return true; } + if (msg.equals("render")) { + BetterBlockPos pf = ctx.playerFeet(); + Minecraft.getMinecraft().renderGlobal.markBlockRangeForRenderUpdate(pf.x - 500, pf.y - 500, pf.z - 500, pf.x + 500, pf.y + 500, pf.z + 500); + logDirect("okay"); + return true; + } if (msg.equals("echest")) { Optional> contents = baritone.getMemoryBehavior().echest(); if (contents.isPresent()) {