Merge branch 'master' of github.com:cabaletta/baritone
This commit is contained in:
		@@ -21,6 +21,7 @@ import baritone.bot.behavior.Behavior;
 | 
			
		||||
import baritone.bot.behavior.impl.LookBehavior;
 | 
			
		||||
import baritone.bot.behavior.impl.MemoryBehavior;
 | 
			
		||||
import baritone.bot.behavior.impl.PathingBehavior;
 | 
			
		||||
import baritone.bot.event.GameEventHandler;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,9 +25,9 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This serves as a replacement to the old {@code MovementManager}'s
 | 
			
		||||
 * input overriding capabilities. It is vastly more extensible in the
 | 
			
		||||
 * inputs that can be overriden.
 | 
			
		||||
 * An interface with the game's control system allowing the ability to
 | 
			
		||||
 * force down certain controls, having the same effect as if we were actually
 | 
			
		||||
 * physically forcing down the assigned key.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 7/31/2018 11:20 PM
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@
 | 
			
		||||
 | 
			
		||||
package baritone.bot.behavior;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.event.AbstractGameEventListener;
 | 
			
		||||
import baritone.bot.event.listener.AbstractGameEventListener;
 | 
			
		||||
import baritone.bot.utils.Helper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -63,8 +63,7 @@ public final class CachedChunk implements IBlockTypeAccess {
 | 
			
		||||
    private final BitSet data;
 | 
			
		||||
 | 
			
		||||
    CachedChunk(int x, int z, BitSet data) {
 | 
			
		||||
        if (data.size() > SIZE)
 | 
			
		||||
            throw new IllegalArgumentException("BitSet of invalid length provided");
 | 
			
		||||
        validateSize(data);
 | 
			
		||||
 | 
			
		||||
        this.x = x;
 | 
			
		||||
        this.z = z;
 | 
			
		||||
@@ -78,8 +77,7 @@ public final class CachedChunk implements IBlockTypeAccess {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void updateContents(BitSet data) {
 | 
			
		||||
        if (data.size() > SIZE)
 | 
			
		||||
            throw new IllegalArgumentException("BitSet of invalid length provided");
 | 
			
		||||
        validateSize(data);
 | 
			
		||||
 | 
			
		||||
        for (int i = 0; i < data.length(); i++)
 | 
			
		||||
            this.data.set(i, data.get(i));
 | 
			
		||||
@@ -117,4 +115,17 @@ public final class CachedChunk implements IBlockTypeAccess {
 | 
			
		||||
    public static int getPositionIndex(int x, int y, int z) {
 | 
			
		||||
        return (x + (z << 4) + (y << 8)) * 2;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Validates the size of an input {@link BitSet} containing the raw
 | 
			
		||||
     * packed chunk data. Sizes that exceed {@link CachedChunk#SIZE} are
 | 
			
		||||
     * considered invalid, and thus, an exception will be thrown.
 | 
			
		||||
     *
 | 
			
		||||
     * @param data The raw data
 | 
			
		||||
     * @throws IllegalArgumentException if the bitset size exceeds the maximum size
 | 
			
		||||
     */
 | 
			
		||||
    private static void validateSize(BitSet data) {
 | 
			
		||||
        if (data.size() > SIZE)
 | 
			
		||||
            throw new IllegalArgumentException("BitSet of invalid length provided");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										354
									
								
								src/main/java/baritone/bot/GameEventHandler.java → src/main/java/baritone/bot/event/GameEventHandler.java
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										354
									
								
								src/main/java/baritone/bot/GameEventHandler.java → src/main/java/baritone/bot/event/GameEventHandler.java
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -1,169 +1,185 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package baritone.bot;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.behavior.Behavior;
 | 
			
		||||
import baritone.bot.chunk.CachedWorld;
 | 
			
		||||
import baritone.bot.chunk.CachedWorldProvider;
 | 
			
		||||
import baritone.bot.chunk.ChunkPacker;
 | 
			
		||||
import baritone.bot.event.IGameEventListener;
 | 
			
		||||
import baritone.bot.event.events.*;
 | 
			
		||||
import baritone.bot.event.events.type.EventState;
 | 
			
		||||
import baritone.bot.utils.Helper;
 | 
			
		||||
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.client.settings.KeyBinding;
 | 
			
		||||
import org.lwjgl.input.Keyboard;
 | 
			
		||||
import org.lwjgl.opengl.GL11;
 | 
			
		||||
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 7/31/2018 11:04 PM
 | 
			
		||||
 */
 | 
			
		||||
public final class GameEventHandler implements IGameEventListener, Helper {
 | 
			
		||||
 | 
			
		||||
    GameEventHandler() {}
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public final void onTick(TickEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onTick(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onPlayerUpdate() {
 | 
			
		||||
        dispatch(Behavior::onPlayerUpdate);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onProcessKeyBinds() {
 | 
			
		||||
        InputOverrideHandler inputHandler = Baritone.INSTANCE.getInputOverrideHandler();
 | 
			
		||||
 | 
			
		||||
        // Simulate the key being held down this tick
 | 
			
		||||
        for (InputOverrideHandler.Input input : InputOverrideHandler.Input.values()) {
 | 
			
		||||
            KeyBinding keyBinding = input.getKeyBinding();
 | 
			
		||||
 | 
			
		||||
            if (inputHandler.isInputForcedDown(keyBinding) && !keyBinding.isKeyDown()) {
 | 
			
		||||
                int keyCode = keyBinding.getKeyCode();
 | 
			
		||||
 | 
			
		||||
                if (keyCode < Keyboard.KEYBOARD_SIZE)
 | 
			
		||||
                    KeyBinding.onTick(keyCode < 0 ? keyCode + 100 : keyCode);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatch(Behavior::onProcessKeyBinds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onSendChatMessage(ChatEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onSendChatMessage(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onChunkEvent(ChunkEvent event) {
 | 
			
		||||
        EventState state = event.getState();
 | 
			
		||||
        ChunkEvent.Type type = event.getType();
 | 
			
		||||
 | 
			
		||||
        boolean isPostPopulate = state == EventState.POST
 | 
			
		||||
                && type == ChunkEvent.Type.POPULATE;
 | 
			
		||||
 | 
			
		||||
        // 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());
 | 
			
		||||
 | 
			
		||||
        if (isPostPopulate || isPreUnload) {
 | 
			
		||||
            CachedWorldProvider.INSTANCE.ifWorldLoaded(world ->
 | 
			
		||||
                    world.updateCachedChunk(event.getX(), event.getZ(),
 | 
			
		||||
                            ChunkPacker.createPackedChunk(mc.world.getChunk(event.getX(), event.getZ()))));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatch(behavior -> behavior.onChunkEvent(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onRenderPass(RenderEvent event) {
 | 
			
		||||
        /*
 | 
			
		||||
        CachedWorldProvider.INSTANCE.ifWorldLoaded(world -> world.forEachRegion(region -> region.forEachChunk(chunk -> {
 | 
			
		||||
            drawChunkLine(region.getX() * 512 + chunk.getX() * 16, region.getZ() * 512 + chunk.getZ() * 16, event.getPartialTicks());
 | 
			
		||||
        })));
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        dispatch(behavior -> behavior.onRenderPass(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onWorldEvent(WorldEvent event) {
 | 
			
		||||
        CachedWorldProvider cache = CachedWorldProvider.INSTANCE;
 | 
			
		||||
 | 
			
		||||
        switch (event.getState()) {
 | 
			
		||||
            case PRE:
 | 
			
		||||
                cache.ifWorldLoaded(CachedWorld::save);
 | 
			
		||||
                break;
 | 
			
		||||
            case POST:
 | 
			
		||||
                cache.closeWorld();
 | 
			
		||||
                if (event.getWorld() != null)
 | 
			
		||||
                    cache.initWorld(event.getWorld());
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatch(behavior -> behavior.onWorldEvent(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onSendPacket(PacketEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onSendPacket(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onReceivePacket(PacketEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onReceivePacket(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void dispatch(Consumer<Behavior> dispatchFunction) {
 | 
			
		||||
        Baritone.INSTANCE.getBehaviors().stream().filter(Behavior::isEnabled).forEach(dispatchFunction);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void drawChunkLine(int posX, int posZ, float partialTicks) {
 | 
			
		||||
        GlStateManager.enableBlend();
 | 
			
		||||
        GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
 | 
			
		||||
        GlStateManager.color(1.0F, 1.0F, 0.0F, 0.4F);
 | 
			
		||||
        GL11.glLineWidth(2.0F);
 | 
			
		||||
        GlStateManager.disableTexture2D();
 | 
			
		||||
 | 
			
		||||
        Tessellator tessellator = Tessellator.getInstance();
 | 
			
		||||
        BufferBuilder buffer = tessellator.getBuffer();
 | 
			
		||||
        double d0 = mc.getRenderManager().viewerPosX;
 | 
			
		||||
        double d1 = mc.getRenderManager().viewerPosY;
 | 
			
		||||
        double d2 = mc.getRenderManager().viewerPosZ;
 | 
			
		||||
        buffer.begin(3, DefaultVertexFormats.POSITION);
 | 
			
		||||
        buffer.pos(posX - d0, 0 - d1, posZ - d2).endVertex();
 | 
			
		||||
        buffer.pos(posX - d0, 256 - d1, posZ - d2).endVertex();
 | 
			
		||||
        tessellator.draw();
 | 
			
		||||
 | 
			
		||||
        GlStateManager.enableDepth();
 | 
			
		||||
        GlStateManager.depthMask(true);
 | 
			
		||||
        GlStateManager.enableTexture2D();
 | 
			
		||||
        GlStateManager.disableBlend();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package baritone.bot.event;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.Baritone;
 | 
			
		||||
import baritone.bot.InputOverrideHandler;
 | 
			
		||||
import baritone.bot.behavior.Behavior;
 | 
			
		||||
import baritone.bot.chunk.CachedWorld;
 | 
			
		||||
import baritone.bot.chunk.CachedWorldProvider;
 | 
			
		||||
import baritone.bot.chunk.ChunkPacker;
 | 
			
		||||
import baritone.bot.event.listener.IGameEventListener;
 | 
			
		||||
import baritone.bot.event.events.*;
 | 
			
		||||
import baritone.bot.event.events.type.EventState;
 | 
			
		||||
import baritone.bot.utils.Helper;
 | 
			
		||||
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.client.settings.KeyBinding;
 | 
			
		||||
import org.lwjgl.input.Keyboard;
 | 
			
		||||
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 7/31/2018 11:04 PM
 | 
			
		||||
 */
 | 
			
		||||
public final class GameEventHandler implements IGameEventListener, Helper {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public final void onTick(TickEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onTick(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onPlayerUpdate() {
 | 
			
		||||
        dispatch(Behavior::onPlayerUpdate);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onProcessKeyBinds() {
 | 
			
		||||
        InputOverrideHandler inputHandler = Baritone.INSTANCE.getInputOverrideHandler();
 | 
			
		||||
 | 
			
		||||
        // Simulate the key being held down this tick
 | 
			
		||||
        for (InputOverrideHandler.Input input : InputOverrideHandler.Input.values()) {
 | 
			
		||||
            KeyBinding keyBinding = input.getKeyBinding();
 | 
			
		||||
 | 
			
		||||
            if (inputHandler.isInputForcedDown(keyBinding) && !keyBinding.isKeyDown()) {
 | 
			
		||||
                int keyCode = keyBinding.getKeyCode();
 | 
			
		||||
 | 
			
		||||
                if (keyCode < Keyboard.KEYBOARD_SIZE)
 | 
			
		||||
                    KeyBinding.onTick(keyCode < 0 ? keyCode + 100 : keyCode);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatch(Behavior::onProcessKeyBinds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onSendChatMessage(ChatEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onSendChatMessage(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onChunkEvent(ChunkEvent event) {
 | 
			
		||||
        EventState state = event.getState();
 | 
			
		||||
        ChunkEvent.Type type = event.getType();
 | 
			
		||||
 | 
			
		||||
        boolean isPostPopulate = state == EventState.POST
 | 
			
		||||
                && type == ChunkEvent.Type.POPULATE;
 | 
			
		||||
 | 
			
		||||
        // 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());
 | 
			
		||||
 | 
			
		||||
        if (isPostPopulate || isPreUnload) {
 | 
			
		||||
            CachedWorldProvider.INSTANCE.ifWorldLoaded(world ->
 | 
			
		||||
                    world.updateCachedChunk(event.getX(), event.getZ(),
 | 
			
		||||
                            ChunkPacker.createPackedChunk(mc.world.getChunk(event.getX(), event.getZ()))));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatch(behavior -> behavior.onChunkEvent(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onRenderPass(RenderEvent event) {
 | 
			
		||||
        /*
 | 
			
		||||
        CachedWorldProvider.INSTANCE.ifWorldLoaded(world -> world.forEachRegion(region -> region.forEachChunk(chunk -> {
 | 
			
		||||
            drawChunkLine(region.getX() * 512 + chunk.getX() * 16, region.getZ() * 512 + chunk.getZ() * 16, event.getPartialTicks());
 | 
			
		||||
        })));
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        dispatch(behavior -> behavior.onRenderPass(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onWorldEvent(WorldEvent event) {
 | 
			
		||||
        CachedWorldProvider cache = CachedWorldProvider.INSTANCE;
 | 
			
		||||
 | 
			
		||||
        switch (event.getState()) {
 | 
			
		||||
            case PRE:
 | 
			
		||||
                cache.ifWorldLoaded(CachedWorld::save);
 | 
			
		||||
                break;
 | 
			
		||||
            case POST:
 | 
			
		||||
                cache.closeWorld();
 | 
			
		||||
                if (event.getWorld() != null)
 | 
			
		||||
                    cache.initWorld(event.getWorld());
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dispatch(behavior -> behavior.onWorldEvent(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onSendPacket(PacketEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onSendPacket(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onReceivePacket(PacketEvent event) {
 | 
			
		||||
        dispatch(behavior -> behavior.onReceivePacket(event));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void dispatch(Consumer<Behavior> dispatchFunction) {
 | 
			
		||||
        Baritone.INSTANCE.getBehaviors().stream().filter(Behavior::isEnabled).forEach(dispatchFunction);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void drawChunkLine(int posX, int posZ, float partialTicks) {
 | 
			
		||||
        GlStateManager.enableBlend();
 | 
			
		||||
        GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
 | 
			
		||||
        GlStateManager.color(1.0F, 1.0F, 0.0F, 0.4F);
 | 
			
		||||
        GlStateManager.glLineWidth(2.0F);
 | 
			
		||||
        GlStateManager.disableTexture2D();
 | 
			
		||||
 | 
			
		||||
        Tessellator tessellator = Tessellator.getInstance();
 | 
			
		||||
        BufferBuilder buffer = tessellator.getBuffer();
 | 
			
		||||
        double d0 = mc.getRenderManager().viewerPosX;
 | 
			
		||||
        double d1 = mc.getRenderManager().viewerPosY;
 | 
			
		||||
        double d2 = mc.getRenderManager().viewerPosZ;
 | 
			
		||||
        buffer.begin(3, DefaultVertexFormats.POSITION);
 | 
			
		||||
        buffer.pos(posX - d0, 0 - d1, posZ - d2).endVertex();
 | 
			
		||||
        buffer.pos(posX - d0, 256 - d1, posZ - d2).endVertex();
 | 
			
		||||
        tessellator.draw();
 | 
			
		||||
 | 
			
		||||
        GlStateManager.enableDepth();
 | 
			
		||||
        GlStateManager.depthMask(true);
 | 
			
		||||
        GlStateManager.enableTexture2D();
 | 
			
		||||
        GlStateManager.disableBlend();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -15,7 +15,24 @@
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package baritone.bot.event;
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package baritone.bot.event.listener;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.event.events.*;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										215
									
								
								src/main/java/baritone/bot/event/IGameEventListener.java → src/main/java/baritone/bot/event/listener/IGameEventListener.java
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										215
									
								
								src/main/java/baritone/bot/event/IGameEventListener.java → src/main/java/baritone/bot/event/listener/IGameEventListener.java
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -1,99 +1,116 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package baritone.bot.event;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.event.events.*;
 | 
			
		||||
import io.netty.util.concurrent.GenericFutureListener;
 | 
			
		||||
import net.minecraft.client.Minecraft;
 | 
			
		||||
import net.minecraft.client.entity.EntityPlayerSP;
 | 
			
		||||
import net.minecraft.client.multiplayer.WorldClient;
 | 
			
		||||
import net.minecraft.client.renderer.EntityRenderer;
 | 
			
		||||
import net.minecraft.client.settings.GameSettings;
 | 
			
		||||
import net.minecraft.network.NetworkManager;
 | 
			
		||||
import net.minecraft.network.Packet;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 7/31/2018 11:05 PM
 | 
			
		||||
 */
 | 
			
		||||
public interface IGameEventListener {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run once per game tick before screen input is handled.
 | 
			
		||||
     *
 | 
			
		||||
     * @see Minecraft#runTick()
 | 
			
		||||
     */
 | 
			
		||||
    void onTick(TickEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run once per game tick from before the player rotation is sent to the server.
 | 
			
		||||
     * @see EntityPlayerSP#onUpdate()
 | 
			
		||||
     */
 | 
			
		||||
    void onPlayerUpdate();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run once per game tick from before keybinds are processed.
 | 
			
		||||
     *
 | 
			
		||||
     * @see Minecraft#processKeyBinds()
 | 
			
		||||
     */
 | 
			
		||||
    void onProcessKeyBinds();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs whenever the client player sends a message to the server.
 | 
			
		||||
     *
 | 
			
		||||
     * @see EntityPlayerSP#sendChatMessage(String)
 | 
			
		||||
     */
 | 
			
		||||
    void onSendChatMessage(ChatEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before and after whenever a chunk is either loaded, unloaded, or populated.
 | 
			
		||||
     *
 | 
			
		||||
     * @see WorldClient#doPreChunk(int, int, boolean)
 | 
			
		||||
     */
 | 
			
		||||
    void onChunkEvent(ChunkEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs once per world render pass. Two passes are made when {@link GameSettings#anaglyph} is on.
 | 
			
		||||
     * <p>
 | 
			
		||||
     * <b>Note:</b> {@link GameSettings#anaglyph} has been removed in Minecraft 1.13
 | 
			
		||||
     *
 | 
			
		||||
     * @see EntityRenderer#renderWorldPass(int, float, long)
 | 
			
		||||
     */
 | 
			
		||||
    void onRenderPass(RenderEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before and after whenever a new world is loaded
 | 
			
		||||
     *
 | 
			
		||||
     * @see Minecraft#loadWorld(WorldClient, String)
 | 
			
		||||
     */
 | 
			
		||||
    void onWorldEvent(WorldEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before a outbound packet is sent
 | 
			
		||||
     *
 | 
			
		||||
     * @see NetworkManager#dispatchPacket(Packet, GenericFutureListener[])
 | 
			
		||||
     */
 | 
			
		||||
    void onSendPacket(PacketEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before an inbound packet is processed
 | 
			
		||||
     *
 | 
			
		||||
     * @see NetworkManager#dispatchPacket(Packet, GenericFutureListener[])
 | 
			
		||||
     */
 | 
			
		||||
    void onReceivePacket(PacketEvent event);
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file is part of Baritone.
 | 
			
		||||
 *
 | 
			
		||||
 * Baritone is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU 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 General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with Baritone.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package baritone.bot.event.listener;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.event.events.*;
 | 
			
		||||
import io.netty.util.concurrent.GenericFutureListener;
 | 
			
		||||
import net.minecraft.client.Minecraft;
 | 
			
		||||
import net.minecraft.client.entity.EntityPlayerSP;
 | 
			
		||||
import net.minecraft.client.multiplayer.WorldClient;
 | 
			
		||||
import net.minecraft.client.renderer.EntityRenderer;
 | 
			
		||||
import net.minecraft.client.settings.GameSettings;
 | 
			
		||||
import net.minecraft.network.NetworkManager;
 | 
			
		||||
import net.minecraft.network.Packet;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Brady
 | 
			
		||||
 * @since 7/31/2018 11:05 PM
 | 
			
		||||
 */
 | 
			
		||||
public interface IGameEventListener {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run once per game tick before screen input is handled.
 | 
			
		||||
     *
 | 
			
		||||
     * @see Minecraft#runTick()
 | 
			
		||||
     */
 | 
			
		||||
    void onTick(TickEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run once per game tick from before the player rotation is sent to the server.
 | 
			
		||||
     * @see EntityPlayerSP#onUpdate()
 | 
			
		||||
     */
 | 
			
		||||
    void onPlayerUpdate();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Run once per game tick from before keybinds are processed.
 | 
			
		||||
     *
 | 
			
		||||
     * @see Minecraft#processKeyBinds()
 | 
			
		||||
     */
 | 
			
		||||
    void onProcessKeyBinds();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs whenever the client player sends a message to the server.
 | 
			
		||||
     *
 | 
			
		||||
     * @see EntityPlayerSP#sendChatMessage(String)
 | 
			
		||||
     */
 | 
			
		||||
    void onSendChatMessage(ChatEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before and after whenever a chunk is either loaded, unloaded, or populated.
 | 
			
		||||
     *
 | 
			
		||||
     * @see WorldClient#doPreChunk(int, int, boolean)
 | 
			
		||||
     */
 | 
			
		||||
    void onChunkEvent(ChunkEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs once per world render pass. Two passes are made when {@link GameSettings#anaglyph} is on.
 | 
			
		||||
     * <p>
 | 
			
		||||
     * <b>Note:</b> {@link GameSettings#anaglyph} has been removed in Minecraft 1.13
 | 
			
		||||
     *
 | 
			
		||||
     * @see EntityRenderer#renderWorldPass(int, float, long)
 | 
			
		||||
     */
 | 
			
		||||
    void onRenderPass(RenderEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before and after whenever a new world is loaded
 | 
			
		||||
     *
 | 
			
		||||
     * @see Minecraft#loadWorld(WorldClient, String)
 | 
			
		||||
     */
 | 
			
		||||
    void onWorldEvent(WorldEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before a outbound packet is sent
 | 
			
		||||
     *
 | 
			
		||||
     * @see NetworkManager#dispatchPacket(Packet, GenericFutureListener[])
 | 
			
		||||
     */
 | 
			
		||||
    void onSendPacket(PacketEvent event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Runs before an inbound packet is processed
 | 
			
		||||
     *
 | 
			
		||||
     * @see NetworkManager#dispatchPacket(Packet, GenericFutureListener[])
 | 
			
		||||
     */
 | 
			
		||||
    void onReceivePacket(PacketEvent event);
 | 
			
		||||
}
 | 
			
		||||
@@ -19,6 +19,7 @@ package baritone.bot.pathing.movement;
 | 
			
		||||
 | 
			
		||||
import baritone.bot.utils.Helper;
 | 
			
		||||
import baritone.bot.utils.ToolSet;
 | 
			
		||||
import net.minecraft.entity.player.InventoryPlayer;
 | 
			
		||||
import net.minecraft.init.Items;
 | 
			
		||||
import net.minecraft.item.ItemStack;
 | 
			
		||||
 | 
			
		||||
@@ -28,6 +29,8 @@ import net.minecraft.item.ItemStack;
 | 
			
		||||
 */
 | 
			
		||||
public class CalculationContext implements Helper {
 | 
			
		||||
 | 
			
		||||
    private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET);
 | 
			
		||||
 | 
			
		||||
    private final ToolSet toolSet;
 | 
			
		||||
    private final boolean hasWaterBucket;
 | 
			
		||||
 | 
			
		||||
@@ -37,7 +40,7 @@ public class CalculationContext implements Helper {
 | 
			
		||||
 | 
			
		||||
    public CalculationContext(ToolSet toolSet) {
 | 
			
		||||
        this.toolSet = toolSet;
 | 
			
		||||
        this.hasWaterBucket = player().inventory.hasItemStack(new ItemStack(Items.WATER_BUCKET)); // TODO check if water bucket is on hotbar or main inventory
 | 
			
		||||
        this.hasWaterBucket = InventoryPlayer.isHotbar(player().inventory.getSlotFor(STACK_BUCKET_WATER));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ToolSet getToolSet() {
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ import java.util.Optional;
 | 
			
		||||
public class MovementFall extends Movement {
 | 
			
		||||
 | 
			
		||||
    private static final ItemStack STACK_BUCKET_WATER = new ItemStack(Items.WATER_BUCKET);
 | 
			
		||||
    private static final ItemStack STACK_BUCKET_AIR = new ItemStack(Items.BUCKET);
 | 
			
		||||
    private static final ItemStack STACK_BUCKET_EMPTY = new ItemStack(Items.BUCKET);
 | 
			
		||||
 | 
			
		||||
    public MovementFall(BlockPos src, BlockPos dest) {
 | 
			
		||||
        super(src, dest, MovementFall.buildPositionsToBreak(src, dest), new BlockPos[]{dest.down()});
 | 
			
		||||
@@ -89,8 +89,8 @@ public class MovementFall extends Movement {
 | 
			
		||||
                }
 | 
			
		||||
                if (playerFeet.equals(dest) && (player().posY - playerFeet.getY() < 0.01
 | 
			
		||||
                        || BlockStateInterface.isWater(dest))) {
 | 
			
		||||
                    if (BlockStateInterface.isWater(dest) && player().inventory.hasItemStack(STACK_BUCKET_AIR)) {
 | 
			
		||||
                        player().inventory.currentItem = player().inventory.getSlotFor(STACK_BUCKET_AIR);
 | 
			
		||||
                    if (BlockStateInterface.isWater(dest) && player().inventory.hasItemStack(STACK_BUCKET_EMPTY)) {
 | 
			
		||||
                        player().inventory.currentItem = player().inventory.getSlotFor(STACK_BUCKET_EMPTY);
 | 
			
		||||
                        if (player().motionY >= 0) {
 | 
			
		||||
                            return state.setInput(InputOverrideHandler.Input.CLICK_RIGHT, true);
 | 
			
		||||
                        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,6 @@ import net.minecraft.entity.player.EntityPlayer;
 | 
			
		||||
import net.minecraft.init.Blocks;
 | 
			
		||||
import net.minecraft.util.math.AxisAlignedBB;
 | 
			
		||||
import net.minecraft.util.math.BlockPos;
 | 
			
		||||
import org.lwjgl.opengl.GL11;
 | 
			
		||||
 | 
			
		||||
import java.awt.*;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
@@ -52,7 +51,7 @@ public final class PathRenderer implements Helper {
 | 
			
		||||
        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);
 | 
			
		||||
        GL11.glLineWidth(3.0F);
 | 
			
		||||
        GlStateManager.glLineWidth(3.0F);
 | 
			
		||||
        GlStateManager.disableTexture2D();
 | 
			
		||||
        GlStateManager.depthMask(false);
 | 
			
		||||
        List<BlockPos> positions = path.positions();
 | 
			
		||||
@@ -99,7 +98,7 @@ public final class PathRenderer implements Helper {
 | 
			
		||||
        GlStateManager.enableBlend();
 | 
			
		||||
        GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
 | 
			
		||||
        GlStateManager.color(color.getColorComponents(null)[0], color.getColorComponents(null)[1], color.getColorComponents(null)[2], 0.4F);
 | 
			
		||||
        GL11.glLineWidth(5.0F);
 | 
			
		||||
        GlStateManager.glLineWidth(5.0F);
 | 
			
		||||
        GlStateManager.disableTexture2D();
 | 
			
		||||
        GlStateManager.depthMask(false);
 | 
			
		||||
        float expand = 0.002F;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user